海贼 19-8 班 C++ 综合项目,设计一门自己的编程语言(类似Python解析器)
为了实战C++设计模式,因此编写一个类似Python的解析器。不言而喻,这是一个很有意义的事情,并且很容易成为了我做过的最酷的项目。通过使用了Antlr
解析成抽象语法树,可以自定义语法,这很nice!
更新中...
-
1.antlr_test是
Antlr
的基本使用方法的一个小例子(建议先研究) -
2.hython-v1是
Hython
语言的设计开发源代码bin目录下存放的是生成可执行文件
hython
,hython xx.py
类似python xx.py
。include存放的头文件,其中
ExprTreeEvaluator.h
、hythonLexer.h
、hythonParser.h
是Antlr
生成的,通常没必要理会。lib存放的你所安装
Antlr
后的libantlr3c.a
(自行找一下),和环境有关系,clone下的代码,你必须先把这个.a
换成你自己的,否则环境不同跑不通。src存放所有的
.c
、.cc
文件。testdata存放所有的测试数据文件。
thirdpart中的
.jar
是编译的时候必备的,和java
有关系,具体编译参考makefile
文件,此处.g
文件是存放文法文本的,自定义语法的地方,.tokes
是Antlr
生成的,里面给每种语法字符进行了编上数字,以便于在编写设计程序时的switch()
方便。makefile编译文件。
-
3.Others存放的其他。
测试很简单makefile中把所有的运行自动化在此套件中
$make #make debug
$make run
Antlr
将源码解析成抽象语法树.它为包括Java,C++,C#在内的语言提供了一个通过语法描述来自动构造自定义语言的识别器(recognizer),编译器(parser)和解释器(translator)的框架。
安装:
http://blog.csdn.net/wfp458113181wfp/article/details/9148577
http://contrapunctus.net/blog/2012/antlr-c
在文法文件中含有输出结构信息(tree ...)的语句 通过 jar 嵌入到生成的 c 中
- 增加除法表达式的支持(增加文本[源代码]中的关键字)
- 增加取余表达式的支持(增加文本[源代码]中的关键字)
- 修改解释器,对于每一行内容,都输出其表达式的值(修改解析器的功能)
- 增加定义变量的语法结构
- 增加作用域的功能
(完成文发文件解释器的程序部分)
- 整理工程目录,
inclue/lib/bin/src/...
- 整理
main.cpp
内容,分成头文件和源文件,main.cpp
尽量简单 print
子句- 条件表达式(
==,<=,>=,&&,||
) if
结构的增加for
结构的增加while
结构的增加do...while
结构的增加- 找 bug
非常关键,能够理解 bug,才能锻炼思维
- 用责任链模式改写整体
ExprTreeEvaluator
类的功能 - 增加责任链的单例模式,MasterChianSingle 类
- 增加 master 类
- 增加了作用域 parameter 类
找到程序中的bug
// The suffix '^' means make it a root. ^作用:提升至抽象语法树的根节点。
// The suffix '!' means ignore it. !作用:忽略
expr :表达式。冒号后面是表达式。
*号:代表:0 ~多次; +号:代表: 1 ~多次
atom : 原子操作 : INT, ID, (),等。INT代表整数, ID代表标识符。
stmt:代码段; ->代表重映射。ASSIGN代表:= ;
^(ASSIGN ID expr)代表:=号为根节点, ID, expr 分别:左右子树。