实验二 词法分析器的构造

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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生成词法程序

的方法。变编译原理这门课有了更具体的认识。

相关文档
最新文档