我正在使用ANTLR创建一种深奥的语言,只是为了好玩。我希望语法只使用单词和字符,所以没有分号或括号等。
事情是,我也不想要数字。例如,我希望编码器输入twenty-four
而不是24
。
ANTLR是否支持此功能?我意识到我可以做一些像:
ONE = '1' ;
TWO = '2' ;
...
twenty-four = TWO FOUR;
等等。
由于数字是无限的(有点),这将变得有点单调乏味。有没有更好的方法可以在ANTLR中处理这个问题?
答案 0 :(得分:0)
如果您不想写任何数字,则必须编写涵盖所有数字的词法分析器规则,并在稍后的评估中(在听众或访问者中)将此报告为错误。 Lexer的规则就是这样的
ACTUAL_NUMBERS :[0-9]+;
其次,您必须编写代表“措辞”数字的所有词法规则。因此,您必须将@High Performance Mark在评论中写入的所有数字写入您的问题(我将引用once you've listed the names of all the digits, the names of the multiples of 10 from twenty to ninety, added in hundred, thousand, million and billion
),加上数字10,11和12.这样,使用解析器规则,您将拥有所有(几乎所有)数字。
语法会是这样的:
//same for billion, million
...
triples : (singles)? HUNDRED (for_singles)
for_triples : singles | TEN | doubles;
doubles: ELEVEN | TWELVE | (singles TEEN)
| (TWENTY singles) |
...
| (NINETY singles);
singles: ONE | TWO | ... | NINE;
ONE : 'one' | 'ONE';
//until 9
TEN : 'ten' | 'TEN';
//11, 12
TEEN : 'teen' | 'TEEN';
TWENTY : 'twenty' | 'TWENTY' ;
//until ninety
HUNDRED: 'hundred' | 'HUNDRED';
THOUSAND: 'THOUSAND' | 'thousand';
//million, billion