.. | ||
.idea | ||
src | ||
.gitignore | ||
LL1.iml | ||
README.md |
作业信息
课程 | 实验名称 |
---|---|
编译原理 | 语法分析器的构造 |
要求
《语法分析器的构造》综合性实验大纲
一、实验目的
设计、编制、调试一个LL(1)语法分析器,利用语法分析器对符号串的识别,加深对语法分析原理的理解。
二、实验内容
设计并实现一个LL(1)语法分析器,实现对算术文法
E->E+T|T
T->T*F|F
F->(E)|i
所定义的符号串进行识别,例如符号串98+99+80
为文法所定义的句子,符号串(106-80(*95)
不是文法所定义的句子。
三、实验要求
- 1、检测左递归,如果有则进行消除;
- 2、求解FIRST集和FOLLOW集;
- 3、构建LL(1)分析表;
- 4、构建LL分析程序,对于用户输入的句子,能够利用所构造的分析程序进行分析,并显示出分析过程。 以上实验要求可分两个同学完成。例如构建分析表一个同学完成、构建分析程序并分析符号串一个同学完成。
四、实验报告
参看《考核方法及实验/实习报告》中实验报告内容及要求。
五、思考题
- 能否不采用预先定义的文法,而是允许用户输入文法的若干规则,生成文法?
结果
输入的文法:
0: E->TE'
1: E'->+TE'
2: E'->ε
3: T->FT'
4: T'->*FT'
5: T'->ε
6: F->(E)
7: F->i
分析表:
E,(: E->TE'
E,i: E->TE'
E',+: E'->+TE'
E',#: E'->ε
E',): E'->ε
T,(: T->FT'
T,i: T->FT'
T',*: T'->*FT'
T',+: T'->ε
T',#: T'->ε
T',): T'->ε
F,(: F->(E)
F,i: F->i
分析过程:98+99+80
1: #E i+i+i# E->TE'
2: #E'T i+i+i# T->FT'
3: #E'T'F i+i+i# F->i
4: #E'T'i i+i+i#
5: #E'T' +i+i# T'->ε
6: #E' +i+i# E'->+TE'
7: #E'T+ +i+i#
8: #E'T i+i# T->FT'
9: #E'T'F i+i# F->i
10: #E'T'i i+i#
11: #E'T' +i# T'->ε
12: #E' +i# E'->+TE'
13: #E'T+ +i#
14: #E'T i# T->FT'
15: #E'T'F i# F->i
16: #E'T'i i#
17: #E'T' # T'->ε
18: #E' # E'->ε
19: # # 成功
分析过程:(106-80(*95)
Exception in thread "main" AnalyzeTable$UnknownSymbolException:
出现了未知符号: -
at: (i-i(*i)
^---------This
at AnalyzeTable.splitToVn(AnalyzeTable.kt:239)
at AnalyzeTable.analyze(AnalyzeTable.kt:258)
at MainKt.main(Main.kt:19)
at MainKt.main(Main.kt)
Credits
2024 Kagura, 请勿直接抄袭