📄 java词法分析器_ - java - java_开发文档.htm
字号:
*/<BR> public void RETRACT() {<BR>
this.index--;<BR>
}<BR>/////////////////////////////////////////////////////<BR>//////////////字符方法结束///////////////////////////<BR>/////////////////////////////////////////////////////<BR>}<BR>5) 表留字表程序:KeyWordTable.java<BR>//Source
file: d:\\JAccidenceAnalyse\\KeyWordTable.java</P>
<P>package JAccidenceAnalyse;</P>
<P>import java.util.*;<BR>import java.io.*;</P>
<P>public class KeyWordTable {<BR> private Hashtable
KWHash;<BR> private File ReserveFile;<BR> private FileReader
resFileReader; //读文件对象<BR> private int TMP_BUFFER_SIZE = 30;</P>
<P> /**<BR> * @roseuid 3D9BB9390108<BR>
*/<BR> public KeyWordTable(java.io.File ReserveFile)
{<BR>
System.out.println("[INFOR]关键字表已创建!");<BR>
this.ReserveFile = ReserveFile;<BR> }</P>
<P> /**<BR> * @param inw<BR> * @return
boolean<BR> * @roseuid 3D9BAE4702AD<BR>
*/<BR> public boolean isKeyWord(String inw) {<BR>
String resWord;<BR> //查找hash表<BR> for
(Enumeration e = this.KWHash.elements(); e.hasMoreElements(); )
{<BR> resWord = (String)
e.nextElement();<BR> if
(resWord.equalsIgnoreCase(inw))
{<BR> return
true;<BR> }<BR>
}<BR> return false;<BR> }</P>
<P> /**<BR> * @roseuid 3D9BAE7303D3<BR>
*/<BR> public void initKeyWordTable() {<BR> KWHash
= new Hashtable(); //创建hash表<BR> int
intLength;<BR> char[] chrBuffer = new
char[TMP_BUFFER_SIZE];<BR> String
resWord;<BR> int resCounter = 0;<BR>
try {<BR> if (ReserveFile.exists()) {
//文件存在<BR>
//创建读文件对象<BR> resFileReader =
new
java.io.FileReader(ReserveFile);<BR>
//读文件内容到hash表<BR> while (
(intLength = resFileReader.read(chrBuffer)) != -1)
{<BR>
resCounter++;<BR>
//填写hash表<BR>
resWord =
String.valueOf(chrBuffer).trim();<BR>
System.out.println("[INFOR]读取关键字: [INDEX: " + resCounter
+<BR>
"][VALUE: " + resWord +
"]");<BR>
this.KWHash.put(Integer.toString(resCounter),
resWord);<BR> }</P>
<P>
//关闭读文件对象<BR>
resFileReader.close();<BR>
}<BR> else {
//文件不存在<BR>
System.err.println("[ERROR]保留字文件不存在!");<BR>
}<BR> }<BR> catch (Exception e)
{<BR>
e.printStackTrace(System.err);<BR> }<BR>
}<BR>}<BR>6) 类型种别码程序:ClassIdentity.java<BR>//Source file:
d:\\JAccidenceAnalyse\\KeyWordTable.java</P>
<P>package JAccidenceAnalyse;</P>
<P>import java.util.*;<BR>import java.io.*;</P>
<P>public class ClassIdentity {<BR> private Hashtable
ClassHash;<BR> private File ClassFile;<BR> private FileReader
classFileReader; //读文件对象<BR> private int TMP_BUFFER_SIZE = 30;</P>
<P> /**<BR> * @roseuid 3D9BB9390108<BR>
*/<BR> public ClassIdentity(java.io.File ClassFile)
{<BR>
System.out.println("[INFOR]类型种别码表已创建!");<BR>
this.ClassFile = ClassFile;<BR> }</P>
<P> /**<BR> * @roseuid 3D9BB0B40383<BR>
*/<BR> //查找类型种别码<BR> public int findKey(String classWord)
{<BR> int KEY;<BR> for (Enumeration e
= this.ClassHash.keys(); e.hasMoreElements(); )
{<BR> KEY = Integer.parseInt( (String)
e.nextElement());<BR> if ( (
(String)this.ClassHash.get(Integer.toString(KEY))).<BR>
equalsIgnoreCase(classWord))
{<BR> return
KEY;<BR> }<BR>
}<BR> return -1;<BR> }</P>
<P> /**<BR> * @roseuid 3D9BAE7303D3<BR>
*/<BR> public void initClassIdentityTable() {<BR>
ClassHash = new Hashtable(); //创建hash表<BR> int
intLength;<BR> char[] chrBuffer = new
char[TMP_BUFFER_SIZE];<BR> String
classWord;<BR> int classCounter =
0;<BR> try {<BR> if
(ClassFile.exists()) {
//文件存在<BR>
//创建读文件对象<BR> classFileReader =
new java.io.FileReader(ClassFile);</P>
<P>
//读文件内容到hash表<BR> while (
(intLength = classFileReader.read(chrBuffer)) != -1)
{<BR>
classCounter++;<BR>
//填写hash表<BR>
classWord =
String.valueOf(chrBuffer).trim();<BR>
System.out.println("[INFOR]读取类型种别码: [KEY: " + classCounter
+<BR>
"][VALUE: " + classWord +
"]");<BR>
this.ClassHash.put(Integer.toString(classCounter),
classWord);<BR> }</P>
<P>
//关闭读文件对象<BR>
classFileReader.close();<BR>
}<BR> else {
//文件不存在<BR>
System.err.println("[ERROR]类型种别码文件不存在!");<BR>
}<BR> }<BR> catch (Exception e)
{<BR>
e.printStackTrace(System.err);<BR> }<BR>
}<BR>}<BR>7) 抽象扫描缓冲区工厂:BufferFactory.java(使用抽象工厂方法模式产生缓冲区对象)<BR>//Source
file: d:\\JAccidenceAnalyse\\Buffer\\BufferFactory.java</P>
<P>package JAccidenceAnalyse.Buffer;</P>
<P>public interface BufferFactory {</P>
<P> /**<BR> * @return
JAccidenceAnalyse.Buffer.ScanBuffer<BR> * @roseuid
3D9BB6F0003E<BR> */<BR> public ScanBuffer
createScanBuffer(int size);</P>
<P> /**<BR> * @return
JAccidenceAnalyse.Buffer.InputBuffer<BR> * @roseuid
3D9BB7090062<BR> */<BR> public InputBuffer
createInputBuffer(int
size);<BR>}<BR>8) 缓冲区工厂:ConcreteScanBufferFactory.java(实现了抽象工厂)<BR>//Source
file: d:\\JAccidenceAnalyse\\Buffer\\ConcreteScanBufferFactory.java</P>
<P>package JAccidenceAnalyse.Buffer;</P>
<P>public class ConcreteScanBufferFactory<BR> implements
BufferFactory {</P>
<P> /**<BR> * @roseuid 3D9BBA19006A<BR>
*/<BR> public ConcreteScanBufferFactory() {<BR>
System.out.println("[INFOR]缓冲区工厂已经建立!");<BR> }</P>
<P> /**<BR> * @return
JAccidenceAnalyse.Buffer.ScanBuffer<BR> * @roseuid
3D9BAC01004E<BR> */<BR> public ScanBuffer
createScanBuffer(int size) {<BR>
System.out.println("[INFOR]创建扫描缓冲区!");<BR> return new
ScanBuffer(size);<BR> }</P>
<P> /**<BR> * @return
JAccidenceAnalyse.Buffer.InputBuffer<BR> * @roseuid
3D9BB6050267<BR> */<BR> public InputBuffer
createInputBuffer(int size) {<BR>
System.out.println("[INFOR]创建输入缓冲区!");<BR> return new
InputBuffer(size);<BR>
}<BR>}<BR>9) 缓冲区对象抽象接口:Buffer.java<BR>//Source file:
d:\\JAccidenceAnalyse\\Buffer\\Buffer.java</P>
<P>package JAccidenceAnalyse.Buffer;</P>
<P>//abstract buffer interface<BR>public interface Buffer
{<BR>}<BR>10) 输入缓冲区对象:InputBuffer.java<BR>//Source file:
d:\\JAccidenceAnalyse\\Buffer\\InputBuffer.java</P>
<P>package JAccidenceAnalyse.Buffer;</P>
<P>import java.io.*;</P>
<P>public class InputBuffer<BR> implements Buffer
{<BR> public char[] Data;</P>
<P> /**<BR> * @roseuid 3D9BBA1C0186<BR>
*/<BR> public InputBuffer(int size) {<BR>
this.Data = new char[size];<BR> }</P>
<P>}<BR>11) 扫描缓冲区对象:ScanBuffer.java<BR>//Source file:
d:\\JAccidenceAnalyse\\Buffer\\ScanBuffer.java</P>
<P>package JAccidenceAnalyse.Buffer;</P>
<P>public class ScanBuffer<BR> implements Buffer
{<BR> public char[] Data;</P>
<P> /**<BR> * @roseuid 3D9BBA1A0314<BR>
*/<BR> public ScanBuffer(int size) {<BR> this.Data
= new char[size];<BR> }</P>
<P>}<BR>12) 词法分析器配置文件:aaCfg.xml<BR><?xml version="1.0"
standalone="yes"?><BR><Analyzer><BR><FilePath>
<BR><ReserveFileName>d:\\reserve.table</ReserveFileName>
<BR><ClassFileName>d:\\class.table</ClassFileName>
<BR><SourceFileName>d:\\aClass.java</SourceFileName>
<BR><OutputFileName>d:\\output.aa</OutputFileName>
<BR></FilePath><BR></Analyzer><BR>13) 类型种别码文件:class.table<BR>identity
<BR>digit
<BR>=
<BR>+
<BR>*
<BR>**
<BR>,
<BR>(
<BR>)
<BR>{
<BR>} &nbs
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -