1.题目
设计并实现SNL语言的编译程序,需要包括词法分析模块、语法分析模块(递归下降法或者LL(1)方法)。
要求语法分析模块最后输出语法树为语义分析做准备。
SNL是一种类似PASCAL的高级程序设计语言。
SNL语言介绍:
程序头
声明部分(类型声明、变量声明、过程声明)
程序体部分(begin....end)
2.代码思路
1. 如何进行的词法分析呢?
词法分析是为了得到每个符号的语义,转换成token记号表示,其中左边的都是它们的语义信息,为下一步语法分析做准备。
doToken()函数:获取到输入的字符串,按行进行存储,调用函数进行词法分析。
getTokenList()词法分析函数:对每行数据分别进行处理:
对每行从第一个字符开始读入:
①DFA的初始状态是start,根据读入的字符是数字、字符、赋值符:、单引号‘、数组下标、转义符、注释开始{、空格制表符等,确定本标识符的状态
并且同时判定其存不存储,如果均不是那么就标记为结束状态,表示之前的DFA进入终止状态,并且判断当前是否是=、<、>、-*+这些操作,并且设计上分别的标记,比如=就是EQ。
②如果之前是评论状态的话,就不处理,或者是其出错;判断是不是}也就是,是不是注释结束状态,那么就是下一个标识符识别的开始。
彡如果之前是赋值状态,那么当前处理的一定是=,如果不是,就标记为冒号。
④如果是数组下标状态 . ,如果是字符状态,如果是标识符状态。
五并且结束后对每个字符判断是不是存储起来,
存储起来?默认是存储的,
不存储的?比如转义符、引住字符的单引号、注释。
⑥是字母串的时候, 先标记为ID,最后done了再去判断是否是标识符。
2.如何进行的递归下降呢?
3.如果用LL1该怎么实现呢?