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
调试器
界面