多个Lexer规则中使用了相同的字符?

时间:2018-04-07 15:16:04

标签: antlr4

我(可能)有一个非常简单的问题。我正在编写一个ANTLR语法来评估骰子表达式。有了这个,我想解析像4d64d6d2这样的东西。第一个手段"滚动4个六面骰子"第二个意思是“滚动4个六面骰子”,一个是2个最低的骰子。我目前的语法是:

grammar Dice;
start : dice ; 

dice : NUMBER? DSEPERATOR NUMBER ( KEEP | DROP NUMBER )?;

KEEP : 'k';
DROP : 'd';
DSEPERATOR : [dD];
NUMBER : [0-9]+;
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines

我似乎对KEEPDSEPERATOR的定义有疑问,因为他们都使用字母d。解析器在NUMBER表达式中的第一个dice之后停止。这里的工作是什么?我的语法有什么变化?

1 个答案:

答案 0 :(得分:0)

正在解析的隐式结构是

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'    ;