精品文档
编译方法实验报告
实验1:扫描器的设计
一、 实验目的
熟悉并实现一个扫描器(词法分析程序)。
。
1欢迎下载
精品文档
二、 实验要求
(1) 设计扫描器的有限自动机(识别器);
(2) 设计翻译、生成Token的算法(翻译器); (3) 编写代码并上机调试运行通过。
·输入——源程序文件或源程序字符串; ·输出——相应的Token序列;
关键字表和界符表; 符号表和常数表;
三、 实验步骤
流程:
初始化;
打开用户源程序文件;
while (文件未结束)
{ 读入一行到w[i],i=0;
do //处理一行,每次处理一个单词
{ 滤空格,直到第一个非空的w[i]; i--;
s=1; //处理一个单词开始
while (s!=0) //拼单词并生成相应Token {
act(s); //执行qs
if (s>=11 && s<=14) //一个单词处理结束 break;
i++; //getchar() s=find(s, w[i]); }
if (s==0) 词法错误;
}while (w[i]!=换行符); }
关闭用户源程序文件; 生成Token文件; 输出关键字表; 输出Token序列; 输出符号表; 输出常数表;
有限自动机的状态转换图:
e
。 2欢迎下载
精品文档
d d d +|- -1/+/- +① d ② . ③ d ④ e ⑤ ⑥ d ⑦ 11 d - -1/+/- l/d -1/+/- -1 12 l ⑧ - -1 13 b ⑨ b ⑩ - -1 14 - -1 15 - 其中:d为数字,l为字母,b为界符,-1代表其它符号(如在状态8处遇到了非字母或数字的其它符号,会变换到状态12)。
关键字表和界符表:
Program Begin End Var While Do Repeat Until For To If Then Else
; : ( ) , := + - * / > >= == < &