grammar Poly;
options
{
output=AST;
ASTLabelType=CommonTree;
}
poly
:
term(TLK^ term)*
;
term
:
a=ID b=INT -> ^($a $b)*
;
INT:'0'..'9';
ID:'a'..'z';
TLK:('PUSH'|'POP');
Semi : ';' {skip();};
Space : ' ' {skip();};
这是我的语法文件......我的输入是
PUSH t 6;POP t 7;PUSH t 8;
但它将输出视为
(PUSH (POP (t 6) (t 7)) (t 8))
......并将命令保留为
第1行:0无关输入' PUSH'期待身份证
为什么我的第一个PUSH不包含在树中?
答案 0 :(得分:0)
假设您从k :=0
for i ←1 to n
c←a[i]
k←k+1
规则开始,其右侧的第一个元素是poly
,这是一个ID后跟INT,而不是term
:
PUSH
为了匹配您提供的输入,您可能需要这样:
poly
:
term(TLK^ term)*
;