zoukankan      html  css  js  c++  java
  • Antlr首页计算机器实验成功

    由于我有一点java基础,所以就没下Antlr编辑器,自己在命令行编译的程序。

    先按getting start 中说的,将jdk, antlr环境变量设置好。

    然后在文件夹下建一个记事本文件,写入以下代码

     1 grammar Expr;
     2 
     3 @header {
     4 import java.util.HashMap;
     5 }
     6 
     7 @members {
     8 /** Map variable name to Integer object holding value */
     9 HashMap memory = new HashMap();
    10 }
    11 
    12 prog:   stat+ ;
    13                 
    14 stat:   expr NEWLINE {System.out.println($expr.value);}
    15     |   ID '=' expr NEWLINE
    16         {memory.put($ID.text, new Integer($expr.value));}
    17     |   NEWLINE
    18     ;
    19 
    20 expr returns [int value]
    21     :   e=multExpr {$value = $e.value;}
    22         (   '+' e=multExpr {$value += $e.value;}
    23         |   '-' e=multExpr {$value -= $e.value;}
    24         )*
    25     ;
    26 
    27 multExpr returns [int value]
    28     :   e=atom {$value = $e.value;} ('*' e=atom {$value *= $e.value;})*
    29     ; 
    30 
    31 atom returns [int value]
    32     :   INT {$value = Integer.parseInt($INT.text);}
    33     |   ID
    34         {
    35         Integer v = (Integer)memory.get($ID.text);
    36         if ( v!=null ) $value = v.intValue();
    37         else System.err.println("undefined variable "+$ID.text);
    38         }
    39     |   '(' expr ')' {$value = $expr.value;}
    40     ;
    41 
    42 ID  :   ('a'..'z'|'A'..'Z')+ ;
    43 INT :   '0'..'9'+ ;
    44 NEWLINE:'\r'? '\n' ;
    45 WS  :   (' '|'\t')+ {skip();} ;

    另存为Expr.g。

    再新建一个记事本,写入以下代码:

     1 import org.antlr.runtime.*; 
     2 public class Test {
     3     public static void main(String[] args) throws Exception {
     4         ANTLRInputStream input = new ANTLRInputStream(System.in);
     5         ExprLexer lexer = new ExprLexer(input);
     6         CommonTokenStream tokens = new CommonTokenStream(lexer);
     7         ExprParser parser = new ExprParser(tokens);
     8         parser.prog();
     9     }
    10 } 

    另存为Test.java

    打开控制台到存储以上两个文件的地方

    输入:

    java org.antlr.Tool Expr.g

    javac Test.java ExprLexer.java ExprParser.java

    第一行是编译.g文件,会成生 Expr.tokens ExprLexer.java ExprParser.java

    第二行将.java文件都编译

    然后输入:

    java Test.java就会运行

    系统等待你的输入,按Antlr给定的输入:

    x=1

    y=2

    3*(x+y)

    然后按一下Ctlr+C,就会得到结果。

    有点小兴奋,在实验室调了不一会就调出来,在寝室怎么也没调出来,环境变量什么的设置都是一样的,我还在找原因。

  • 相关阅读:
    WCF JSON DATETIME JSON.NET (Newtonsoft.Json.dll)
    fastboot 重启到recovery
    EXCEL datatable 根据列名自动写入到相应属性、字段或列中
    支付宝通讯时异常 基础连接已经关闭
    c#.net 调用BouncyCastle生成PEM格式的私钥和公钥
    WCF 遇到 由于线程退出或应用程序请求,已放弃 I/O 操作 ListenerContextInputStream
    runliuv, 安卓查看WIFI密码
    安卓 NEXUS6 修改分辨率,density
    ubuntu 安装 VISUAL STUDIO CODE
    C# .NET MVC 接收 JSON ,POST,WCF 无缝隙切换
  • 原文地址:https://www.cnblogs.com/zhengrui0452/p/2791340.html
Copyright © 2011-2022 走看看