下载后可任意编辑实验 1-4 《编译原理》S 语言词法分析程序设计方案一、 实验目的了解词法分析程序的两种设计方法: 1
根据状态转换图直接编程的方式; 2
利用 DFA 编写通用的词法分析程序
二、 实验内容1.根据状态转换图直接编程编写一个词法分析程序, 它从左到右逐个字符的对源程序进行扫描, 产生一个个的单词的二元式, 形成二元式( 记号) 流文件输出
在此, 词法分析程序作为单独的一遍, 如下图所示
具体任务有: ( 1) 组织源程序的输入( 2) 拼出单词并查找其类别编号, 形成二元式输出, 得到单词流文件( 3) 删除注释、 空格和无用符号( 4) 发现并定位词法错误, 需要输出错误的位置在源程序中的第几行
将错误信息输出到屏幕上
( 5) 对于普通标识符和常量, 分别建立标识符表和常量表( 使用线性表存储) , 当遇到一个标识符或常量时, 查找标识符表或常量表, 若存在, 则返回位置, 否则返回 0 而且填写符号表或常量表
标识符表结构: 变量名, 类型( 整型、 实型、 字符型) , 分配的数据区地址注: 词法分析阶段只填写变量名, 其它部分在语法分析、 语义分析、 代码生成等阶段逐步填入
常量表结构: 常量名, 常量值下载后可任意编辑2.编写 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 (