中南大学软件学院编译原理实验报告 下载本文

内容发布更新时间 : 2024/12/22 19:37:42星期一 下面是文章的全部内容请认真阅读。

《320144X1(编译原理)》 实验报告 项目名称 编译原理 专业班级 软件工程1403 学 号 姓 名 温睿诚 实验成绩: 批阅教师: 年 月 日 第一部分 词法分析(实验一必作)

实验一 词法分析程序设计与实现

实验报告要求

详细说明你的程序的设计思路和实现过程。用有限自动机或者文法的形式对词法定义做出详细说明,说明词法分析程序的工作过程,说明错误处理的实现。

设计思路:

首先把单词进行分类,分为

String[] keyword = {\, \};

ArrayListbiaoshi = new ArrayList<>(); ArrayListchangshu = new ArrayList<>(); String[] yunsuan = {\, \, \, \, \, \}; String[] spilt = {\, \, \, \, \, \};

五类,分别是关键字、标识符、常数、运算符以及分隔符。

然后逐个字符读入,对于关键字或标识符这类英文单词开始的单词,用空格隔开,其他可以用分隔符、运算符、空格、回车等。

读入一个单词后对照一开始的五类分析出是哪一类,符合后交给语法分析器处理。 实现过程: import java.io.*;

import java.util.ArrayList;

/** * Created by 温 睿诚 on 2016/5/11/0011. */ public class CiFa {

String[] keyword = {\, \};

ArrayListbiaoshi = new ArrayList<>();

ArrayListchangshu = new ArrayList<>(); String[] yunsuan = {\, \, \, \, \, \}; String[] spilt = {\, \, \, \, \, \}; //记录结果的符号表 //用什么数据结构呢?

//当前单词

StringBuilder str = new StringBuilder(\); //下一个要读的字符 char now; //一个栈

ArrayListstack = new ArrayList<>();

private void put() {

stack.add(new Character(now)); }

private char pop() { if (stack.size() >0) {

return ((Character) stack.remove(stack.size() - 1)).charValue(); } else { return 0; }