从词法分析器/解析器语法生成作品

时间:2017-07-12 11:17:20

标签: java antlr antlr4

有没有办法从给定的语法生成(所有可能的)句子?

我们说我有语法:

grammar Drink;

//Parser Rules
drinkSentence : ARTICLE? DRINKING_VESSEL OF drink ;
drink : TEXT;

// Lexer Rules
ARTICLE : 'the' | 'an' | 'a' ;
OF : 'of' ;
DRINKING_VESSEL : 'cup' | 'pint' | 'shot' | 'mug' | 'glass' ;
TEXT : ('a'..'z')+ ;
WHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ -> skip ;

是否有可能从中产生所有可能的饮酒量?我明白,例如TEXT有很多可能的组合,但例如,我们说它只能包含大约4个字母。

2 个答案:

答案 0 :(得分:1)

不,任何内置的ANTLR功能都无法实现这一点。

答案 1 :(得分:0)

这当然可行,但你必须编写一个能够完成工作的工具。据我所知,没有现成的工具。一种可能的方法是遍历生成的ATN并从中构建可能的输入。

然而,我想知道你需要这样一台发电机。是否要为解析器创建测试输入?如果是这样,你应该再次考虑这个想法。您的解析器将始终根据为其创建的语法成功解析正确的输入(假设此处没有ANTLR4错误)。那么如何使用始终正确的输入来测试始终正确工作的解析器呢?