Java 实现《编译原理》简单词法分析功能
2020-12-13 01:56
标签:lin 并保存 port trim ram des out ror 编译 简易词法分析功能 (1)读取一个 txt 程序文件(最后的 # 作为结束标志,不可省去) (2)词法识别分析表 (3)输出结果: 并保存成新的 txt 文件 (1)程序文件目录: (2)Word.java 文件:
* 表示识别后的词实体类
*
* @author XiaoPengwei
* @since 2019-06-13
*/
public class Word {
/**
* 种别码
*/
private int typeNum;
/**
* 扫描得到的词
*/
private String word;
public int getTypeNum() {
return typeNum;
}
public void setTypeNum(int typeNum) {
this.typeNum = typeNum;
}
public String getWord() {
return word;
}
public void setWord(String word) {
this.word = word;
}
}
(3)CodeScanner.java 文件:
* 字符扫描
*
* @author XiaoPengwei
* @since 2019-06-13
*/
public class CodeScanner {
private static String _KEY_WORD_END = "end string of string";
private int charNum = 0;
private Word word;
private char[] input = new char[255];
private char[] token = new char[255];
private int p_input = 0;
private int p_token = 0;
private char ch;
/**
* 关键字数组
*/
private String[] rwtab = {"int", "if", "while", "do", "return", "break", "continue", _KEY_WORD_END};
/**
* 逻辑运算数组
*/
private String[] logicTab = {"==",">=","= 'a' && ch = 'A' && ch = '0' && ch ' || ch == ' (4)MainAnalyzer.java 文件:
* 执行主程序
*
* @author XiaoPengwei
* @since 2019-06-13
*/
public class MainAnalyzer {
private File inputFile;
private File outputFile;
private String fileContent;
private ArrayList (5)input.txt 文件: Java 实现《编译原理》简单词法分析功能 标签:lin 并保存 port trim ram des out ror 编译 原文地址:https://www.cnblogs.com/xpwi/p/11020366.htmlJava 实现《编译原理》简单词法分析功能
要求及功能
{
int a, b;
a = 10;
if(a>=1){
b = a + 20;
}
}
单词类别|单词自身值|内部编码
-|-|-
关键字| int、for、while、do、return、break、continue| 1
标识符| 除关键字外的以字母开头,后跟字母、数字的字符序列| 2
常数| 无符号整型数| 3
运算符| +、-、*、/、>、=、
界限符| ,、;、{、}、(、)| 5
换行符|\n| 6(5,{)
(6,\n)
(1,int)
(2,a)
(5,,)
(2,b)
(5,;)
(6,\n)
(2,a)
(4,=)
(3,10)
(5,;)
(6,\n)
(2,if)
(5,()
(2,a)
(4,>=)
(3,1)
(5,))
(5,{)
(6,\n)
(2,b)
(4,=)
(2,a)
(4,+)
(3,20)
(5,;)
(6,\n)
(5,})
(6,\n)
(5,})
(6,\n)
(0,#)
编程实现
package com.java997.analyzer.lexical;
/**
*
package com.java997.analyzer.lexical;
/**
*
package com.java997.analyzer.lexical;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Scanner;
/**
*
{
int a, b;
a = 10;
if(a>=1){
b = a + 20;
}
}
#
执行测试