编译原理实验一 词法分析设计 Java版

一、实验目的

通过本实验的编程实践,使学生了解词法分析的任务,掌握词法分析程序设计的原理和构造方法,使学生对编译的基本概念、原理和方法有完整的和清楚的理解,并能正确地、熟练地运用。

二、功能描述

  1. 在文件中写入多行并读入进行分析
  2. 统计行数和列数用于错误单词的定位
  3. 删除空格类字符,包括回车、制表符空格
  4. 按拼写单词(关键字、标识符、常数、运算符、关系运算符、分界符号),并用(内码,属性)二元式表示
  5. 如果发现错误则报告出错
  6. 根据需要是否填写标识符表供以后各阶段使用

三、程序结构描述

函数名称及调用格式返回类型

参数含义

返回值描述

函数功能

void init()



得到相应的终结符集和非终结符集

String getAction(int topState, char in)

返回action表中相应的字符串

Topstate是状态栈中的栈顶符号,in是当前输入符号

通过栈顶状态和输入符号来查找相应的action表,得到表中对应操作

String getStateStack()

状态栈里全部符号


得到当前状态栈中的全部符号

String getCharStack()

符号栈的全部符号


得到符号栈的全部符号

int getGoto(int state, char c)

Goto表中对应状态


得到goto表中对应的状态

void analyze()



根据action表和goto表的内容进行LR(1)分析

MyFrame(String title)


标题字符

这是构造器,为了将输出界面化

void actionPerformed(ActionEvent actionEvent)


响应事件

主要为按钮绑定事件,进行语法分析

void main(String[] args)


Main参数

Main方法,执行入口

四、详细的算法描述

分析过程主要在startAnalysis()中进行实现,算法主要是依靠上表,对当前字符进行判断,字母,数字或者是其他三种类型然后再分别处理。

五、给出软件的测试方法和测试结果

在文件中进行读入,程序运行一次后退出。运行结果输出在控制台。

结果和源码

Java 词法分析符号表 词法分析java实现_词法分析