魏陈强 23020092204168 实验二 词法分析器 一、实验目的 掌握词法分析器的构造原理,掌握手工编程或 LEX编程方法之一
二、实验内容 编写一个词法分析器,能够输入的源程序转换为单词序列输出
三、实验要求 1.可以采用手工或 LEX开发工具,采用 VC环境
2.源语言定义见教材附录 A
1,其中的终结符即词法分析需要得到的tokens
(1)该语言的关键字:if while do break real true false int char bool float (其中,int、char、boolean、float在产生式中为basic) 所有的关键字都是保留字,并且必须是小写
(2)id和num的正则表达式定义; (3)专用符号:+ - * / < >= ==
= = ; , ( ) [ ] { } /* */ (4)空格由空白、换行符和制表符组成
空格通常被忽略,除了它必须分开I D、N U M关键字
(5)考虑注释
注释由/*和*/包含
注释可以放在任何空白出现的位置,且可以超过一行
注释不能嵌套
3.实现词法分析器的注意要点: (1 ) 关键字和标识符名的区别; (2 ) 数字的转换处理; (3 ) “>=”和“>”这类单词的处理; 四、实验思路 本次实验,打算两种方法都使用
1、采用LEX开发工具编写,熟悉LEX语言的编写格式即可
2、手工编写 定义一个关键字数组,预先存入所以可能出现的关键字,并分 别创建两个关键字表、ID表、num表、专用符号表、注释表,以及一个作为缓存的数组
采用命令行读入语句形式,读入一行语句,设置while(1)循环分别读取每个字符,以‘\n’作为结束
读入一个字符,判断其属于哪个类别,然后通过调用函数转向那个类别所属的子程序去执行
比如,读入一个字符,判断出为字母,因此调用void alpha();进入字