词法分析-编译原理-词法分析
1、 实验内容或题目
设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。
2、实验目的与要求
用C语言对一个简单语言的子集编制一个一遍扫描的编译程序,以加深对编译原理的理解,掌握编译程序的实现方法和技术。
3、 实验步骤与源程序
⑴ 实验步骤
1.待分析的简单语言的词法
①关键字
begin if then while do end 所有的关键字都是小写
②运算符和界符
: = + - * / < <= > >= = ; () #
③其他单词时标识符(ID)和整型常数(NUM),通过以下正规式定义:
ID=letter(letter|digit)*
NUM=digit digit*
④空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM、运算符、界符和关键字,词法分析阶段通常被忽略。
2.各种单词符号对应的种别码
单词符号 种别码 单词符号 种别码
begin 1 : 17
if 2 := 18
then 3 < 20
while 4 <> 21
do 5 <= 22
end 6 > 23
letter(letter|digit) * 10 >= 24
digit digit* 11 = 25
+ 13 ; 26
- 14 ( 27
* 15 ) 28
/ 16 # 0
3.词法分析程序的功能
输入:所给文法的源程序字符串。
输出:二元组(syn, token或sum)构成的序列。
其中:syn为单词种别码;
token为存放的单词自身字符串;
sum为整型常数。
例如:对源程序
begin x:=9 ; if x>0 then x:=2*x+1/3; end # 的源文件,经词法分析后输出如下序列:(1,begin)(10,’x’)(18,:=)(11,9)(26,;)(2,if)…
算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描单词符号的第一个字符种类,拼出相应的单词符号。
4.主程序示意图如下:
①关键字表的初值
关键字作为特殊表示符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下:char *rwtab[6]={“begin”,”if”,”then”,”while”,”do”,”end”};
②程序中需要用到的主要变量为syn ,token和sum。
5.扫描子程序的算法思想
首先设置3个变量:①token用来存放构成单词符号的字符串;②sum用来存放整型单词;③syn用来存放单词符号的种别码。
扫描子程序主要部分流程164