java 语法分析器 界面_一个简单的词法分析器(带界面)

Java实现简单的词法分析器:

需求分析

5类符号

保留字(keywords):if、int、for、while、do、return、break、continue等等;单词种别码为1

其他的字符都为标识符(identifier);单词种别码为2

常数为无符号数(unsigned number);单词种别码为3

运算符(operator)包括:+、-、*、/、=、>、

分隔符(separator)包括: “,”“;”“(”“)”“{”“}”等; 单词种别码为5。

分析流程

8de598392e09

流程图

代码设计

目录结构

8de598392e09

目录结构

symbols目录下的txt文件分别保存关键字信息(keywords.txt)、操作符信息(operators.txt)、分隔符信息(separators.txt)。

Util包中分别为文件读取工具类(FileReadUtil)和词法分析工具类(LexerUtil)

symbols包中为符号类

lexer包中的类和Main结合用来控制界面显示,界面使用JavaFx实现。

符号类设计

8de598392e09

类图

所有的符号类都继承自抽象类Token,Token类中带参构造函数用来初始化,读取保存在txt文件中的保留字,标识符,分隔符信息并保存在List中。

KeyWord类、Operator类、Separator类重写这个带参构造函数来读取符号并调用Token的getList()方法将读取的的符号保存到它们的内部的静态List中。

Identifier类、UnsignedNumber类不重写构造函数,即他们只有默认的无参构造函数。

这部分只给出Token、KeyWord和Identifier的代码实现。

完整代码在我的Github: https://github.com/LiuJinxuan/Lexer.git

Token类

package com.company.symbols;

import com.company.utils.FileReadUtil;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

/**

* Created by Ljx on 2017/5/6.

*/

public abstract class Token {

private static List tokens = new ArrayList<>();

public Token() {

}

public Token(String fileName) {

try {

tokens = FileReadUtil.ReadSymbols(fileName);

} catch (FileNotFoundException e) {

System.out.println(fileName + " NOT FOUND!");

} catch (IOException e) {

e.printStackTrace();

}

}

protected List getTokens() {

return tokens;

}

//返回识别码TAG

public abstract int getTAG();

//返回具体的类型

<
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值