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;
  }
}
#执行测试
