一个简单的语言的语法(二):ANTLR的重写规则 - 编程入门网
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-06-14
写的)
一个简单的语言的语法(二):ANTLR的重写规则(5)时间:2011-10-07 javaeye RednaxelaFX用本篇的ANTLR语法文件生成的解析器,我们可以解析这个例子,得到对应的抽象语法树的字符串表示 。表示方法是: Java代码 (root element1 element2 ...) 跟LISP的S-expression非常类似。 于是执行测试程序。将要解析的代码保存到JerrySample.txt中,然后执行下面的命令: 引用 java -cp ".;antlrworks-1.2.2.jar" TestJerry < JerrySample.txt 得到输出: Java代码 (VAR_DECL (SIMPLE_TYPE int) i 1) (VAR_DECL (SIMPLE_TYPE int) j) (VAR_DECL (SIMPLE_TYPE int) x (- (+ (SIMPLE_VAR_ACCESS i) (* 2 3)) (/ 4 (- 6 (UNARY_MINUS 7))))) (VAR_DECL (ARRAY_TYPE int 2 3) array (ARRAY_LITERAL (ARRAY_LITERAL 0 1 2) (ARRAY_LITERAL 3 4 6))) (while (< (SIMPLE_VAR_ACCESS i) 10) (= (SIMPLE_VAR_ACCESS i) (+ (SIMPLE_VAR_ACCESS i) 1))) (while (&& (! (> (SIMPLE_VAR_ACCESS x) 0)) (< (SIMPLE_VAR_ACCESS i) 10)) (BLOCK (= (SIMPLE_VAR_ACCESS x) (- (SIMPLE_VAR_ACCESS x) 1)) (if (< (SIMPLE_VAR_ACCESS i) 5) break (read (SIMPLE_VAR_ACCESS i))))) (write (- (SIMPLE_VAR_ACCESS x) (SIMPLE_VAR_ACCESS j))) 这样太乱了看不清楚。将其格式稍微整理一下得到: Java代码 (VAR_DECL (SIMPLE_TYPE int) i 1 ) (VAR_DECL (SIMPLE_TYPE int) j ) (VAR_DECL (SIMPLE_TYPE int) x (- (+ (SIMPLE_VAR_ACCESS i) (* 2 3)) (/ 4 (- 6 (UNARY_MINUS 7))) ) ) (VAR_DECL (ARRAY_TYPE int 2 3 ) array (ARRAY_LITERAL (ARRAY_LITERAL 0 1 2) (ARRAY_LITERAL 3 4 6) ) ) (while (< (SIMPLE_VAR_ACCESS i) 10) (= (SIMPLE_VAR_ACCESS i) (+ (SIMPLE_VAR_ACCESS i) 1)) ) (while (&& (! (> (SIMPLE_VAR_ACCESS x) 0)) (< (SIMPLE_VAR_ACCESS i) 10) ) (BLOCK (= (SIMPLE_VAR_ACCESS x) (- (SIMPLE_VAR_ACCESS x) 1)) (if (< (SIMPLE_VAR_ACCESS i) 5) break (read (SIMPLE_VAR_ACCESS i)) ) ) ) (write (- (SIMPLE_VAR_ACCESS x) (SIMPLE_VAR_ACCESS j))) 可以跟原本的代码对比一下,看看是否保持了原本的结构。 得到这棵抽象语法树之后,接下来就可以对树来做匹配和分析了。由于树本身已经有了结构,下面就 可以用更干净的描述方式来表述我们要对树做的处理。下一篇就来看看ANTLR的tree grammar在这里的应 用。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于一个简单的语言的语法(二):ANTLR的重写规则 - 编程入门网的所有评论