1. JAVA环境

2. Antler 工具包:

  antlr-3.5.1-complete-no-st3.jar

  路径加入classpath

3. cmd命令行:

java org.antlr.Tool XXXXX.g

  (此命令可生成.java或.cs文件等,因.g文件中内容而异)

1).g (转成.cs)  实例:

grammar SimpleCalc;

options {
language=CSharp2;
} tokens {
PLUS = '+' ;
MINUS = '-' ;
MULT = '*' ;
DIV = '/' ;
} @members {
static void Main(string[] args)
{
string source = Console.ReadLine();
SimpleCalcLexer lex = new SimpleCalcLexer(new ANTLRStringStream(source));
CommonTokenStream tokens = new CommonTokenStream(lex);
SimpleCalcParser parser = new SimpleCalcParser(tokens);
try
{
Console.WriteLine(parser.expr());
}
catch (RecognitionException e)
{
Console.Error.WriteLine(e.StackTrace);
}
Console.ReadLine();
}
} //PARSER RULES
expr returns [int value] :
e=term { $value=$e.value; }
(
PLUS e=term { $value += $e.value; }
|
MINUS e=term { $value -= $e.value; }
)*;
term returns [int value] :
e=factor { $value = $e.value; }
(
MULT e=factor { $value *= $e.value; }
|
DIV e=factor { $value /= $e.value; }
)* ;
factor returns [int value] : NUMBER { $value = int.Parse($NUMBER.text); }; //LEXER RULES
NUMBER : (DIGIT)+ ;
WHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ { $channel = HIDDEN; } ;
fragment DIGIT : ''..'' ;

c# SimpleCalc.g

  2)  .g (转成.java)实例:

grammar Expr;

@header {
import java.util.HashMap;
} @members {
/** Map variable name to Integer object holding value */
HashMap memory = new HashMap();
} prog: stat+ ; stat: expr NEWLINE {System.out.println($expr.value);}
| ID '=' expr NEWLINE
{memory.put($ID.text, new Integer($expr.value));}
| NEWLINE
; expr returns [int value]
: e=multExpr {$value = $e.value;}
( '+' e=multExpr {$value += $e.value;}
| '-' e=multExpr {$value -= $e.value;}
)*
; multExpr returns [int value]
: e=atom {$value = $e.value;} ('*' e=atom {$value *= $e.value;})*
; atom returns [int value]
: INT {$value = Integer.parseInt($INT.text);}
| ID
{
Integer v = (Integer)memory.get($ID.text);
if ( v!=null ) $value = v.intValue();
else System.err.println("#ff0000 variable "+$ID.text);
}
| '(' expr ')' {$value = $expr.value;}
; ID : ('a'..'z'|'A'..'Z')+ ;
INT : ''..''+ ;
NEWLINE:'\r'? '\n' ;
WS : (' '|'\t')+ {skip();} ;

JAVA Expr.g

4. 生成的.cs需要的依赖包:Antlr3.Runtime.dll

参考:

http://www.cnblogs.com/RicCC/archive/2008/03/01/antlr-getting-started-examples.html

