下载后可任意编辑实验 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 ( nextchar! ∈ALPHABET[]) {ERROR( ” 非 法 字符”) , return( ”非法字符”) ; } S=MOVE[S][nextchar] //下一状态 if( S=NULL) return( ”不接受”) ; //下一状态为空, 不能识别, 单词错误 wordbuffer[i]=nextchar ; //保存单词符号 i++; nextchar=getchar( ) ; }Wordbuffer[i]=‘\0’;If( S∈F) return( wordbuffer) ; //接受 Else return( ”不接受”) ; }该算法要求: 实现 DFA 算法, 给定一个 DFA( 初态、 状态转换矩阵、 终态集、 字母表) , 调用 DFA( ) , 识别给定源程序中的单词, 查看结果是否正确。下载后可任意编辑三、 实验要求1.能对任何 S 语言源程序进行分析在运行词法分析程序时,...