我有以下规则:
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。