语法-1.3:通用抽象语法和嵌入式语言实用程序

安全哈斯克尔

语言。句法。共享.Graph

目录

描述

抽象语法图的表示和操作

简介

代表

数据 节点哪里来源

语法树占位符

建造师

节点时间:节点ID->节点(完全a) 

节点EqEnvdom公司哪里来源

字母等效性环境

实例

~ (* ->约束)第页(dom)=>节点EqEnv多姆(设备环境dom p) 

数据 ASG公司dom公司来源

“抽象语法图”

具有显式共享的语法树的表示ASG公司在以下情况下有效只有当内联全部成功(并且num个节点字段正确)。

建造师

ASG公司 

领域

topExpression(顶部表达式)时间:ASTF公司(节点域dom)一个

顶级表达

图形节点:: [(节点ID,ASTSAT卫星(节点域dom))]

从节点id映射到子表达式

num个节点时间:节点ID

节点总数

类型 节点域dom=(节点 :+:dom):|| dom公司来源

显示ASG时间:ToTree公司dom=>ASG公司dom a->字符串来源

使用ASCII艺术显示语法图

图纸ASG时间:ToTree公司dom=>ASG公司dom a->IO(输入输出)()来源

使用ASCII艺术打印语法图

重新索引节点AST:: (节点ID->节点ID) ->AST公司(节点域dom)a->AST公司(节点域dom)一个来源

更新AST公司使用提供的重新索引功能

重新索引节点:: (节点ID->节点ID) ->ASG公司dom a->ASG公司dom公司来源

根据给定的索引映射重新索引节点。节点数不变,因此如果索引映射不是1:1,则结果图将包含重复项。

从0重新索引节点时间:ASG公司dom a->ASG公司dom公司来源

重新索引范围内的节点[0..l-1],其中是数字图中节点的数量

nub节点时间:ASG公司多玛->ASG公司dom公司来源

从图形中删除重复的节点。该函数只查看节点ID每个节点的。这个num个节点相应地更新字段。

折叠

数据 语法PFdom公司哪里来源

的模式函子表示AST公司具有节点

建造师

AppPF公司::a->a->语法PFdom公司 
节点PF时间:节点ID->a->语法PFdom公司 
DomPF公司::dom b->语法PFdom公司 

foldGraph(折叠图形)时间:对于所有人dom a b公司(语法PFdom b->b)->ASG公司doma->(b(阵列 节点IDb、[(节点ID(b)])来源

折叠图形

用户提供了一个函数来折叠单个构造函数(“代数”)。结果包含折叠整个图形的结果以及每个内部节点的结果,表示为数组和关联列表。每个节点只处理一次。

内衬

内联全部时间:对于所有人dom a。约束者dom公司可键入=>ASG公司dom a->ASTF公司dom公司来源

转换ASG公司AST公司通过内联所有节点

节点儿童时间:ASG公司dom a->[(节点ID, [节点ID])]来源

在表达式中查找每个节点的子节点。的子节点节点n个是所有路径上的第一个节点n个.

个事件时间:ASG公司dom a->阵列 节点ID 国际来源

计算表达式中每个节点的出现次数

内联单时间:对于所有人dom a。约束者dom公司可键入=>ASG公司dom a->ASG公司dom公司来源

内联所有未共享的节点

共享

哈希节点时间:平等dom=>ASG公司dom a->(阵列 节点ID 搞砸[(节点ID,搞砸)])来源

计算的哈希值表(数组和列表表示形式)每个节点

分区节点时间:对于所有人dom a(平等dom中,AlphaEq(阿尔法公式)dom-dom公司(节点域dom)(设备环境(节点域dom)(dom))=>ASG公司dom a->[[节点ID]]来源

如果和,则对节点进行分区,使两个节点位于同一子列表中只有当它们是字母等效的。

cse公司:: (平等dom、,AlphaEq(阿尔法公式)dom-dom公司(节点域dom)(设备环境(节点域dom)(dom))=>ASG公司dom a->ASG公司dom公司来源

基于字母等效性的常见亚表达消除