我无法获得 AST
" risk & factors | concise" | item 503
使用以下语法
grammar BoolExpRep;
options {
output=AST;
}
tokens {
MultiWordNode;
}
start
: exp EOF!
;
exp
: atom (expRest^)?
| '('! exp ')'! (expRest^)?
;
expRest
: OPER exp -> ^(OPER exp)
| '~' WORD exp -> ^('~' WORD exp)
;
OPER
: '&' | '|' | '!' | '&!' | '|!'
;
atom
: WORD WORD+ -> ^(MultiWordNode WORD+)
| WORD
| '"' WORD (OPER? WORD)+ '"' -> ^(MultiWordNode '"' (OPER? WORD)+ '"')
| '"' WORD '"'
;
WORD
: ('a'..'z' | 'A'..'Z' | '0'..'9' | '.' | '*' | '{' | '}' | '_' | '?' | ':'
| ',' | '/' | '\\')+ ('0'..'9')*
;
我想制作一个应该显示单词和运算符的 AST,以便
" risk & factors | concise "
即我的要求是这样的:
" risk & factors | concise "
相反,我得到的是:
" & risk & factors & concise "
实际上,我指的是 MultiwordNode 下的 AST(或在“原子”级别生成)
它应该像
M u l t i W o r d N o d e
/ / / | \ \ \
/ / / | \ \ \
" risk & factors | concise "
(对不起我画的不好:))
问题是,如果运算符不带引号出现,它应该是其兄弟的头部(正如它在 AST 中所指的那样)。但是当它出现在一些带引号的文本中时,它应该像其他词一样被捕获......