繁体   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