实验二 词法分析器的构造
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二词法分析器的构造
一、实验目的
掌握词法分析器的构造原理,掌握手工编程或LEX编程方法之一。
二、实验内容
编写一个词法分析器,能够将输入的源程序转换为单词序列输出。
三、实验指南
1.正则表达式定义
(1)该语言的关键字:if while do break real true false int char bool float (其中,int、char、bool、float在产生式中为basic)
所有的关键字都是保留字,并且必须是小写。
if|then|else|while|do|break|real|true|false|int|char|bool|float
(2)id和num的正则表达式定义;
letter [A-Za-z]
digit [0-9]
id {letter}({letter}|{digit})*
number {digit}+(\.{digit}+)?(E[+-]?{digit}+)?
(3)专用符号:+ - * / < <= > >= == != = ; , ( ) [ ] { }
relop <|<=|=|<>|>|>=|==|!=|=
addop "+"|"-"|"*"|"/"|";"|","|"("|")"|"["|"]"|"{"|"}"
(4)空格由空白、换行符和制表符组成。空格通常被忽略,除了它必须分开I D、N U M关键字。
delim [ \t \n ]
ws {delim}+
(5)考虑注释。注释由/*和*/包含。注释可以放在任何空白出现的位置,且可以超过一行。注释不能嵌套。
zhushi "/*"(\"\*\/\"|[^*/]|"*"[^/]|[^*]"/"|\/\*)*"*/"
2.源程序测试示例
要求应自行准备多个源程序片段,运行并测试输出是否合符要求。示例1:
源程序输入:
{
int i;
if ( i >= 0) i = i + 1;
}
输出token序列如下:
示例2:
源程序片段:
{
int i; int j; float v; float x; float[100] a;
while ( true) {
do i = i + 1; while ( a[i] < v);
do j = j - 1; while ( a[j] > v);
if ( i >= j ) break;
x = a[i]; a[i] = a[j]; a[j] = x;
}
}
实例3:
/**chenhuajie*”/”***/
四、心得体会
通过本次实验,我更加了解正则表达式的用法。掌握了用flex生成词法程序
的方法。变编译原理这门课有了更具体的认识。