1. 课设要求
TASK2
任务2:创建一个使用LL(1) 方法或LR(1) 方法的语法分析程序。
程序有两个输入
一个是文本文档,其中包含2º型文法(上下文无关文法)的产生式集
任务1词法分析程序输出的(生成的)token令牌表。程序的输出包括:YES或NO(源代码字符串符合此2º型文法,或者源代码字符串不符合此2º型文法);错误提示文件,如果有语法错标示出错行号,并给出大致的出错原因。
语法分析程序的推荐处理逻辑:根据用户输入的2º型文法,生成Action及Goto表,设计合适的数据结构,判断 token序列(用户输入的源程序转换)是否符合LR1文法规则,识别token序列,输出结果。
提示:选用LR(1)方法的起评分数高😉
所以……当然是选用的LR(1)文法啦🤣,真的是被迫“卷”
2. 实验结果
input_right.txt(正确的token表)
2 int keyword
2 main keyword
2 ( limited
2 ) limited
2 { limited
3 12+13i const
3 ; limited
4 int keyword
4 k sign
4 = operator
4 -12.46e78 const
5 ; limited
6 int keyword
6 y sign
6 = operator
6 x sign
6 + operator
6 k sign
6 ; limited
7 return keyword
7 0 const
7 ; limited
8 } limited
input_err.txt(错误的token表)
2 int keyword
2 main keyword
2 ( limited
2 ) limited
2 { limited
3 12+13i const
3 ; limited
4 int keyword
4 k sign
4 = operator
4 -12.46e78 const
5 ; limited
6 int keyword
6 y sign
6 = operator
6 x sign
6 + operator
6 k sign
6 ; limited
7 return keyword
7 0 const
8 } limited
input2.txt(语法)
[START] --> [X]
[X] --> ['int']['main']['('][')']['{'][BLOCK]['}']
[BLOCK] --> [const][';']
[BLOCK] --> [const][';'][BLOCK]
[BLOCK] --> [FORMULA][';'][BLOCK]
[FORMULA] --> ['int'][sign]['='][F]
[F] --> [E]['+'][F]
[F] --> [E]
[E] --> [N]['*'][N]
[E] --> [N]
[N] --> [sign]
[N] --> [const]
[BLOCK] --> [RETURN]
[RETURN] --> ['return'][const][';']
[RETURN] --> [final]
[X] -->[final]
output
YES
NO
中间生成的LR(1)分析表