文件名称:编译原理 词法分析 代码
文件大小:95KB
文件格式:DOCX
更新时间:2015-05-02 04:36:33
编译原理 词法分析
用C语言编写一个只包含部分保留字和单词符号(见语言子集L)的PASCAL语言的扫描器(词法分析器)。 1、该词法分析器的任务: (1)滤掉源程序中的无用成分,如空格; (2)输出分类记号供语法分析器使用,并产生两个表格:常数表和标识符表,表的数据结构和包含内容可参看书中第八章符号表; (3)识别非法输入,并将其标记为“出错记号”。 2、该词法分析器的功能: 以在下面段落中定义的PASCAL语言子集的源程序作为词法分析程序的输入数据。词法分析器打开该文件后,自文件头开始扫描源程序字符,发现符合“单词”定义的源程序字符串时,将它翻译成固定长度的单词内部表示,并查填适当的信息表,一旦发现不符合“单词”定义的源程序字符串时,给出错误提示。经过词法分析后,源程序字符串(源程序的外部表示)被翻译成具有等长信息的单词串(源程序的内部表示),并产生两个表格:常数表和标识符表,它们分别包含了源程序中的所有常数和所有标识符。 3、PASCAL语言子集L----保留字不区分大小写 L={ VAR,BEGIN,ELSE,END,IF,THEN,REAL,INTEGER,=,:=,-,+,*,; ,. }∪{常数}∪{标识符} 4、实验要求: (1)词法分析器构造:正规式设计、DFA设计、代码编写; (2)进行词法分析器的测试:测试例程(一小段程序)、测试结果与测试结果分析。 (3)实验报告格式自拟;实验报告中要对实验要求中正规式设计、DFA设计、代码编写、测试例程(3中定义的PASCAL语言子集的源程序段)、测试结果与测试结果分析逐项给予说明。 例子: 本例中单词符号(记号)的种类: 1、保留字; 2、分隔符; 3、运算符; 4、等符 5、常数; 6、标识符 (单词符号的分类可以自己规定,只是要在实验报告中给出说明) 测试例程PASCAL程序清单如下: BEGIN IF I=1 THEN ^ A:=I+1 ELSE *& IF I=2 THEN A:=I+11; END. # 运行词法分析程序后,显示如下结果如下: BEGIN (1,1) IF (1,4) I (6,0) = (4,2) 1 (5,0) THEN (1,5) ^ error, not a word A (6,1) := (2,2) I (6,0) + (3,0) 1 (5,0) ELSE (1,2) * (3,2) & error, not a word IF (1,4) I (6,0) = (4,2) 2 (5,1) THEN (1,5) A (6,1) := (2,2) I (6,0) + (3,0) 11 (5,2) ; (2,1) END (1,3) . (2,3) # error, not a word over 常数表CT:1,2 标识符表LT:I,A