Skip to content

Releases: DML308/COStreamPP

指定输出文件的目录

08 May 16:53

Choose a tag to compare

NEW FEATURES

  • 现在可以使用./a ../tests/xx.cos -o ouput来手动指定文件夹了

不指定的话默认为新建StaticDistCode/filename文件夹

存在的 BUG

目前关于;的处理有耦合度极高的 BUG , 待修复.
在代码生成构建出的文件中如果遇到 ; 有问题还请先手动修改来跑.

版本更新 && 工作目录变动

08 Apr 07:18

Choose a tag to compare

NEW FEATURES

  • 完善了语法树转数据流图的部分 by 杨飞
  • 增加了 console 中的输出来直观地查看语法树转数据流图工作量估计的结果, 如下图
    image

工作人员分支变动

  • 后续杨飞为了论文可能添加的内存池部分代码转移至yf分支
  • 其它同学的阅读代码和调试在dev分支内进行

抽象语法树到平面图的转换

11 Jan 07:08

Choose a tag to compare

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

20 Dec 12:22
75a9f20

Choose a tag to compare

🆕 NEW FEATURES

1. 增加 node 节点

能够从读取的文法中, 把语法树一层一层地构建出来, 例如 contantNode 函数 等等
未完成的部分: 和splitjoin add等数据流相关操作节点后续会有较大改动, 可以先忽略

2. toString()方法

为以expNode为主的节点实现了 toString()方法, 以此减少大量重复的line debug语句, paser.y得以缩减至760行

3. WarningError

现在遇到语法错误可以输出源文件的对应行了(必须是读文件才行,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 

效果图:

命令行输入预处理+生命周期中第一遍扫描

12 Dec 14:01
b3257dc

Choose a tag to compare

new Features

1. handle_options 对命令行输入预处理

  • -v,--version输出版本信息
  • -h,--help 输出帮助信息
  • ../tests/xx.cos 读文件
  • -j,--nCpucore 设置核数(目前没用)
  • -w 隐藏警告(目前没用)

2. main.cpp中对生命周期规范化

  • 加入第一遍扫描,方便后续符号表处理.

效果图:

语法分析+词法分析完成

03 Dec 13:11
822231f

Choose a tag to compare

文件夹目录说明

  • docs : 代码重构时的一些想法纪录在这里,包含对一些文件的简单说明
  • tests : 测试用的代码
  • src
    • config : 词法分析和语法分析脚本文件
    • include : 头文件
    • src : 和头文件对应的 .cpp 文件
      • main.cpp 程序入口
      • FrontEnd 前端
      • BackEnd 后端
  • .editorconfig 编辑器代码风格配置文件
  • .gitignore git 忽略文件目录
  • README.md 说明文件

运行时效果: