java实现C语言子集的语法分析器

如题,只是做一个算法的演示,所以并不能识别C语言全部的关键字,像int 等关键字会被识别为标识符。可以按照自己需求自行扩充保留字表。

程序功能:

词法分析器从input文件中读入一小段C语言源程序,二元式形式按顺序输出所有单词。输出结果在显示器上显示,同时存入output文件中。输入的C语言源程序中的所有标识符都要添加到标识符表id-list中,所有无符号整数都要添加到无符号整数表uint-list中。

程序的输出文件包括: output, id-list, uint-list,

该程序的缺点:由于每读一行都要向输出文件写入,大大影响程序执行速度。有兴趣的可以自行改进啦。

首先词法分析器的输出是以二元组的形式,创建二元组类如下:

public class TableItem {
	public String type;
	public String value;
	public TableItem(String type,String value){
		this.type=type;
		this.value=value;
	}
	public TableItem(String type){
		this.type=type;
		
	}
}
词法分析器类:

import java.awt.print.Printable;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Machine {//输入一个单词,输出相应判断,如果必要的话加入相应表中
						
	public List<TableItem> resultList;
	public String token;
	public List<TableItem> reserveTable;//C语言的保留字表
	public Machine(){
		//只需要将保留字表初始化
		reserveTable=new ArrayList<TableItem>();
		reserveTable.add(new TableItem("res", "while"));
		reserveTable.add(new TableItem("res", "if"));
		reserveTable.add(new TableItem("res", "else"));
		reserveTable.add(new TableItem("res", "switch"));
		reserveTable.add(new TableItem("res", "case"));
	
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值