【发布时间】:2011-06-15 15:04:12
【问题描述】:
我正在尝试为我正在编写的更简单的语言编写一个简单的解析器。它由后缀表达式组成。截至目前,我遇到了解析器的问题。当我在输入 2 2 * test >> 上运行它时,我得到了 MismatchedTokenException。
另外,我将如何实现递归后缀解析器?
这是我的代码:
grammar star;
options {
language=Python;
output=AST;
ASTLabelType=CommonTree;
}
tokens {DECL;}
//start
// : decl ;
//decl
// : type ID -> ^(DECL type ID)
// ;
program
: (body)+
;
body : (nested WS)*
| (var WS)*
| (get WS)*
;
var
: nested ID '>>'
;
get
: ID '<<'
;
//expressions
term
: INT
;
expr
: term (term operator)*
;
nested
: expr (expr operator)*
;
operator
: ('*' | '+' | '/' | '%' | '-')
;
ID
: ('a'..'z' | 'A'..'Z') ('a..z' | '0'..'9' | 'A'..'Z')*
;
INT
: '0'..'9'+
;
WS
: (' ' | '\n' | '\t' | '\r') {$channel=HIDDEN;}
;
【问题讨论】:
-
它无法处理
3 4 * 2 3 + /,这意味着它不能将表达式作为术语。 -
您的测试运行情况如何?使用 ANTLRWorks?你用什么规则解析
2 2 * test >>?start或program? -
我在 ANTLRWorks 解释器中运行它,是的,我用
program解析它 -
我也收到了一些关于
multiple alternatives的警告 -
您发布的语法有很多问题。我会在今晚晚些时候尝试解释(如果其他人在我之前没有这样做的话)。
标签: python antlr parser-generator antlrworks