⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java词法分析器.txt

📁 用java写的词法分析器,很不错的哦! 值得一看
💻 TXT
📖 第 1 页 / 共 3 页
字号:
        //创建读文件对象
        classFileReader = new java.io.FileReader(ClassFile);

        //读文件内容到hash表
        while ( (intLength = classFileReader.read(chrBuffer)) != -1) {
          classCounter++;
          //填写hash表
          classWord = String.valueOf(chrBuffer).trim();
          System.out.println("[INFOR]读取类型种别码: [KEY: " + classCounter +
                             "][VALUE: " + classWord + "]");
          this.ClassHash.put(Integer.toString(classCounter), classWord);
        }

        //关闭读文件对象
        classFileReader.close();
      }
      else { //文件不存在
        System.err.println("[ERROR]类型种别码文件不存在!");
      }
    }
    catch (Exception e) {
      e.printStackTrace(System.err);
    }
  }
}
7) 抽象扫描缓冲区工厂:BufferFactory.java(使用抽象工厂方法模式产生缓冲区对象)
//Source file: d:\\JAccidenceAnalyse\\Buffer\\BufferFactory.java

package JAccidenceAnalyse.Buffer;

public interface BufferFactory {

  /**
   * @return JAccidenceAnalyse.Buffer.ScanBuffer
   * @roseuid 3D9BB6F0003E
   */
  public ScanBuffer createScanBuffer(int size);

  /**
   * @return JAccidenceAnalyse.Buffer.InputBuffer
   * @roseuid 3D9BB7090062
   */
  public InputBuffer createInputBuffer(int size);
}
8) 缓冲区工厂:ConcreteScanBufferFactory.java(实现了抽象工厂)
//Source file: d:\\JAccidenceAnalyse\\Buffer\\ConcreteScanBufferFactory.java

package JAccidenceAnalyse.Buffer;

public class ConcreteScanBufferFactory
    implements BufferFactory {

  /**
   * @roseuid 3D9BBA19006A
   */
  public ConcreteScanBufferFactory() {
    System.out.println("[INFOR]缓冲区工厂已经建立!");
  }

  /**
   * @return JAccidenceAnalyse.Buffer.ScanBuffer
   * @roseuid 3D9BAC01004E
   */
  public ScanBuffer createScanBuffer(int size) {
    System.out.println("[INFOR]创建扫描缓冲区!");
    return new ScanBuffer(size);
  }

  /**
   * @return JAccidenceAnalyse.Buffer.InputBuffer
   * @roseuid 3D9BB6050267
   */
  public InputBuffer createInputBuffer(int size) {
    System.out.println("[INFOR]创建输入缓冲区!");
    return new InputBuffer(size);
  }
}
9) 缓冲区对象抽象接口:Buffer.java
//Source file: d:\\JAccidenceAnalyse\\Buffer\\Buffer.java

package JAccidenceAnalyse.Buffer;

//abstract buffer interface
public interface Buffer {
}
10) 输入缓冲区对象:InputBuffer.java
//Source file: d:\\JAccidenceAnalyse\\Buffer\\InputBuffer.java

package JAccidenceAnalyse.Buffer;

import java.io.*;

public class InputBuffer
    implements Buffer {
  public char[] Data;

  /**
   * @roseuid 3D9BBA1C0186
   */
  public InputBuffer(int size) {
    this.Data = new char[size];
  }

}
11) 扫描缓冲区对象:ScanBuffer.java
//Source file: d:\\JAccidenceAnalyse\\Buffer\\ScanBuffer.java

package JAccidenceAnalyse.Buffer;

public class ScanBuffer
    implements Buffer {
  public char[] Data;

  /**
   * @roseuid 3D9BBA1A0314
   */
  public ScanBuffer(int size) {
    this.Data = new char[size];
  }

}
12) 词法分析器配置文件:aaCfg.xml
<?xml version="1.0" standalone="yes"?>
<Analyzer>
<FilePath> 
<ReserveFileName>d:\\reserve.table</ReserveFileName> 
<ClassFileName>d:\\class.table</ClassFileName> 
<SourceFileName>d:\\aClass.java</SourceFileName> 
<OutputFileName>d:\\output.aa</OutputFileName> 
</FilePath>
</Analyzer>
13) 类型种别码文件:class.table
identity                    
digit                       
=                           
+                           
*                           
**                          
,                           
(                           
)                           
{                           
}                           
[                           
]                           
.                           
14) 关键字表文件:reserve.table
while                       
do                          
public                      
class                       
static                      
new                         
void                        
int                         
do                          
for                         
int                         
System                      
15) 一个测试文件:aClass.java
  public class aClass{
  public void aMethod( int value ) {
    System.out.println( value );
  }
  public static void main( String[] args ){
    aClass foo = new aClass();
    int i=0;
    foo.aMethod(i);
    i = i+1;
    foo.aMethod(i);
  }
}
16)分析以后的输出结果:output.aa
//////////////////////////////////////////////////
//JAccidenceAnalyser version 1.0 design by yellowicq//
//java词法分析器//////////////
//使用java语言开发////////////////////////////////////
//////////////////////////////////////////////////
词法分析结果如下:

