ばかげた/基本的な質問をしているかもしれませんが、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環境を使用しています。