在多个词法分析器规则中使用的相同字符



我(可能(有一个非常简单的问题。我正在编写一个ANTLR语法来评估骰子表达式。有了这个,我想解析类似 4d6 以及4d6d2.第一个意思是"掷4个六面骰子",第二个意思是"掷4个六面骰子,掉落2个最低"。我目前的语法是:

grammar Dice;
start : dice ; 
dice : NUMBER? DSEPERATOR NUMBER ( KEEP | DROP NUMBER )?;
KEEP : 'k';
DROP : 'd';
DSEPERATOR : [dD];
NUMBER : [0-9]+;
WS : [ trn]+ -> skip ; // skip spaces, tabs, newlines

我似乎对KEEPDSEPERATOR的定义有问题,因为它们都使用字母d。分析器在dice表达式中的第一个NUMBER后停止。这里有什么工作?我的语法需要改变什么?

正在解析的隐式结构是

e - number of executions
d - type of object
s - number of object sides
o - op to apply*
a - number of op applications*

因此,匹配规则是:

 decode : e d s ( o a )? ;

合并数字和扩展:

 decode : e=NUM type s=NUM ( op a=NUM )? ; // label for convenience
 type   : dice | .... ;
 op     : drop | .... ;
 dice   : D ;
 drop   : D ;
 NUM    : [0-9]+ ;
 D      : 'd'    ;

最新更新