[第1行]
[保留字] public
[保留字] class
[标识符] aClass[种别码] 1
[左大括号] {[种别码] 10

[第2行]
[保留字] public
[保留字] void
[标识符] aMethod[种别码] 1
[左括号] ([种别码] 8
[保留字] int
[标识符] value[种别码] 1
[右括号] )[种别码] 9
[左大括号] {[种别码] 10

[第3行]
[保留字] System
[点号] .[种别码] 14
[标识符] out[种别码] 1
[点号] .[种别码] 14
[标识符] println[种别码] 1
[左括号] ([种别码] 8
[标识符] value[种别码] 1
[右括号] )[种别码] 9

[第4行]
[右大括号] }[种别码] 11

[第5行]
[保留字] public
[保留字] static
[保留字] void
[标识符] main[种别码] 1
[左括号] ([种别码] 8
[标识符] String[种别码] 1
[左中括号] [[种别码] 12
[右中括号] ][种别码] 13
[标识符] args[种别码] 1
[右括号] )[种别码] 9
[左大括号] {[种别码] 10

[第6行]
[标识符] aClass[种别码] 1
[标识符] foo[种别码] 1
[等号] =[种别码] 3
[保留字] new
[标识符] aClass[种别码] 1
[左括号] ([种别码] 8
[右括号] )[种别码] 9

[第7行]
[保留字] int
[标识符] i[种别码] 1
[等号] =[种别码] 3
[数字] 0[种别码] 2

[第8行]
[标识符] foo[种别码] 1
[点号] .[种别码] 14
[标识符] aMethod[种别码] 1
[左括号] ([种别码] 8
[标识符] i[种别码] 1
[右括号] )[种别码] 9

[第9行]
[标识符] i[种别码] 1
[等号] =[种别码] 3
[标识符] i[种别码] 1
[加号] +[种别码] 4
[数字] 1[种别码] 2

[第10行]
[标识符] foo[种别码] 1
[点号] .[种别码] 14
[标识符] aMethod[种别码] 1
[左括号] ([种别码] 8
[标识符] i[种别码] 1
[右括号] )[种别码] 9

[第11行]
[右大括号] }[种别码] 11

[第12行]
[右大括号] }[种别码] 11

16) 运行时的系统显示:jbuilder.runtime
 D:\JBuilder6\jdk1.3.1\bin\javaw -classpath 
