`
jackyhongvip
  • 浏览: 158202 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ANTLR笔记3 - ANTLRWorks

 
阅读更多

安装配置
需要JRE或者JDK
下载ANTLRWorks: http://www.antlr.org/works/index.html
查看DFA需要使用Graphviz,下载安装: http://www.graphviz.org/
运行antlrworks-1.1.7.jar,在菜单File -> Preferences中设置DOT path为Graphviz安装路径"bin"dot.exe。这里还可以设置ANTLR的临时工作目录、global options,Java的CLASSPATH、javac路径等。

编辑
打开文章后面给出的Expr.g语法文件。
1. Syntax Diagram。选择一个语法规则,在Syntax Diagram窗口可以看到语法图,例如stat:
   
这样可以了解ANTLR是如何解析语法描述的,例如ANTLR笔记2中提到的expr: PLUS expr | INT;,语法图如下,这样就不会理解为expr: PLUS (expr | INT);这种效果。
   
勾选Syntax Diagram右下角的NFA可以查看NFA,例如stat:

2. DFA。菜单Grammar -> Show Tokens DFA可以查看语法的DFA,例如官方网站的截图:
   
3. 一些不错的编辑操作。
a.) 查看语法规则的使用状况。选择某个语法规则,Alt+F7。
b.) 快速定位语法规则。Ctrl+Shift+B。

解释

在Interpreter窗口输入2+3*4,并加上一个回车,选择prog语法规则,点击运行按钮,分析结果语法树如下:
   

调试
Ctrl+D调出调试窗口,文本输入2+3*4,并加上一个回车,Start Rule选择prog,确定。然后就可以单步调试ANTLR语法解析过程,可以看到每个步骤当前执行的一些信息,例如输入字符、分析结果语法树、堆栈情况等。
ANTLR只能调试Java的,C#的调试参考http://www.antlr.org/wiki/display/ANTLR3/Antlr+3+CSharp+Target,我试了一下没有成功。

附示例语法文件Expr.g

grammar Expr;

@header {
package test;
import java.util.HashMap;
}

@lexer::header {
package test;}

@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);
        }
    
|   '(' e=expr ')' {$value = $e.value;}
    ;

ID :   (
'a'..'z'|'A'..'Z')+ ;
INT :   
'0'..'9'+ ;
NEWLINE:
'"r'? '"n' ;
WS  :   (
' '|'"t')+ {skip();} ;
分享到:
评论

相关推荐

    antlr-runtime-3.4-API文档-中文版.zip

    赠送jar包:antlr-runtime-3.4.jar; 赠送原API文档:antlr-runtime-3.4-javadoc.jar; 赠送源代码:antlr-runtime-3.4-sources.jar; 赠送Maven依赖信息文件:antlr-runtime-3.4.pom; 包含翻译后的API文档:antlr-...

    antlr-runtime-3.5-API文档-中文版.zip

    赠送jar包:antlr-runtime-3.5.jar; 赠送原API文档:antlr-runtime-3.5-javadoc.jar; 赠送源代码:antlr-runtime-3.5-sources.jar; 赠送Maven依赖信息文件:antlr-runtime-3.5.pom; 包含翻译后的API文档:antlr-...

    antlr-runtime-3.5.2-API文档-中英对照版.zip

    赠送jar包:antlr-runtime-3.5.2.jar; 赠送原API文档:antlr-runtime-3.5.2-javadoc.jar; 赠送源代码:antlr-runtime-3.5.2-sources.jar; 赠送Maven依赖信息文件:antlr-runtime-3.5.2.pom; 包含翻译后的API文档...

    antlr-intellij-plugin-v4-1.14.zip

    对于下载的"antlr-intellij-plugin-v4-1.14.zip"文件,它是2020年版本的ANTLR Intellij Plugin v4.14的备份。这意味着它可以安装到IntelliJ IDEA中,为用户提供ANTLR 4的支持。安装步骤通常包括解压缩文件,将解压后...

    antlr4-runtime-4.2-API文档-中文版.zip

    赠送jar包:antlr4-runtime-4.2.jar; 赠送原API文档:antlr4-runtime-4.2-javadoc.jar; 赠送源代码:antlr4-runtime-4.2-sources.jar; 赠送Maven依赖信息文件:antlr4-runtime-4.2.pom; 包含翻译后的API文档:...

    antlr-3.5.2-complete.jar

    antlr-3.5.2-complete.jar

    antlr4-runtime-4.7-API文档-中文版.zip

    赠送jar包:antlr4-runtime-4.7.jar; 赠送原API文档:antlr4-runtime-4.7-javadoc.jar; 赠送源代码:antlr4-runtime-4.7-sources.jar; 赠送Maven依赖信息文件:antlr4-runtime-4.7.pom; 包含翻译后的API文档:...

    antlr-runtime-3.2.jar

    antlr-runtime-3.2.jar

    antlr-4.8-complete.jar

    antlr-4.8-complete.jar

    antlr-runtime-3.4.jar.zip

    3. 将`antlr-runtime-3.4.jar` 添加到项目的类路径中。 4. 在程序中实例化ANTLR解析器,传入输入源(如字符串、文件或输入流),调用解析方法进行解析。 5. 解析过程中,ANTLR会自动构建解析树,可以利用ANTLR提供的...

    antlr-runtime-3.0.1

    antlr-runtime-3.0.1开发需要的jar包

    antlr-4.7-complete.jar

    antlr-4.7-complete.jar运行环境库(java版)

    antlr-runtime-3.1.jar.zip

    在使用`antlr-runtime-3.1.jar.zip` 进行开发时,首先需要解压缩文件,然后将`antlr-runtime-3.1.jar` 添加到项目的类路径中。如果使用Maven或Gradle等构建工具,可以在`pom.xml`或`build.gradle`文件中配置依赖,...

    antlr-runtime-3.5-API文档-中英对照版.zip

    赠送jar包:antlr-runtime-3.5.jar; 赠送原API文档:antlr-runtime-3.5-javadoc.jar; 赠送源代码:antlr-runtime-3.5-sources.jar; 赠送Maven依赖信息文件:antlr-runtime-3.5.pom; 包含翻译后的API文档:antlr-...

    antlr-runtime-3.1.1.jar.zip

    在本案例中,我们关注的是`antlr-runtime-3.1.1.jar.zip`文件,它是一个包含ANTLR运行时库的压缩包,版本为3.1.1。 ANTLR的主要功能是生成解析器和词法分析器,这些生成器能够解析符合特定语法规则的输入。ANTLR...

    antlr-3.4-complete-no-antlrv2.jar

    antlr-3.4-complete-no-antlrv2.jar

    antlr-python-runtime-3.1.3.zip

    总的来说,ANTLR-python-runtime-3.1.3.zip是一个包含ANTLR 3 Python运行时环境的压缩文件,用于在Python中解析和处理自定义语法的数据。通过学习和使用ANTLR,你可以构建强大的语言处理工具,极大地提高开发效率。

    antlr-4.6-complete.jar

    antlr-4.6-complete.jar

    antlr-runtime-3.0.jar.zip

    在Java项目中,如果你需要使用ANTLR的运行时库,通常会将`antlr-runtime-3.0.jar` 添加到项目的类路径(classpath)中,或者通过Maven、Gradle等构建工具管理依赖,确保在编译和运行时能够正确地找到和加载ANTLR的...

    antlr4-runtime-4.7-API文档-中英对照版.zip

    赠送jar包:antlr4-runtime-4.7.jar; 赠送原API文档:antlr4-runtime-4.7-javadoc.jar; 赠送源代码:antlr4-runtime-4.7-sources.jar; 赠送Maven依赖信息文件:antlr4-runtime-4.7.pom; 包含翻译后的API文档:...

Global site tag (gtag.js) - Google Analytics