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.pccg = 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

调试器

界面

编译器学习与实践记录相关推荐

  1. 分享基金学习与实践记录经验!

    大家好,我是热爱学习和赚钱的书豪同学,是一个在每周三下午两点都要买买买5000元左右基金的青年才俊哈. 2020年是我的指数基金投资的第一年,很高兴能够在B站跟大家分享自己的指数基金投资实盘现状以及未 ...

  2. PikaScript实践记录(2)之移植PikaScript(1)

    PikaScript实践记录之最小BSP包工程 Author:onceday Date:2022年9月3日 也信美人终做土,不堪幽梦太匆匆! 前言: 本文章基于PikaScript脚本语言在阿波罗St ...

  3. Google App Engine 学习和实践

    这个周末玩了玩Google App Engine,随手写点东西,算是学习笔记吧.不当之处,请多多指正. 作者:liigo,2009/04/26夜,大连 原创链接:http://blog.csdn.ne ...

  4. 深度学习笔记第二门课 改善深层神经网络 第一周:深度学习的实践层面

    本文是吴恩达老师的深度学习课程[1]笔记部分. 作者:黄海广[2] 主要编写人员:黄海广.林兴木(第四所有底稿,第五课第一二周,第三周前三节).祝彦森:(第三课所有底稿).贺志尧(第五课第三周底稿). ...

  5. .NET Core 微服务学习与实践系列文章目录索引(2019版)

    Photo :.NET Core 文 | Edison Zhou 2018年,我开始学习和实践.NET Core,并开始了微服务的学习,以及通过各种开源组件搭建服务治理技术方案,并在学习过程中总结了一 ...

  6. .NET Core on K8S 学习与实践系列文章索引 (更新至20191126)

    更新记录: -- 2019-11-26 增加Docker容器日志系列文章 近期在学习Kubernetes,基于之前做笔记的习惯,已经写了一部分文章,因此给自己立一个flag:完成这个<.NET ...

  7. .NET Core on K8S 学习与实践系列文章索引 (更新至20191116)

    更新记录: -- 2019-11-16 增加Docker容器监控系列文章 // 此外,今天是11月17日,我又老了一岁,祝我自己生日快乐! 近期在学习Kubernetes,基于之前做笔记的习惯,已经写 ...

  8. boltdb 学习和实践

    golang boltdb的学习和实践 1. 安装 go get github.com/boltdb/bolt 2.创建和启动数据库 db, err := bolt.Open("my.db& ...

  9. 深度学习系列 -- 第二门课 改善深层神经网络:超参数调试、正则化以及优化(一):深度学习的实践层面(Practical aspects of Deep Learning)

    目录 一.深度学习的实践层面(Practical aspects of Deep Learning) 1 训练,验证,测试集(Train / Dev / Test sets) 2 偏差,方差(Bias ...

最新文章

  1. 最新软件测试岗位职责大全,看看哪些你还没掌握?
  2. 【已解决】Android 如何让应用在后台运行
  3. RHEL5+Postfix+MySql+IMAP+MailDrop+ExtMail(5)
  4. 带有Flask的服务器端DataTable
  5. linux系统下升级node,linux下安装指定版本的nodejs(升级到指定版本)
  6. oracle imp 分隔符,Oracle的imp/exp 各版本之间的规则
  7. highcharts插件使用总结和开发中遇到的问题及解决办法
  8. android的listview单项中包含RadioButton,实现RadioButton的单选显示效果
  9. win7语言包_win7系统语音包安装图文教程
  10. CAD批量输入坐标生成红线
  11. PythonOcc实战——step文件导入、零件识别、几何属性、爆炸图初步展示
  12. 硬盘文件系统系列专题之二 NTFS
  13. 笔记本和linux台式共享网络,怎么把笔记本的网络共享给台式电脑
  14. 搭建Genero BDL环境-安装篇
  15. CentOS 7.4 安装部署 hadoop 2.6 文档 V1.3
  16. 旧手机先别扔,余承东:留着升级一下鸿蒙
  17. 音叉公振频率与双臂质量的计算关系
  18. 英语读书笔记-Book Lovers Day02
  19. 我的世界html导入整合包教程,我的世界Windows整合包移植到Mac教程
  20. 有效防御DDOS和APT攻击

热门文章

  1. android播放视频过程cpu占用高,Android App高CPU使用率和电池消耗
  2. ccs低版本打开高版本的工程问题
  3. VC维(VC Dimension)
  4. 《惢客创业日记》2021.05.09-10(周日)真正的高手不炫技
  5. 基于雷达的铁路桥梁防撞预警方案
  6. 移动办公OA行业的普及推动力——泛微三季报披露
  7. npm run serve命令出错:semi错误: 6:35 error Extra semicolon semi 7:46 error Extra semicolon semi
  8. 支持向量机(Support Vector Machine)原理总结(二)
  9. JavaWeb基础(2):熟悉HTMLCSS、Servlet、JSP、EL、JSTL、会话控制、jQuery、JSON、Filter、Listener
  10. 常见B端产品经理面试问题及答案(二)【11年大厂面试官呕心制作】