"F:\mybak_new\jbproject\JAccidenceAnalyse\classes;D:\JBuilder7\lib\rowset.jar;D:\JBuilder6\lib\xerces.jar;D:\JBuilder6\jdk1.3.1\demo\jfc\Java2D\Java2Demo.jar;D:\JBuilder6\jdk1.3.1\jre\lib\i18n.jar;D:\JBuilder6\jdk1.3.1\jre\lib\jaws.jar;D:\JBuilder6\jdk1.3.1\jre\lib\rt.jar;D:\JBuilder6\jdk1.3.1\jre\lib\sunrsasign.jar;D:\JBuilder6\jdk1.3.1\lib\dt.jar;D:\JBuilder6\jdk1.3.1\lib\htmlconverter.jar;D:\JBuilder6\jdk1.3.1\lib\tools.jar"  JAccidenceAnalyse.main 
[INFOR]已经建立词法分析器!
[INFOR]缓冲区工厂已经建立!
[INFOR]创建扫描缓冲区!
[INFOR]扫描处理器已经创建!
[INFOR]创建输入缓冲区!
[INFOR]预处理器已经创建!
[INFOR]关键字表已创建!
[INFOR]类型种别码表已创建!
[INFOR]已经初始化词法分析器!
[INFOR]读取关键字: [INDEX: 1][VALUE: while]
[INFOR]读取关键字: [INDEX: 2][VALUE: do]
[INFOR]读取关键字: [INDEX: 3][VALUE: public]
[INFOR]读取关键字: [INDEX: 4][VALUE: class]
[INFOR]读取关键字: [INDEX: 5][VALUE: static]
[INFOR]读取关键字: [INDEX: 6][VALUE: new]
[INFOR]读取关键字: [INDEX: 7][VALUE: void]
[INFOR]读取关键字: [INDEX: 8][VALUE: int]
[INFOR]读取关键字: [INDEX: 9][VALUE: do]
[INFOR]读取关键字: [INDEX: 10][VALUE: for]
[INFOR]读取关键字: [INDEX: 11][VALUE: int]
[INFOR]读取关键字: [INDEX: 12][VALUE: System]
[INFOR]读取类型种别码: [KEY: 1][VALUE: identity]
[INFOR]读取类型种别码: [KEY: 2][VALUE: digit]
[INFOR]读取类型种别码: [KEY: 3][VALUE: =]
[INFOR]读取类型种别码: [KEY: 4][VALUE: +]
[INFOR]读取类型种别码: [KEY: 5][VALUE: *]
[INFOR]读取类型种别码: [KEY: 6][VALUE: **]
[INFOR]读取类型种别码: [KEY: 7][VALUE: ,]
[INFOR]读取类型种别码: [KEY: 8][VALUE: (]
[INFOR]读取类型种别码: [KEY: 9][VALUE: )]
[INFOR]读取类型种别码: [KEY: 10][VALUE: {]
[INFOR]读取类型种别码: [KEY: 11][VALUE: }]
[INFOR]读取类型种别码: [KEY: 12][VALUE: []
[INFOR]读取类型种别码: [KEY: 13][VALUE: ]]
[INFOR]读取类型种别码: [KEY: 14][VALUE: .]
[INFOR]开始单词分析////////////////////////////////////////
...................begin row 1.......................
[INFOR]正在处理行: 1
[INFOR]已过滤句子: public class aClass{

[第1行]
[保留字] public
[保留字] class
[标识符] aClass[种别码] 1
[左大括号] {[种别码] 10
...................end row 1.........................
...................begin row 2.......................
[INFOR]正在处理行: 2
[INFOR]已过滤句子: public void aMethod( int value ) {

[第2行]
[保留字] public
[保留字] void
[标识符] aMethod[种别码] 1
[左括号] ([种别码] 8
[保留字] int
[标识符] value[种别码] 1
[右括号] )[种别码] 9
[左大括号] {[种别码] 10
...................end row 2.........................
...................begin row 3.......................
[INFOR]正在处理行: 3
[INFOR]已过滤句子: System.out.println( value );

[第3行]
[保留字] System
[点号] .[种别码] 14
[标识符] out[种别码] 1
[点号] .[种别码] 14
[标识符] println[种别码] 1
[左括号] ([种别码] 8
[标识符] value[种别码] 1
[右括号] )[种别码] 9
...................end row 3.........................
...................begin row 4.......................
[INFOR]正在处理行: 4
[INFOR]已过滤句子: }

[第4行]
[右大括号] }[种别码] 11
...................end row 4.........................
...................begin row 5.......................
[INFOR]正在处理行: 5
[INFOR]已过滤句子: public static void main( String[] args ){

[第5行]
[保留字] public
[保留字] static
[保留字] void
[标识符] main[种别码] 1
[左括号] ([种别码] 8
[标识符] String[种别码] 1
[左中括号] [[种别码] 12
[右中括号] ][种别码] 13
[标识符] args[种别码] 1
[右括号] )[种别码] 9
[左大括号] {[种别码] 10
...................end row 5.........................
...................begin row 6.......................
[INFOR]正在处理行: 6
[INFOR]已过滤句子: aClass foo = new aClass();

[第6行]
[标识符] aClass[种别码] 1
[标识符] foo[种别码] 1
[等号] =[种别码] 3
[保留字] new
[标识符] aClass[种别码] 1
[左括号] ([种别码] 8
[右括号] )[种别码] 9
...................end row 6.........................
...................begin row 7.......................
[INFOR]正在处理行: 7
[INFOR]已过滤句子: int i=0;

[第7行]
[保留字] int
[标识符] i[种别码] 1
[等号] =[种别码] 3
[数字] 0[种别码] 2
...................end row 7.........................
...................begin row 8.......................
[INFOR]正在处理行: 8
[INFOR]已过滤句子: foo.aMethod(i);

[第8行]
[标识符] foo[种别码] 1
[点号] .[种别码] 14
[标识符] aMethod[种别码] 1
[左括号] ([种别码] 8
[标识符] i[种别码] 1
[右括号] )[种别码] 9
...................end row 8.........................
...................begin row 9.......................
[INFOR]正在处理行: 9
[INFOR]已过滤句子: i = i+1;

[第9行]
[标识符] i[种别码] 1
[等号] =[种别码] 3
[标识符] i[种别码] 1
[加号] +[种别码] 4
[数字] 1[种别码] 2
...................end row 9.........................
...................begin row 10.......................
[INFOR]正在处理行: 10
[INFOR]已过滤句子: foo.aMethod(i);

[第10行]
[标识符] foo[种别码] 1
[点号] .[种别码] 14
[标识符] aMethod[种别码] 1
[左括号] ([种别码] 8
[标识符] i[种别码] 1
[右括号] )[种别码] 9
...................end row 10.........................
...................begin row 11.......................
[INFOR]正在处理行: 11
[INFOR]已过滤句子: }

[第11行]
[右大括号] }[种别码] 11
...................end row 11.........................
...................begin row 12.......................
[INFOR]正在处理行: 12
[INFOR]已过滤句子: }

[第12行]
[右大括号] }[种别码] 11
...................end row 12.........................
[INFOR]分析完毕////////////////////////////////////////////




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -