# CompilationPrinciple **Repository Path**: Icon2004/compilation-principle ## Basic Information - **Project Name**: CompilationPrinciple - **Description**: 《编译原理》课程实验及自学代码 - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2025-03-07 - **Last Updated**: 2025-03-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CompilationPrinciple 《编译原理》课程实验及自学代码 ## Update ### 2021-4-21 **语法分析器更新(LR(1)):**   现在可以对分析结果进行图形化展示了! ### 2021-4-19 **语法分析器更新(LR(1)):**   添加LR(1)分析法的语法分析器 ### 2021-4-14 **词法分析器更新:**   现在可以检测源文件中的词法错误并将错误分类同时显示在界面中 ### 2021-4-12 **Bug fixed:**   修复了一个bug,该bug会导致预测分析表无法给出多层推导得出的产生式   修复了一个bug,该bug会导致当非终结符相互嵌套推导产生时,Follow集的推导会产生死循环 **实现语法分析器(LL(1)):**   完成了语法分析类,可以基于给定的上下文无关文法对输入字符串进行自上而下推导 ### 2021-4-11 **添加基于LL(1)的语法分析器项目:**   完成了语法分析器工具类,包含生成First集、Follow集以及分析表的功能 ### 2021-4-9 **更新位置记录及文本选中功能:**   现在在分析结果中可以显示每一个词的开始和结束位置了;不仅如此,当你在表格中点击它时,输入框中对应的词将会被选中! ## LexicalAnalysis 词法分析器(C++) 基于Java1.8实现了C++语言的词法分析,并且完成了GUI设计,用户可以直接在文本框中输入待分析源代码,也可以直接打开本地源码文件。 简单设计了一下控件布局 ~~,虽然还是不太好看~~。 ![非常丑陋的demo](img/demo.png) **Lexer.java**:词法分析的核心类,完成对输入字符串的词法分析,在构造函数时提供一个被SourceFileReader封装的字符串,词法分析的结果在TokenList中 **Position.java**:位置类,实现了光标的前移/后移的内部转换和外部返回两种模式 **SourceFileReader.java**:对String封装的类,实现了向外部逐个输出字符并记录位置信息 **Token.java**:词的类,包含了词的值、特种码、中文描述和其在源码中始末位置的信息 **Utils.java**:包含了各种工具方法,具体使用方法详见源码注释 **LexicalAnalysisMain.java**:项目启动主类,完成了对GUI前段的设计 **,若不涉及GUI则可忽略** **Token_FX.java**:为了适配Javafx而对Token进行了重新封装 **,若不涉及GUI则可忽略** **SignatureCode.md**:列举C++词法中的所有词,以及它们的特征码和中文描述(当然这里的特征码是我个人定义的) --- Q:如果我不想以GUI的方式运行词法分析器应该怎么做? A:非常简单。只需要在LexicalAnalysisMain类的main方法中注释掉launch()并且调用Test()即可,详见下图: ![以非GUI的方式运行词法分析器](img/LexicalAnalysisDemo.png) ## GrammarParserLL1 语法分析器(LL(1)) 基于Java1.8,使用LL(1)分析法实现了对于给定已消除左递归的上下文无关文法文法的语法分析。 目前已完成生成First集、Follow集以及分析表的功能 ![生成First集、Follow集以及分析表](img/GrammarParserUtilsDemo.png) 添加自上而下语法分析功能 ![自上而下语法分析](img/GrammarParserMainDemo01.png) 运行结果: ![自上而下语法分析](img/GrammarParserMainDemo02.png) ## GrammarParserLR1 语法分析器(LR(1)) 使用LR(1)分析法实现了对于给定的文法和待分析句子的语法分析器。 功能有待完善、展示效果有待优化…… 文法文件: ![输入文法](img/GrammarParserMainDemo03.png) 程序入口: ![程序入口](img/GrammarParserMainDemo04.png) 分析结果(部分): ![分析结果(部分)](img/GrammarParserMainDemo05.png) 现在可以对分析结果进行图形化展示了: ![分析结果(部分)](img/GrammarParserMainDemo06.png)