编译器学习与实践记录

2023:

1. 以P4编译器为目标,构建一个完备的编译器前端。以ucc为蓝本。

2. 以riscv为目标,构建一个完备的P4后端

3. 完成一个简单的图形界面

4. 探索调试支持

5. 观摩LLVM,印证所学

进展

---------------------------done--------------------------

2023.04.20

  1. 完成部分词法分析

  2. 完成部分表达式解析,支持赋值表达式,双目运算符

  3. 完成一个简单的ast解释器,能进行四则运算,支持括号,赋值,比较,支持变量。支持三种模式:对输入文件里面的表达式语句进行计算输出;对stdin的输入进行一次性编译计算输出;交互模式,控制台输入语句,实时计算输出。目前像是一个初步的python。

2023.04.25

1. 支持if else

2. 支持while

3. 支持print作为关键字,输出信息,支持可变参数

4. 支持函数定义的解析

5. 支持import

完成里程碑1:支持输出hello world

2023.04.25

里程碑2:支持函数定义和调用

2023.05.05

里程碑3:支持内置数组和字典

2023.05.09

里程碑4:基本完善操作符

for break none ?: typename char i++/-- unary +/-/!/~ swap 

完成对象引用计数的标记

支持class,constructor,field, method

完成非确定有限自动机NFA匹配正则表达式,简单版,支持"."和"*"。

2023.05.19 解决了一下内存泄漏问题。垃圾回收的条件具备了。

2023.06.01 完成测试用例+学习例程:LL文法预测分析表构造

# compiler principle, ll
import ll.pcc

g = grammar_t()

g.add_string("E = T EE")
g.add_string("EE = + T EE | e")
g.add_string("T = F TT")
g.add_string("TT = * F TT | e")
g.add_string("F = (EE)")
g.add_string("F = (E) | id")

g.calc()

ll = ll_t()

ll.attach_grammar(g)
ll.calc()

ll.print()

运行结果:

conflict found: 
last: F = ( EE )
curr: F = ( E )
the latter is prefer
first:
    E = T EE    : [ "(", "id" ]
    EE = + T EE : [ "+" ]
    EE = e      : [ "e" ]
    T = F TT    : [ "(", "id" ]
    TT = * F TT : [ "*" ]
    TT = e      : [ "e" ]
    F = ( EE )  : [ "(" ]
    F = ( E )   : [ "(" ]
    F = id      : [ "id" ]
table: 
    |+             |e             |*             |(             |)             |id            
-------------------|--------------|--------------|--------------|--------------|--------------|
E   |              |              |              |0:E = T EE    |              |0:E = T EE    
-------------------|--------------|--------------|--------------|--------------|--------------|
EE  |1:EE = + T EE |2:EE = e      |              |              |              |              
-------------------|--------------|--------------|--------------|--------------|--------------|
T   |              |              |              |3:T = F TT    |              |3:T = F TT    
-------------------|--------------|--------------|--------------|--------------|--------------|
TT  |              |5:TT = e      |4:TT = * F TT |              |              |              
-------------------|--------------|--------------|--------------|--------------|--------------|
F   |              |              |              |7:F = ( E )   |              |8:F = id      
-------------------|--------------|--------------|--------------|--------------|--------------|

---------------------------doing--------------------------

DOING:

支持C语言

用pcc语言验证编译原理——自顶向下的语法分析

垃圾回收

---------------------------to do--------------------------

支持声明的解析

完善语句解析:

        else if

        do while break continue

        switch case default break

        for break continue

        label goto

支持类型定义

语义分析

中间代码生成

代码优化

机器代码生成

虚拟机

jit

调试器

界面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值