JLU 2016级 计算机科学与技术学院 编译原理课程设计
SNL语言的词法分析,语法分析
参考:https://github.com/YouthLin/SNL-Compiler
- 词法分析:直接转向法
 - 语法分析:自顶向下的非递归语法分析(预测分析表)
 - GUI
 
- 运行
com.mytlx.compiler包下的SNLCforGUI - 图形界面左半部可以直接输入SNL,也可以选择文件输入
 - 点击“生成Token序列”按钮,右上部会输出相应的Token序列
 - 点击“生成语法分析树”按钮,右上部会输出相应的语法分析树
 - 点击上述两按钮的同时,右下部会输出日志信息和错误信息
 
- log/
- error.log
 - log.log
 
 - src/
- main/
- java/
- com.mytlx.compiler/
- GUI/
- LineNumberHeaderView.java
 - ParseForGUI.java:GUI用到的词法分析和语法分析
 - SNLCompilerGUI.java:GUI结构
 
 - lexer/
- Lexer.java:词法分析,直接转向法
 - LexerResult.java:词法分析结果
 - Token.java:Token格式
 - TokenType.java:词法单元枚举
 
 - syntax/
- LL1/
- LexParse.java:语法分析之前所需的词法分析,以及语法分析中需要用到的函数
 - LL1Parse.java:自顶向下的非递归语法分析
 
 - symbol/
- Symbol.java:终结符和非终结符的父类
 - Terminal.java:终结符
 - NonTerminal.java:非终结符
 - NON_TERMINAL.java:预测分析表
 
 - tree/
- SyntaxTree.java:语法树,打印函数
 - TreeNode.java:树结点
 
 
 - LL1/
 - utils/
- FileUtils.java:GUI用到的文件操作相关函数
 - PropertiesUtils.java:读取properties配置文件的工具类
 - ToStringUtils.java:list的toString
 
 - SNLCforGUI.java:主启动类,GUI版本
 - SNLC.java:主启动类,控制台版本
 
 - GUI/
 
 - com.mytlx.compiler/
 - resources/
- SNL语言例子/:测试用例
 - tmp/:GUI用到的中间临时文件
- snlText.txt:源文件临时存储
 - tokenList.txt:词法分析生成的Token列表的存储文件
 - syntaxTree.txt:语法分析生成的语法树的存储文件
 
 - logback.xml:日志的配置文件
 - path.properties:配置文件,存储文件路径
 - p.snl:测试用例
 
 
 - java/
 
 - main/
 
- windows下,GUI中的汉字可能会乱码
 - 词法分析中出现
{}}}时,第一个}被识别,其他的会当作错误符号 
- 产生式48,预测集应为
)右括号,而不是左括号- 用例:c1.txt 第9行:
procedure sd(integer a); 
 - 用例:c1.txt 第9行:
 - 产生式67,预测集应添加
[左方括号- 用例:c1.txt 第16行:
y[ss]:=ss; 
 - 用例:c1.txt 第16行:
 - 产生式93,预测集应添加
]右方括号- 用例:c1.txt 第16行:
y[ss]:=ss; 
 - 用例:c1.txt 第16行:
 - 产生式67,预测集应添加
.点号- 用例:c1.txt 第22行:
a.x:=c; 
 - 用例:c1.txt 第22行:
 - 产生式43,应为:
ProcDecMore ::= ProcDec,而不是ProcDeclaration- 用例:c1.txt 第20行:
procedure sss(integer a); 
 - 用例:c1.txt 第20行: