编译原理课程设计总结

1.题目

设计并实现SNL语言的编译程序,需要包括词法分析模块、语法分析模块(递归下降法或者LL(1)方法)。

要求语法分析模块最后输出语法树为语义分析做准备。

SNL是一种类似PASCAL的高级程序设计语言。

SNL语言介绍:

 程序头

声明部分(类型声明、变量声明、过程声明)

程序体部分(begin....end)

 2.代码思路

1. 如何进行的词法分析呢?

词法分析是为了得到每个符号的语义,转换成token记号表示,其中左边的都是它们的语义信息,为下一步语法分析做准备。

doToken()函数:获取到输入的字符串,按行进行存储,调用函数进行词法分析。

getTokenList()词法分析函数:对每行数据分别进行处理:

对每行从第一个字符开始读入:

①DFA的初始状态是start,根据读入的字符是数字、字符、赋值符:、单引号‘、数组下标、转义符、注释开始{、空格制表符等,确定本标识符的状态

并且同时判定其存不存储,如果均不是那么就标记为结束状态,表示之前的DFA进入终止状态,并且判断当前是否是=、<、>、-*+这些操作,并且设计上分别的标记,比如=就是EQ。

②如果之前是评论状态的话,就不处理,或者是其出错;判断是不是}也就是,是不是注释结束状态,那么就是下一个标识符识别的开始。

彡如果之前是赋值状态,那么当前处理的一定是=,如果不是,就标记为冒号。

④如果是数组下标状态 . ,如果是字符状态,如果是标识符状态。

五并且结束后对每个字符判断是不是存储起来,

存储起来?默认是存储的,

不存储的?比如转义符、引住字符的单引号、注释。

⑥是字母串的时候, 先标记为ID,最后done了再去判断是否是标识符。

2.如何进行的递归下降呢?

3.如果用LL1该怎么实现呢?

原文地址:https://www.cnblogs.com/BlueBlueSea/p/9642574.html