Antler 工具使用(.g 转.java / .cs)的更多相关文章

  1. Redis操作Set工具类封装,Java Redis Set命令封装

    Redis操作Set工具类封装,Java Redis Set命令封装 >>>>>>>>>>>>>>>>& ...

  2. Redis操作List工具类封装,Java Redis List命令封装

    Redis操作List工具类封装,Java Redis List命令封装 >>>>>>>>>>>>>>>> ...

  3. 分页 工具类 前后台代码 Java JavaScript (ajax) 实现 讲解

    [博客园cnblogs笔者m-yb原创, 转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708]http ...

  4. Pinpoint是一个开源的 APM (Application Performance Management/应用性能管理)工具,用于基于java的大规模分布式系统,基于Google Dapper论文

    Pinpoint是一个开源的 APM (Application Performance Management/应用性能管理)工具,用于基于java的大规模分布式系统,基于Google Dapper论文 ...

  5. 五、jdk工具之jmap(java memory map)、 mat之四--结合mat对内存泄露的分析、jhat之二--结合jmap生成的dump结果在浏览器上展示

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  6. 开发工具、Object类(java基础知识十一)

    1.常见开发工具介绍 * A:操作系统自带的记事本软件 * B:高级记事本软件 * C:集成开发环境 IDE     * (Integrated Development Environment) *  ...

  7. Linux 编译工具 gcc/g++、Make/Makefile、CMake/CMakeLists.txt、qmake

    前言 编译器的主要工作流程: 源码(Source Code)>> 预处理器(Preprocessor)>> 编译器(Compiler)>> 汇编程序(Assembl ...

  8. Java 性能分析工具 , 第 3 部分: Java Mission Control

    引言 本文为 Java 性能分析工具系列文章第三篇,这里将介绍如何使用 Java 任务控制器 Java Mission Control 深入分析 Java 应用程序的性能,为程序开发人员在使用 Jav ...

  9. mat工具MemoryAnalyzer进行分析java内存溢出hprof文件

    java服务端程序报错后会生成hprof文件,我们可以通过mat工具MemoryAnalyzer进行分析 下载地址: http://www.eclipse.org/mat/downloads.php ...

随机推荐

  1. Linux下Utuntu使用

    以前一直用Centos,在下面安装了Vmware Tools和Eclipse C++基本能使用,也遇到过一些问题.突然心血来潮,试试Utuntu,所以在实验室电脑虚拟机上装一下,安装过程很熟练了,参考 ...

  2. 连接Zookeeper操作

    public class ZKConnector implements Watcher{ private static final Logger logger =LoggerFactory.getLo ...

  3. Linux 正则表达式 vi, grep, sed, awk

          1. vi 表示内容的元字符 模式 含义 . 匹配任意字符 [abc] 匹配方括号中的任意一个字符.可以使用-表示字符范围,如[a-z0-9]匹配小写字母和阿拉伯数字. [^abc] 在方 ...

  4. 社区之星礼品开箱——感谢CSDN

    前言 尽管已经看过国内外无数的开箱.评測视频,也看过无数国内社区的各种玩具.电子产品.摄影的分享贴.自己却从未写过--摄影水平有限以及懒-- 昨天看到上图的文章,看到最后都说了应该晒晒照片.写写博客, ...

  5. ZT:成熟是一种明亮而不刺眼的光辉

    成熟是一种明亮而不刺眼的光辉, 一种圆润而不腻耳的音响, 一种不再需要对别人察言观色的, 一种终于停止向周围申诉求告的大气, 一种不理会哄闹的微笑, 一种洗刷了偏激的冷漠, 一种无需声张的厚实, 一种 ...

  6. 如何Enable FireFox里的Java Plugin

    步骤,Tools->Add-ons->Plugins 然后把Java(TM) PlatformXXX...的状态修改为Always Activate 如下图:

  7. 【Python数据分析】IPython快捷键

    命令                          说明 CTRL+P(或向上箭头)             后向搜索命令历史中以当前输入的文本开头的命令 CTRL+N(或向下箭头)        ...

  8. VueJS字符串反转:String.reverse()

    HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl ...

  9. Leetcode Array 15 3sum

      思考的方向不对,即使用了多于别人几倍的时间,也不一定能够达到终点. 我的错误的想法(可以跳过):在leetcode上面做的第四道题,走路一个很大的弯路,收到之前做过的 Container With ...

  10. 卡特兰数-Catalan数

    卡特兰数的含义: 说到卡特兰数,就不得不提及卡特兰数序列.卡特兰数序列是一个整数序列.其通项公式是我们从中取出的就叫做第n个卡特兰数数,前几个卡特兰数数是:1, 1, 2, 5, 14, 42, 13 ...