# 编译原理 **Repository Path**: summer153/compilation-principle ## Basic Information - **Project Name**: 编译原理 - **Description**: 编译原理代码 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-11-18 - **Last Updated**: 2022-04-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 编译原理 #### 介绍 编译原理代码 ## 实验四、DFA的单词识别 【问题描述】 **基于DFA的单词识别问题的一种描述是:****编写一个程序,输入一个确定的有穷自动机(DFA),使用该DFA识别单词。**** ** ***\*【基本要求】设置DFA初始状态X,终态Y,过程态用数字表示:0 1 2 3………\**** 【输入形式】标准输入 【输出形式】标准输出 【样例输入】 a b# X Y 0 2# X X-a->0 X-b->X Y Y-a->0 Y-b->X 0 0-a->0 0-b->2 2 2-a->0 2-b->Y abb# ba# aca# 【样例输出】 a b b pass b a error a error 【样例说明】 样例输入: ​ 由2部分构成,第1部分为DFA的输入,其中第1行为有效字符,第2行为所有状态,第3行开始为状态变迁函数的表示(每个状态1行),以空行表示结束;第2部分为待识别符号串,可以包含多个,每个串以"#"结束。 样例输出: 对每个待识别输出识别出单词的情况。正确识别出1个单词则输出该单词,全部正确识别最后输出pass;识别单词时出现错误则输出error,识别结束。例如:对于串“abb#”是全部单词正确识别,且遇"#"时进入终态;对于串“ba#”是能识别每个单词,但遇"#"时未进入终态,所以会输出每个单词,但最终为"error”;对于串“aca#”是在识别到"c"时出错(非法字符),因此程序终止在这里,输出"a"和"error"。 ### 实验五、2019词法分析 【问题描述】 请根据给定的文法设计并实现词法分析程序,从源程序中识别出单词,记录其单词类别和单词值,输入输出及处理要求如下: (1)数据结构和与语法分析程序的接口请自行定义;类别码需按下表格式统一定义; (2)为了方便进行自动评测,输入的被编译源文件统一命名为testfile.txt;输出的结果文件统一命名为output.txt,结果文件中每行按如下方式组织: 单词类别码 单词的字符/字符串形式(中间仅用一个空格间隔) 单词的类别码请统一按如下形式定义: | 单词名称 | 类别码 | 单词名称 | 类别码 | 单词名称 | 类别码 | 单词名称 | 类别码 | | -------- | ------- | -------- | -------- | -------- | ------ | -------- | ------- | | 标识符 | IDENFR | if | IFTK | - | MINU | = | ASSIGN | | 整型常量 | INTCON | else | ELSETK | * | MULT | ; | SEMICN | | 字符常量 | CHARCON | do | DOTK | / | DIV | , | COMMA | | 字符串 | STRCON | while | WHILETK | < | LSS | ( | LPARENT | | const | CONSTTK | for | FORTK | <= | LEQ | ) | RPARENT | | int | INTTK | scanf | SCANFTK | > | GRE | [ | LBRACK | | char | CHARTK | printf | PRINTFTK | >= | GEQ | ] | RBRACK | | void | VOIDTK | return | RETURNTK | == | EQL | { | LBRACE | | main | MAINTK | + | PLUS | != | NEQ | } | RBRACE | 【输入形式】testfile.txt中的符合文法要求的测试程序。 【输出形式】要求将词法分析结果输出至output.txt中。 【样例输入】 ``` const int const1 = 1, 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 const INTTK int IDENFR const1 ASSIGN = INTCON 1 COMMA , IDENFR const2 ASSIGN = MINU - INTCON 100 SEMICN ; CONSTTK const CHARTK char IDENFR const3 ASSIGN = CHARCON _ SEMICN ; INTTK int IDENFR change1 SEMICN ; CHARTK char IDENFR change3 SEMICN ; INTTK int IDENFR gets1 LPARENT ( INTTK int IDENFR var1 COMMA , INTTK int IDENFR var2 RPARENT ) LBRACE { IDENFR change1 ASSIGN = IDENFR var1 PLUS + IDENFR var2 SEMICN ; RETURNTK return LPARENT ( IDENFR change1 RPARENT ) SEMICN ; RBRACE } VOIDTK void MAINTK main LPARENT ( RPARENT ) LBRACE { PRINTFTK printf LPARENT ( STRCON Hello World RPARENT ) SEMICN ; PRINTFTK printf LPARENT ( IDENFR gets1 LPARENT ( INTCON 10 COMMA , INTCON 20 RPARENT ) RPARENT ) SEMICN ; RBRACE } ```