[英]ANTLR: return always the same number of children
我有以下規則:
statement : TOKEN1 opt1=TOKEN2? opt2=TOKEN3 TOKEN4 -> ^(TOKEN1 opt1? opt2);
此規則生成的AST將具有一個或兩個子代(取決於是否定義了opt1)。
我需要始終有固定數量的孩子(在這種情況下為2)。 我知道可以通過執行以下操作來實現( UNDEFINED
是一個虛構的令牌):
statement : TOKEN1 opt1=TOKEN2 TOKEN4 -> ^(TOKEN1 opt1 UNDEFINED)
| TOKEN1 opt1=TOKEN2 opt2=TOKEN3 TOKEN4 -> ^(TOKEN1 opt1 opt2);
這僅適用於一個可選令牌。 問題是當我有更多的可選標記時。 必須編寫許多規則才能捕獲所有可能的組合。 如何以一種優雅的方式解決這個問題?
順便說一下,我正在使用ANTLR 3.4 / C目標。
謝謝,
T.
您可以這樣做:
grammar G;
tokens {
CHILD1;
CHILD2;
CHILD3;
}
...
statement
: ROOT t2=TOKEN2? t3=TOKEN3? t4=TOKEN4?
-> ^(ROOT ^(CHILD1 $t2?) ^(CHILD2 $t3?) ^(CHILD3 $t4?))
;
這將導致AST始終具有3個子節點(作為子節點本身可能有或沒有令牌)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.