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

📄 java词法分析器_ - java - java_开发文档.htm

📁 java 好的分析器
💻 HTM
📖 第 1 页 / 共 5 页
字号:
      cfgString[0] = 
      item.getElementsByTagName("ReserveFileName").item(0).<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      getFirstChild().getNodeValue().trim();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      /******************/<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      cfgString[1] = 
      item.getElementsByTagName("ClassFileName").item(0).<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      getFirstChild().getNodeValue().trim();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      /******************/<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      cfgString[2] = 
      item.getElementsByTagName("SourceFileName").item(0).<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      getFirstChild().getNodeValue().trim();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      /******************/<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      cfgString[3] = 
      item.getElementsByTagName("OutputFileName").item(0).<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      getFirstChild().getNodeValue().trim();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      /******************/<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      }<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; catch (Exception e) 
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      e.printStackTrace();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new 
      Exception("[ERROR]加载配置文件 " + name + " 错误!");<BR>&nbsp;&nbsp;&nbsp; 
      }<BR>&nbsp;&nbsp;&nbsp; //返回属性数组<BR>&nbsp;&nbsp;&nbsp; return 
      cfgString;<BR>&nbsp; }</P>
      <P>}<BR>2)&nbsp;词法分析器主程序:AccidenceAnalyser.java<BR>//Source file: 
      d:\\JAccidenceAnalyse\\AccidenceAnalyser.java</P>
      <P>package JAccidenceAnalyse;</P>
      <P>import java.io.*;<BR>import java.util.*;<BR>import 
      JAccidenceAnalyse.Buffer.*;</P>
      <P>public class AccidenceAnalyser {<BR>&nbsp; private java.io.File 
      SourceFile;<BR>&nbsp; private java.io.File ReserveFile;<BR>&nbsp; private 
      java.io.File ClassFile;<BR>&nbsp; private java.io.File 
      OutputFile;<BR>&nbsp; public Pretreatment pretreatment;<BR>&nbsp; public 
      KeyWordTable keyWordTable;<BR>&nbsp; public ClassIdentity 
      classIdentity;<BR>&nbsp; public Scaner scaner;<BR>&nbsp; public 
      ConcreteScanBufferFactory csbFactory;</P>
      <P>&nbsp; /**<BR>&nbsp;&nbsp; * @roseuid 3D9BB93303D0<BR>&nbsp;&nbsp; 
      */<BR>&nbsp; public AccidenceAnalyser() {<BR>&nbsp;&nbsp;&nbsp; 
      System.out.println("[INFOR]已经建立词法分析器!");<BR>&nbsp; }</P>
      <P>&nbsp; /**<BR>&nbsp;&nbsp; * @roseuid 3D9BAEF9029F<BR>&nbsp;&nbsp; 
      */<BR>&nbsp; public void initAA() {<BR>&nbsp;&nbsp;&nbsp; 
      //创建缓冲工厂<BR>&nbsp;&nbsp;&nbsp; this.csbFactory = new 
      ConcreteScanBufferFactory();<BR>&nbsp;&nbsp;&nbsp; 
      //创建字符串扫描对象<BR>&nbsp;&nbsp;&nbsp; scaner = new 
      Scaner(this);<BR>&nbsp;&nbsp;&nbsp; //创建pre处理对象<BR>&nbsp;&nbsp;&nbsp; 
      pretreatment = new Pretreatment(SourceFile, this);<BR>&nbsp;&nbsp;&nbsp; 
      //创建关键字表对象<BR>&nbsp;&nbsp;&nbsp; keyWordTable = new 
      KeyWordTable(ReserveFile);<BR>&nbsp;&nbsp;&nbsp; 
      //创建对象种别码表对象<BR>&nbsp;&nbsp;&nbsp; classIdentity = new 
      ClassIdentity(ClassFile);<BR>&nbsp;&nbsp;&nbsp; 
      System.out.println("[INFOR]已经初始化词法分析器!");<BR>&nbsp; }</P>
      <P>&nbsp; /**<BR>&nbsp;&nbsp; * @roseuid 3D9BAF12022D<BR>&nbsp;&nbsp; 
      */<BR>&nbsp; public void setFilesPath(String reserveFileName, String 
      ClassFileName,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      String sourceFileName, String outputFileName) {<BR>&nbsp;&nbsp;&nbsp; 
      //创建文件对象<BR>&nbsp;&nbsp;&nbsp; SourceFile = new 
      java.io.File(sourceFileName);<BR>&nbsp;&nbsp;&nbsp; 
      //创建文件对象<BR>&nbsp;&nbsp;&nbsp; ReserveFile = new 
      java.io.File(reserveFileName);<BR>&nbsp;&nbsp;&nbsp; 
      //创建文件对象<BR>&nbsp;&nbsp;&nbsp; ClassFile = new 
      java.io.File(ClassFileName);<BR>&nbsp;&nbsp;&nbsp; 
      //创建文件对象<BR>&nbsp;&nbsp;&nbsp; OutputFile = new 
      java.io.File(outputFileName);</P>
      <P>&nbsp;&nbsp;&nbsp; //如果文件已经存在,先删除,然后建立新文件<BR>&nbsp;&nbsp;&nbsp; if 
      (OutputFile.exists()) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      OutputFile.delete();<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; try 
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      OutputFile.createNewFile();<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; 
      catch (Exception e) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      e.printStackTrace(System.err);<BR>&nbsp;&nbsp;&nbsp; 
      }<BR>&nbsp;&nbsp;&nbsp; try {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //创建文件随机读取对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.io.RandomAccessFile 
      ROutputFile = new 
      java.io.RandomAccessFile(this.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      OutputFile, "rw");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //提示信息<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      ROutputFile.write("//////////////////////////////////////////////////\n".<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      getBytes());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ROutputFile.write( 
      ("//JAccidenceAnalyser version " + getVersion() 
      +<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      " design by yellowicq//\n").getBytes());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      ROutputFile.write("//java词法分析器//////////////\n".getBytes());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      ROutputFile.write("//使用java语言开发////////////////////////////////////\n".<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      getBytes());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      ROutputFile.write("//////////////////////////////////////////////////\n".<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      getBytes());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      ROutputFile.write("词法分析结果如下:\n".getBytes());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //关闭文件流<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      ROutputFile.close();<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; catch 
      (Exception e) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      e.printStackTrace(System.err);<BR>&nbsp;&nbsp;&nbsp; }</P>
      <P>&nbsp; }</P>
      <P>&nbsp; /**<BR>&nbsp;&nbsp; * @roseuid 3D9BAFAB0089<BR>&nbsp;&nbsp; 
      */<BR>&nbsp; public void startAA() {<BR>&nbsp;&nbsp;&nbsp; 
      //从预处理开始词法分析<BR>&nbsp;&nbsp;&nbsp; 
      this.pretreatment.startPretreatment();<BR>&nbsp; }</P>
      <P>&nbsp; /**<BR>&nbsp;&nbsp; * @roseuid 3D9BB0B40383<BR>&nbsp;&nbsp; 
      */<BR>&nbsp; public void outputAccidence(String outputString) 
      {<BR>&nbsp;&nbsp;&nbsp; //把分析出来的单词写入文件<BR>&nbsp;&nbsp;&nbsp; outputString 
      = "\n[第" + this.pretreatment.fileRow + "行]\n" + 
      outputString;<BR>&nbsp;&nbsp;&nbsp; try 
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //创建文件随机读取对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.io.RandomAccessFile 
      ROutputFile = new 
      java.io.RandomAccessFile(this.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      OutputFile, "rw");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //移动指针到文件末尾<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      ROutputFile.seek(ROutputFile.length());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //Start appending!<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      ROutputFile.write(outputString.getBytes());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //关闭文件流<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ROutputFile.close();</P>
      <P>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; catch (Exception e) 
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      e.printStackTrace(System.err);<BR>&nbsp;&nbsp;&nbsp; 
      }<BR>&nbsp;&nbsp;&nbsp; //将分析的单词结果输出到终端<BR>&nbsp;&nbsp;&nbsp; 
      System.out.print(outputString);<BR>&nbsp; }</P>
      <P>&nbsp; /**<BR>&nbsp;&nbsp; * @roseuid 3D9BB0CE02C2<BR>&nbsp;&nbsp; 
      */<BR>&nbsp; public void controlThread() {<BR>&nbsp;&nbsp;&nbsp; 
      //控制扫描器启动扫描<BR>&nbsp;&nbsp;&nbsp; scaner.controlThread();<BR>&nbsp; }</P>
      <P>&nbsp; //获得版本号<BR>&nbsp; public String getVersion() 
      {<BR>&nbsp;&nbsp;&nbsp; return "1.0";<BR>&nbsp; 
      }<BR>}<BR>3)&nbsp;预处理子程序:Pretreatment.java<BR>&nbsp;//Source file: 
      d:\\JAccidenceAnalyse\\Pretreatment.java</P>
      <P>package JAccidenceAnalyse;</P>
      <P>import JAccidenceAnalyse.Buffer.*;<BR>import java.io.*;</P>
      <P>public class Pretreatment {<BR>&nbsp; private String 
      tmpString;<BR>&nbsp; private String outputString;<BR>&nbsp; private int 
      BUFFER_SIZE = 100;<BR>&nbsp; private AccidenceAnalyser aa;<BR>&nbsp; 
      public InputBuffer inputBuffer; //输入缓冲区--共享<BR>&nbsp; private java.io.File 
      SourceFile; //文件对象<BR>&nbsp; private java.io.RandomAccessFile randomAFile; 
      //随机文件对象<BR>&nbsp; public static int fileRow = 0;<BR>&nbsp; 
      /**<BR>&nbsp;&nbsp; * @roseuid 3DAB7C530399<BR>&nbsp;&nbsp; */<BR>&nbsp; 
      public Pretreatment(File SourceFile, AccidenceAnalyser aa) 
      {<BR>&nbsp;&nbsp;&nbsp; try {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      this.SourceFile = SourceFile;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      this.randomAFile = new java.io.RandomAccessFile(this.SourceFile, 
      "r");<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; catch 
      (FileNotFoundException e) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      e.printStackTrace(System.err);<BR>&nbsp;&nbsp;&nbsp; 
      }<BR>&nbsp;&nbsp;&nbsp; this.aa = aa;<BR>&nbsp;&nbsp;&nbsp; inputBuffer = 
      aa.csbFactory.createInputBuffer(BUFFER_SIZE);<BR>&nbsp;&nbsp;&nbsp; 
      System.out.println("[INFOR]预处理器已经创建!");<BR>&nbsp; }</P>
      <P>&nbsp; /**<BR>&nbsp;&nbsp; * @roseuid 3D9BAFE20331<BR>&nbsp;&nbsp; 
      */<BR>&nbsp; public void putSourceToINBuffer(String tmpString) 
      {<BR>&nbsp;&nbsp;&nbsp; this.inputBuffer.Data = 
      tmpString.toCharArray();<BR>&nbsp; }</P>
      <P>&nbsp; /**<BR>&nbsp;&nbsp; * @roseuid 3D9BB0400169<BR>&nbsp;&nbsp; 
      */<BR>&nbsp; public void putFinToSCBuffer(String filtratedString) 
      {<BR>&nbsp;&nbsp;&nbsp; aa.scaner.scanBuffer.Data = 
      filtratedString.toCharArray();<BR>&nbsp; }</P>
      <P>&nbsp; /**<BR>&nbsp;&nbsp; * @roseuid 3D9BB05E00A4<BR>&nbsp;&nbsp; 
      */<BR>&nbsp; public void controlThread() {<BR>&nbsp;&nbsp;&nbsp; int 
      intLength;<BR>&nbsp;&nbsp;&nbsp; int resCounter = 0;<BR>&nbsp;&nbsp;&nbsp; 
      String tmpString;<BR>&nbsp;&nbsp;&nbsp; String 
      filtratedString;<BR>&nbsp;&nbsp;&nbsp; 
      System.out.println("[INFOR]开始单词分析////////////////////////////////////////");<BR>&nbsp;&nbsp;&nbsp; 
      try {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (SourceFile.exists()) { 
      //文件存在<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //读文件内容到缓冲区<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ( 
      (tmpString = this.randomAFile.readLine()) != null) 
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      ++fileRow;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //分割符<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      System.out.println("...................begin row " + this.fileRow 
      +<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      ".......................");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //开始这一行分析<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      System.out.println("[INFOR]正在处理行: " + 
      String.valueOf(fileRow));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //放入输入缓冲区<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      this.putSourceToINBuffer(tmpString);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //处理字符串<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      filtratedString = 
      this.filtrateSource(this.inputBuffer.Data);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      System.out.println("[INFOR]已过滤句子: " + 
      filtratedString);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      //放入扫描缓冲区<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      this.putFinToSCBuffer(filtratedString);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      aa.controlThread();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      System.out.println(<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      "[INFOR]分析完毕////////////////////////////////////////////");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else { 
      //文件不存在<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      System.err.println("[ERROR]源文件不存在!");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      }<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; catch (Exception e) 
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      e.printStackTrace(System.err);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp; }</P>

⌨️ 快捷键说明

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