1:  package compiler;
   2:   
   3:  import java.io.BufferedWriter;
   4:  import java.io.FileWriter;
   5:   
   6:  /**
   7:   * 组织输入输出接口
   8:   *
   9:   * @author jiangnan
  10:   */
  11:  public class PL0 {
  12:   
  13:      
  14:      public static final String pcodeFile = "d:\\pcode.txt";
  15:      public static final String tableFile = "d:\\table.txt";
  16:      public static final String runtimeFile = "d:\\runtime.txt";
  17:      public static final String errFile = "d:\\error.txt";
  18:      public static final String inputFile="d:\\input.txt";
  19:      public static BufferedWriter pcodeWriter;                 //输出虚拟机代码
  20:      public static BufferedWriter runtimeWriter;               //输出结果
  21:      public static BufferedWriter tableWriter;                //输出名字表
  22:      public static BufferedWriter errWriter;                   //输出错误信息
  23:   
  24:      public Praser praser;
  25:   
  26:      public PL0(String filepath) {
  27:          Scanner scan = new Scanner(filepath);
  28:          praser = new Praser(scan,//词法分析器
  29:                  new SymbolTable(),//名字表
  30:                  new Interpreter());
  31:      }
  32:   
  33:      public boolean compile() {
  34:          try {
  35:              pcodeWriter = new BufferedWriter(new FileWriter(pcodeFile));
  36:              tableWriter = new BufferedWriter(new FileWriter(tableFile));
  37:              runtimeWriter = new BufferedWriter(new FileWriter(runtimeFile));
  38:              errWriter = new BufferedWriter(new FileWriter(errFile));
  39:              praser.nextsym();                                    //前瞻分析需要预先读入一个符号
  40:              praser.parse();                                        //开始语法分析过程(连同语法检查,目标代码生成)
  41:              pcodeWriter.close();
  42:              tableWriter.close();
  43:              runtimeWriter.close();
  44:              errWriter.close();
  45:          } catch (Exception e) {
  46:              e.printStackTrace();
  47:              System.out.println("***compile error***");
  48:          } finally {
  49:   
  50:          }
  51:          //编译成功是指完成编译过程并且没有错误
  52:          return (praser.myErr.errCount == 0);
  53:      }
  54:  }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

PL/0编译器(java version)–PL0.java的更多相关文章

  1. PL/0编译器(java version) - MainFrame.java

    1: /* 2: * To change this license header, choose License Headers in Project Properties. 3: * To chan ...

  2. PL/0编译器实践---后记

    花了几天时间,把清华版的<编译原理>一书中的PL/0编译器实践了一遍.颇有收获,记录如下: 理解代码的技巧,如何理解一份代码,比如这个程序,其逻辑相对于一般程序就比较复杂了,如何翻译,虚拟 ...

  3. PL/0编译器(java version)–Praser.java

    1: package compiler; 2:   3: import java.io.IOException; 4: import java.util.BitSet; 5:   6: /** 7: ...

  4. PL/0编译器(java version) – SymbolTable.java

    1: package compiler; 2: //竟然没有对符号表检查大小,会溢出的. 3:   4: import java.io.IOException; 5:   6: public clas ...

  5. PL/0编译器(java version) - Interpreter.java

    1: package compiler; 2:   3: import java.io.BufferedReader; 4: import java.io.BufferedWriter; 5: imp ...

  6. PL/0编译器(java version) - Err.java

    1: package compiler; 2:   3: import java.io.BufferedWriter; 4:   5: public class Err { 6:   7: publi ...

  7. PL/0编译器(java version) – Scanner.java

    1: package compiler; 2:   3: import java.io.BufferedReader; 4: import java.io.FileNotFoundException; ...

  8. PL/0编译器(java version) – Symbol.java

    1: package compiler; 2:   3: /** 4: * 采用全局变量sym来存储符号码,并用全局变量id和num来传递语义值 5: * 6: * @author jiangnan ...

  9. PL/0编译器(java version)–Pcode.java

    1: package compiler; 2:   3: /** 4: * //虚拟机指令 5: * 6: * @author jiangnan 7: * 8: */ 9: public class ...

随机推荐

  1. String类常用方法。

    一,字符数组与字符串. 一个字符串可以变成一个字符数组,同样,一个字符数组可以变成一个字符串. 在String类中提供了以下操作方法. 1)将字符串变成字符数组:public char[] toCha ...

  2. 11SpringMvc_一个Action中,写多个类似的业务控制方法

    我们要实现这么一个功能: 编写两个表单,提交到同一个Action中的不同的处理方法中.比如注册和登录,都提交到UserAction这个控制类中.但是这两个提交由userAction这个控制类不同的方法 ...

  3. ThinkPHP 3.2.3 ----- 验证码

    显示验证码 首先在Home/Controller下创建一个公共控制器PublicController 1 <?php 2 namespace Home\Controller; 3 4 use T ...

  4. 如何“刷leetcode”

    做题目的: 获得 offer 巩固算法与数据结构知识,将学到的东西用出来 如何做题: 根据章节与难度来做. 比如你学了 linked list,就去找到标签为 linked list 的题目,然后根据 ...

  5. Dottrace跟踪代码执行时间

    当自己程序遇到性能问题,比如请求反应缓慢,怎么分析是哪里出了问题呢?dottrace可以帮助.net程序跟踪出代码里每个方法的执行时间,这样让我们更清晰的看出是哪里执行时间过长,然后再分析应该怎样解决 ...

  6. WCF与ASMX Web服务差异比较[译]

    First of all, it needs to understand that WCF Service provides all the capabilities of .NET web serv ...

  7. SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)

    使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没 ...

  8. Linux下高频命令分类辑录(基本使用篇)

    本文目的:总结linux下常用命令的基本使用方法 文件权限: 文档权限设置命令:chmod 数字模式: 文档权限由-rwxrwxrwx十个字符组成,其中第一个代表文档类型,后面九个字符按照顺序分为三组 ...

  9. DOM(九)使用DOM设置文本框

    1.控制用户输入的字符个数 对于单行文本框和密码输入框,可以利用maxlength属性控制用户输入的字符个数. 对于多行文本,maxlength为自定义属性,其值最多输入的字符的个数,在onkeypr ...

  10. PHP时间日期比较

    若要使用PHP来比较日期,最好用DateTime::diff 但是这个是5.3才支持的,如果没有这样的环境,可以使用<.>来比较 如下例子,会输出right $date1=strtotim ...