成都高标建设有限公司官方网站,临沭网站建设,西昌网站建设公司,永久免费不收费的污染app前言#xff1a;
作者的词法分析程序以及算符优先语法分析设计程序仓库链接
1、目标任务
**[实验项目] **以专题 1 词法分析程序的输出为语法分析的输入#xff0c;实现算符优先分析算法#xff0c;完成以下描述算术表达式的算符优先文法的算符优先分析过程。
G[E]:E→E…前言
作者的词法分析程序以及算符优先语法分析设计程序仓库链接
1、目标任务
**[实验项目] **以专题 1 词法分析程序的输出为语法分析的输入实现算符优先分析算法完成以下描述算术表达式的算符优先文法的算符优先分析过程。
G[E]:E→ET∣E-T∣T T→T*F∣T/F∣F F→(E)∣i[设计说明] 终结符号 i 为用户定义的简单变量,即标识符的定义。
**[设计要求] **1构造该算符优先文法的优先关系矩阵或优先函数2输入串应是词法分析的输出二元式序列即某算术表达式“专题 1”的输出结果。输出为输入串是否为该文法定义的算术表达式的判断结果。3算符优先分析过程应能发现输入串出错。4设计至少四个测试用例尽可能完备正确和出错并给出测试结果
优先关系矩阵的构造如下图所示 程序功能描述
程序的功能是执行算符优先分析用于对给定的表达式进行语法分析。它基于算符优先算法来确定表达式中运算符的优先级和结合性以此进行语法分析。主要步骤包括
读取输入表达式: 从名为 “test.txt” 的文件中读取表达式。预处理: 将读取的表达式中的变量和常量替换为 ‘i’ 符号得到用于分析的表达式。算符优先级分析: 使用算符优先算法对表达式进行分析。分析过程: 逐步检查表达式中的运算符优先级利用预先定义的优先级矩阵和语法规则来判断是否存在语法错误或可以规约的部分。输出结果: 根据分析结果程序会输出语法分析的结果指出是否表达式符合定义的语法规则。
主要数据结构描述
mapchar, mapchar, char priorityMatrix: 这是一个嵌套的 map 结构用于表示算符之间的优先关系。外部的 char 表示当前栈顶运算符内部的 mapchar, char 表示当前输入运算符和栈顶运算符的优先级关系。mapstring, char grammer: 这个 map 结构定义了语法规则将字符串作为键将对应的非终结符作为值。它表示了规约过程中可以使用的规则。vector Vt: 包含终结符号的向量。这里存储了表达式中可能出现的所有终结符号。vector Vn: 包含非终结符号的向量。这个向量包含了在语法规则中用于推导的非终结符号。vector s: 这是模拟的分析栈用于存储算符优先分析过程中的中间状态。
程序结构描述
函数定义和其功能 readFile(): 从文件 “test.txt” 中读取输入的表达式。 对读取的表达式进行预处理将变量和常量替换为 ‘i’ 符号。返回预处理后的表达式字符串。 OperatorPrecedenceAnalysis(string str): 实现算符优先语法分析的核心逻辑。接收一个字符串作为输入对其进行算符优先分析。利用优先级矩阵和语法规则进行分析判断是否符合语法规则返回分析结果true/false。 reduce(string temp): 用于在分析过程中进行规约操作。根据规约的临时字符串在语法规则中查找对应的规约字符。 isVt(char ch) 和 isVn(char ch): 判断给定字符是否为终结符和非终结符。分别用于检查输入字符是否属于终结符和非终结符。 displayAnalysisProcess(const vector stack, const string input, int inputPointer): 打印当前分析栈的内容和剩余输入串的内容。 main(): 主函数负责程序的整体流程控制。 调用readFile()读取输入表达式。 调用OperatorPrecedenceAnalysis()执行算符优先语法分析。 根据语法分析的结果输出相应的信息。
函数调用关系
main() 调用 readFile() 获取表达式然后调用 OperatorPrecedenceAnalysis() 执行语法分析。OperatorPrecedenceAnalysis() 在分析过程中可能调用 reduce() 进行规约操作并在必要时调用 isVt() 和 isVn() 进行符号类型判断。reduce() 在规约时根据临时字符串查找对应的规约字符。displayAnalysisProcess() 在每次分析时用于输出当前状态。
程序测试
测试文件 测试文件 测试文件