词法分析器实验报告代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编译系统课程实验报告实验1:词法分析

常数:

digits -> digit digit*

optionalFraction -> .digits|ε

optionalExponent -> E(+|-|ε)digits|ε

number -> digits optionalFraction optionalExponent

运算符:

(除/,/=外的)op -> + | - | * | += | -= | *= | % | ++ | -- | != | == | > | < | >= | <= | >> | << | ^ | | | & | && | || | ! | !=

(以/开头的)op->/|/=

界符:Boundary -> { | } | [ | ] | ( | ) | , | ; | : | ? |~

行//注释:Comment->//(除\n外的字符)*\n

块/**/注释:Comment->/*(除*/外的字符)*/

8进制:OCT -> 0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)*

16进制:HEX -> 0x(1|…|9|a|…|f) (0|…|9|a|…|f)*

字符常数:char -> ' (a|b|c|...|z|A|B|C|...|Z|_) '

字符串常数:string-> "((((除\和”外的字符)*|\(所有字符)+)(除\和”外的字符|\”))*)"(2)各类单词的转换图

标识符:

8进制,16进制,10进制常数:

运算符:

界符:

行//注释:

块/**/注释:字符常数:字符串常数:

词法分析系统主要分为三部分:前端,核心处理程序和后端。

前端:负责展示用户界面,(1)从外部文件中读取DFA转换表;(2)读取测试样例,或者直接在界面上编辑测试样例;(3)将文本传入核心处理程序。

核心处理程序:负责对读取的文本进行词法分析,将生成的token序列以及错误信息传入系统后端。

后端:负责对结果进行展示,将token序列与错误信息打印输出在用户界面上。

(2)系统详细设计:对如下工作进行展开描述

✓核心数据结构的设计

核心为纯模拟+JFrame。由于DFA的确定性,每次可以根据当前状态和下一个输入字符确定下一个状态。

一直循坏重复以下动作:

1.如果没有下一个状态可行,字符回退一格,并判断当前状态是否是终止状态,若是,则识别成功;若不是,识别失败,格式错误,清空记录(当初始状态时是在过滤换行、空格、制表符)

2.如果字符不合法(不在DFA的列中),则报“非法字符”错

3.合法的话,则更新状态和记录。

✓主要功能函数说明

1.判断是否是字母、数字等等DFA列的布尔函数

boolean IsLetter_

boolean IsDigit

boolean IsOp

boolean Isjie

boolean Is_end

boolean ck_reser

....

2.Lexer.lex():生成token序列、识别进程、错误信息,模拟DFA运转

读入一个string,返回一个string(包含token序列,识别过程以及错误信息)格式如下:

循环模拟,具体流程见流程图。

3.Lexer.init():初始化状态,读入DF表,终止状态表。

4.Lexer.get_next():枚举DFA列,进行状态转移。

四、系统实现及结果分析

词法分析结果:

(3)输出针对此测试程序对应的词法错误报告;

(4)对实验结果进行分析。

词法分析器读入源程序后,对于各类正确单词能够进行识别,根据上述测试样例可以看到成功识别了:

(1)标识符(“id”、”name”、”flag”、”a”、”b”、”ch”、”cch”等);

相关文档
最新文档