簡體   English   中英

ANTLR:返回的孩子數始終相同

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM