Releases: DML308/COStreamPP
Releases · DML308/COStreamPP
指定输出文件的目录
版本更新 && 工作目录变动
抽象语法树到平面图的转换
NEW FEATURES
1. streamFlow()方法完成流参数的替换
读入MainComposite节点,用实际的stream输入输出替换形参stream输入输出名
2. GraphToOperators()方法
此递归调用,完成splitjoin和pipeline节点的展开,以及opearatorNode到flatnode节点的映射.
对于抽象语法树转平面图四种结构:
- operator_结构
S=copmosite1(){
statement.list;
init {}
work {}
window {}
}
- compositeCall结构
param:
int size;
S1=composite2()();
S2=composite3(S1)();
S3=composite4(S2)(size);
S4=composite5()(size)
- SplitJoin结构
Out = splitjoin (In){
split.statement;
for(;;){
add composite6();
}
join.statement;
};
- Pipeline结构
Out = pipeline(In){
for(;;){
add composite7();
}
};
3.SetFlatNodesWeights()函数
对于生成的flatNode节点集合遍历,求得节点的push,pop,peek值,为调度做准备.
4. 语法树转平面图的几个关键性问题:
- a..将split duplicate/roundrobin节点展开成一个包含composite operator调用的composite, 其中包含生成对应的输入和输出流
- b.修改将split与join节点之间的composite函数调用的输入和输出流
- c.将join节点展开生成一个composite operator调用
- d.根据输入和输出流的关系保存composite节点与flatNode节点的映射,从而完成astTree到平面图的转换
- e.需要修改原始operatorNode的结构 使得适应语法树到平面图的转换
5.抽象语法树到平面图的理解
需要重点理解unfoldComposite函数,此为展开图结构的核心部分.
效果图(jpeg测试用例):
增加 node 节点和 toString()方法 , 优化 Error 和 Warning
🆕 NEW FEATURES
1. 增加 node 节点
能够从读取的文法中, 把语法树一层一层地构建出来, 例如 contantNode 函数 等等
未完成的部分: 和splitjoin add等数据流相关操作节点后续会有较大改动, 可以先忽略
2. toString()方法
为以expNode为主的节点实现了 toString()方法, 以此减少大量重复的line debug语句, paser.y得以缩减至760行
3. Warning和Error
现在遇到语法错误可以输出源文件的对应行了(必须是读文件才行,stdin不行,同时要求gcc > 4.9,),详细见下面效果图
🔔 CHANGES
1.idNode
将如下结构合并为 idNode ,计划将数组后缀/参数列表/数据类型统一存入 idNode 的成员中
exp.assignable :
idNode
;
idNode:
IDENTIFIER
| IDENTIFIER array.declarator
;
2. exp的改变
新的exp:文法结构的前三行由exp.assignable变为如下所示的简洁形式, 其中.操作符与其它双元操作符一样归入binopNode
exp: idNode
| constant
| idNode '.' idNode



