ANTLR语法模糊

时间:2016-06-18 10:10:33

标签: antlr antlr3

鉴于以下ANTLR 3语法:

statement1 : CHAR_KEYWORD;
statement2 : DIGIT_KEYWORD (COLON_KEYWORD DIGIT_KEYWORD)?;

COLON_KEYWORD : ':';
DIGIT_KEYWORD : '0'..'9';
CHAR_KEYWORD : 'a'..'z' | COLON_KEYWORD;

解析以下文字时:

1

规则 statement2 选择此文本。这很好。但是,如果现在有一个文本:

1:2

规则 statement2 不会选择此文本并出错。这是因为":"由CHAR_KEYWORD匹配,这不是规则的一部分。如果从CHAR_KEYWORD中删除COLON_KEYWORD,则规则 statement2 正常工作,但规则 statement1 现在不能按要求工作。如何重构这个语法,以便规则 statement1 statement2 按预期工作?谢谢!

1 个答案:

答案 0 :(得分:0)

从CHAR_KEYWORD中删除COLON_KEYWORD alt,而是将其作为alt添加到statement1。

statement1 : CHAR_KEYWORD | COLON_KEYWORD;
statement2 : DIGIT_KEYWORD (COLON_KEYWORD DIGIT_KEYWORD)?;

COLON_KEYWORD : ':';
DIGIT_KEYWORD : '0'..'9';
CHAR_KEYWORD : 'a'..'z';