任务书
p 设计内容
在计算机科学中,抽象语法树(abstract syntax tree或者缩写为AST),是将源代码的语法结构的用树的形式表示,树上的每个结点都表示源程序代码中的一种语法成分。之所以说是“抽象”,是因为在抽象语法树中,忽略了源程序中语法成分的一些细节,突出了其主要语法特征。
抽象语法树(Abstract Syntax Tree ,AST)作为程序的一种中间表示形式,在程序分析等诸多领域有广泛的应用.利用抽象语法树可以方便地实现多种源程序处理工具,比如源程序浏览器、智能编辑器、语言翻译器等。
在《高级语言源程序格式处理工具》这个题目中,首先需要采用形式化的方式,使用巴克斯(BNF)范式定义高级语言的词法规则(字符组成单词的规则)、语法规则(单词组成语句、程序等的规则)。再利用形式语言自动机的的原理,对源程序的文件进行词法分析,识别出所有单词;使用编译技术中的递归下降语法分析法,分析源程序的语法结构,并生成抽象语法树,最后可由抽象语法树生成格式化的源程序。
p 设计要求
要求具有如下功能:
1. 语言定义
选定C语言的一个子集,要求包含:
(1)基本数据类型的变量、常量,以及数组。不包含指针、结构,枚举等。
(2) 双目算术运算符(+-*/%),关系运算符、逻辑与(&&)、逻辑或(||)、赋值运算符。不包含逗号运算符、位运算符、各种单目运算符等等。
(3)函数定义、声明与调用。
(4)表达式语句、复合语句、if语句的2种形式、while语句、for语句,return语句、break语句、continue语句、外部变量说明语句、局部变量说明语句。
(5)编译预处理(宏定义,文件包含)
(6)注释(块注释与行注释)
2. 单词识别
设计DFA的状态转换图(参见实验指导),实验时给出DFA,并解释如何在状态迁移中完成单词识别(每个单词都有一个种类编号和单词的字符串这2个特征值),最终生成单词识别(词法分析)子程序。
3. 语法结构分析
(1)外部变量的声明;
(2)函数声明与定义;
(3)局部变量的声明;
(4)语句及表达式;
(5)生成(1)-(4)(包含编译预处理和注释)的抽象语法树并显示。
4. 按缩进编排生成源程序文件。
p 参考文献
[1] 王生原,董渊,张素琴,吕映芝等. 编译原理(第3版). 北京:清华大学出版社. 前4章
[2] 严蔚敏等.数据结构(C语言版).北京:清华大学出版社