gpt4 book ai didi

antlr - 如何使用 ANTLR 语法排除字符/符号?

转载 作者:行者123 更新时间:2023-12-05 00:06:26 27 4
gpt4 key购买 nike

我正在尝试使用 ANTLR 为各种时间格式(12:30、0945、1:30-2:45,...)编写语法。到目前为止,只要我不输入语法文件中未定义的字符,它就可以发挥作用。

例如,我正在使用以下 JUnit 测试:

    final CharStream stream = new ANTLRStringStream("12:40-1300,15:123-18:59");
final TimeGrammarLexer lexer = new TimeGrammarLexer(stream);
final CommonTokenStream tokenStream = new CommonTokenStream(lexer);
final TimeGrammarParser parser = new TimeGrammarParser(tokenStream);

try {
final timeGrammar_return tree = parser.timeGrammar();
fail();
} catch (final Exception e) {
assertNotNull(e);
}

抛出异常(如预期),因为“15:123”无效。
但是,如果我尝试 ("15:23a"),则不会抛出异常并且 ANTLR 将其视为有效输入。

现在,如果我在语法中定义字符,ANTLR 似乎注意到了它们,我又一次得到了我想要的异常:
  CHAR: ('a'..'z')|('A'..'Z');

但是我如何排除用户能够输入的变音符号、符号和其他内容 (äöü{%&<>!)。所以基本上我正在寻找某种语法,它说:匹配所有内容但“0..9,:-”

最佳答案

...
So basically I'm looking for some kind of syntax that says: match everything BUT "0..9,:-"



以下规则匹配除数字之外的任何单个字符, , , :- :
Foo
: ~('0'..'9' | ',' | ':' | '-')
;

( ~ 否定词法分析器规则中的单个字符)

但是您可能想要发布您的整个语法:我的印象是还有一些其他事情您没有做,因为它们应该做。您的来电。

关于antlr - 如何使用 ANTLR 语法排除字符/符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3211606/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com