📄 java词法分析器.txt
字号:
//创建读文件对象
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 + -