一、实验目的
通过本实验的编程实践,使学生了解词法分析的任务,掌握词法分析程序设计的原理和构造方法,使学生对编译的基本概念、原理和方法有完整的和清楚的理解,并能正确地、熟练地运用。
二、实验内容
本实验要求用VC++/VB/JAVA语言实现对C语言子集的源程序进行词法分析。通过输入源程序从左到右对字符串进行扫描和分解,依次输出各个单词的内部编码及单词符号自身值;若遇到错误则显示“Error”,然后跳过错误部分继续显示;同时进行标识符登记符号表的管理。以下是实现词法分析设计的主要工作:
1. 从源程序文件中读入字符。2. 统计行数和列数用于错误单词的定位。3. 删除空格类字符,包括回车、制表符空格。4. 按拼写单词,并用(内码,属性)二元式表示。5. 如果发现错误则报告出错。6. 根据需要是否填写标识符表供以后各阶段使用。
三、实验过程与结果
在本实验中,我们选择使用VC++语言进行词法分析器的实现。首先,我们通过读入源程序的方式,对字符进行处理,统计行数和列数,以便于后续的错误单词定位。接着,我们删除空格类字符,然后进行词法分析。在词法分析过程中,我们使用(内码,属性)二元式表示单词,其中属性表示单词的类别,如关键字或常数,自身值则表示单词的具体值。如果发现错误,我们会报告出错,并根据需要填写标识符表。
实验过程中,我们发现了一些错误,如漏掉了部分字符、单词拼写错误等。通过不断地调整程序,我们最终成功地实现了词法分析功能。在词法分析结果中,我们输出了识别出的一个个单词符号序列,并将其整理为二元组形式,指出单词类别属性、标识符自身值和常数值。
四、实验总结
通过本实验,我们不仅了解了词法分析的任务和程序设计原理,还熟练地运用了VC++语言进行编程实践。同时,我们在实验过程中遇到了一些问题,通过查找资料和与同学讨论,我们成功地解决了这些问题。总之,这次实验让我们对编译原理有了更加深入的理解,为我们今后的学习和工作打下了良好的基础。