我可能会问一个愚蠢/基本的问题,但我对 ANTLR AST 的构建感到困惑。
我想要做的是一种布尔表达式解析器,这样在父节点上我有运算符及其操作数作为子节点。例如,一个句子
( ( ABC & D ) | ( E & ( F | G ) )
理想情况下应该代表
|
/ \
/ \
/ \
/ \
& &
/ \ / \
/ \ / \
/ D E |
/|\ / \
A B C / \
F G
从下面的语法。
grammar Test;
options
{
language = 'Java';
output=AST;
}
exp : word (expRest^)? | '('! exp ')'! (expRest^)? ;
expRest : (('&'|'|'|'!'|'&!'|'|!')^) exp | (('~'^) digit+ exp);
word : letter letter* -> ^(letter letter*);
letter : '0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'|'a'|'b'|'c'|'d'|'e'|'f'|'g'|'h'|'i'|'j'|'k'|'l'|'m'|'n'|'o'|'p'|'q'|'r'|'s'|'t'|'u'|'v'|'w'|'x'|'y'|'z'|'A'|'B'|'C'|'D'|'E'|'F'|'G'|'H'|'I'|'J'|'K'|'L'|'M'|'N'|'O'|'P'|'Q'|'R'|'S'|'T'|'U'|'V'|'W'|'X'|'Y'|'Z';
digit : '0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9';
问题是,我将“AB C”作为节点列表(数组)作为“&”的子节点。
是否可以将其限制为单个字符串???即'AB C'或者换句话说,AST的根节点是否可以有多个字符???如果是,那么我该如何实现?
作为参考,我想制作一个“风险因素和当前经济状况”的语法树
PS我也试过:
word : (letter letter*)^ ;
仅供参考,我使用的是 .NET 环境。