
词法分析实验报告
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
【问题描述】请根据所提供的文法规范设计并构建一个词法分析程序,该程序能够从源程序代码中识别出各个单词,并记录下每个单词的类别以及其对应的字符序列。程序需满足以下输入、输出及处理方面的具体要求: (1)请您自行定义用于数据结构的方案,并设计与语法分析程序之间的接口;类别码必须严格按照预先定义的表格格式进行统一规定; (2)为了便于自动评估程序的正确性,输入的被编译的源文件应统一命名为“testfile.txt”(务必确保文件名准确无误);输出结果文件也应统一命名为“output.txt”(同样需要注意避免文件名错误),结果文件中每一行应按照以下结构进行组织: 单词类别码、单词的字符或字符串形式(中间仅用一个空格分隔)、单词类别码。 单词类别码的统一定义格式如下: “单词名称” 紧跟 “类别码”,此过程应重复,直到完成所有单词的描述。标识符的类别码请使用 “IDENFR” 进行标识。 其他关键词如 “else”、“ELSETK”、“MINU”、“ASSIGN”、“INTCON”、“switch”、“SWITCHTK”、“MULT”、“SEMICN”、“CHARCON”、“case”、“CASETK”、“/”、“DIV”、“COMMA” 和 “DEFAULTTK” 等也需要相应的类别码进行标识。整形常量使用 “INTCON”,字符常量使用 “CHARCON”,字符串常量使用“STRCON”进行表示。此外,“while”, “WHILETK”, “<=”, “LEQ”, “int”, “INTTK”, “for”, “FORTK”, “>”, “GRE”, “[“, LBRACK, char, CHARTK, scanf, SCANFTK, >=, GEQ, ], RBRACK, void, VOIDTK, printf, PRINTFTK, ==, EQL, {, main, MAINTK, return,RETURNTK,!=,NEQ,if,IFTK,+,:,【输入形式】“testfile.txt” 文件中包含符合所定义文法规则的测试程序。【输出形式】要求将词法分析的结果输出至“output.txt”文件中。【特别提醒】(1)读取到的字符串应当完整地保留原样,尤其要注意数字类型的字符串,这里输出的是读入的字符串,而非实际的单词值,而真实的单词值需要单独记录; (2)本次作业主要考察对正确程序的处理能力,但同时也需要考虑未来可能出现的错误情况,因此请在设计中预留相应的接口; (3)在后续可能出现的错误处理作业中,需要记录错误的行号信息,以便于诊断和定位问题;请在词法分析阶段及时记录这些信息。(4)在词法分析阶段获取到的单词类别、对应的值以及其他相关的信息将在后续的语法分析阶段被使用,因此务必妥善记录这些数据。目前所要求的输出仅仅是为了方便评测程序的正确性,实际编译器中无需包含这些信息。因此, 请设计一种便于打开和关闭这些输出信息的方案。【文法定义】请参考“2020年文法定义(用于查看文法,不计入成绩)”作业中的文法规范 【样例输入】包含整数常量和字符常量的源程序代码:“const int const1 = 001, const2 = -100; const char const3 = _; int change1; char change3; int gets1(int var1, int var2){ change1 = var1 + var2; return (change1);} void main(){ printf(Hello World); printf(gets1(10, 20));}”【样例输出】CONSTTK coNstINTTK intIDENFR cONst1ASSIGN =INTCON 001COMMA ,IDENFR const2ASSIGN =MINU -INTCON 100SEMICN ;CONSTTK constCHARTK charIDENFR const3ASSIGN =CHARCON _SEMICN ;INTTK intIDENFR change1SEMICN ;CHARTK charIDENFR change3SEMICN ;INTTK intIDENFR gets1LPARENT (INTTK intIDENFR var1COMMA ,INTTK intIDENFR var2RPARENT )LBRACE {IDENFR change1ASSIGN =IDENFR var1PLUS +IDENFR var2SEMICN ;RETURNTK returnLPARENT (IDENFR change1RPARENT )SEMICN ;RBRACE }VOIDTK voidMAINTK mainLPARENT (RPARENT )LBRACE {PRINTFTK printfLPARENT (STRCON Hello WorldRPARENT )SEMICN ;PRINT”
全部评论 (0)


