实验 1-4 词法分析器实验
实验 1-4 《编译原理》S 语言词法分析程序设计方案
一、实验目的
了解词法分析程序的两种设计方法:1.根据状态转换图直接编程的方式;2.利用 DFA
编写通用的词法分析程序。
二、实验内容
1.根据状态转换图直接编程
编写一个词法分析程序,它从左到右逐个字符的对源程序进行扫描,产生一个个的单
词的二元式,形成二元式(记号)流文件输出。在此,词法分析程序作为单独的一遍,如
下图所示。
具体任务有:
(1)组织源程序的输入
(2)拼出单词并查找其类别编号,形成二元式输出,得到单词流文件
(3)删除注释、空格和无用符号
(4)发现并定位词法错误,需要输出错误的位置在源程序中的第几行。将错误信息输
出到屏幕上。
(5)对于普通标识符和常量,分别建立标识符表和常量表(使用线性表存储),当遇
到一个标识符或常量时,查找标识符表或常量表,若存在,则返回位置,否则返回 0 并且
填写符号表或常量表。
标识符表结构:变量名,类型(整型、实型、字符型),分配的数据区地址
注:词法分析阶段只填写变量名,其它部分在语法分析、语义分析、代码生成等阶段
逐步填入。
常量表结构:常量名,常量值
2.编写 DFA 模拟程序
DFA 的功能:用最简单的方法得出符合规则的字符串
算法如下:
DFA(S=S0,MOVE[][],F[],ALPHABET[])
/*S 为 状 态 , 初 值 为 DFA 的 初 态 , MOVE[][] 为 状 态 转 换 矩 阵 , F[] 为 终 态 集 ,
ALPHABET[] 为字母表,其中的字母顺序与 MOVE[][] 中列标题的字母顺序一致。*/
{
Char Wordbuffer[10]=“”//单词缓冲区置空
Nextchar=getchar();//读
i=0;
while(nextchar!=NULL)//NULL 代表此类单词
{ if (nextchar!∈ALPHABET[]) {ERROR(“非法字符”), return(“非法字符
”); }
S=MOVE[S][nextchar] //下一状态
if(S=NULL)return(“不接受”); //下一状态为空,不能识别,单词错误
wordbuffer[i]=nextchar ; //保存单词符号
i++;
nextchar=getchar();
}
1
- 1
- 2
- 3
前往页