编译原理实验一:为PL/0语言编写一个词法分析程序

本文档介绍如何使用Java实现一个词法分析器,针对PL/0语言,通过状态转化图方法进行词法分析。程序包含两个类:Token用于表示单词符号,LexicalAnalyzer进行词法分析,过滤空格并识别关键字、标识符和常量。程序读取源代码文件,输出单词符号串。
摘要由CSDN通过智能技术生成

思路:利用词法分析一章所讲的状态转化图方法,输入源程序,输出单词符号(token)串

1.单词符号类

package lexical_analyzer;
public class Token {
    private String SYM;// 单词类别
    private String ID;// 标识符的名字
    private String NUM;// 用户定义的数
    public Token(String sym, String id, String num) {
        this.SYM = sym;
        this.ID = id;
        this.NUM = num;
    }
    public String getSYM() {
        return SYM;
    }
    public String getID() {
        return ID;
    }
    public String getNUM() {
        return NUM;
    }
    @Override
    public String toString() {

        return "<" + this.SYM + "," + this.ID + "," + this.NUM + ">";
    }
}

2.词法分析类LexicalAnalyzer

package lexical_analyzer;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
public class LexicalAnalyzer {

    private StringBuffer sourceCode;// 源代码
    private int pos;// 字符位置
    public static ArrayList<String> remain = new ArrayList<String>();
    private ArrayList<Token> wordToken = new ArrayList<Token>();//存放词法分析的结果
    static {        //所有关键字
        remain.add("const");
        remain.add("CONST");
        remain.add("var");
        remain.add("VAR");
        remain.add("procedure");
        remain.add("begin");
        remain.add("end");
        remain.add("if");
        remain.add("then");
        remain.add("call");
        remain.add("while");
        remain.add("do");
        remain.add("read");
        remain.add("write");
        remain.add("ood");
    }

    public Lex

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值