我正在尝试使用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);
}
Run Code Online (Sandbox Code Playgroud)
抛出异常(如预期),因为"15:123"无效.如果我尝试("15:23a"),但没有异常被抛出,ANTLR将其视为有效输入.
现在,如果我在语法中定义字符,ANTLR似乎会注意到它们,我再一次得到我想要的异常:
CHAR: ('a'..'z')|('A'..'Z');
Run Code Online (Sandbox Code Playgroud)
但是如何排除用户可以输入的变音符号,符号和其他内容(äöü{%&<>!).所以基本上我正在寻找一种语法:匹配一切但是"0..9,: - "
...
所以基本上我正在寻找某种语法:匹配一切但是"0..9,:-"
以下规则匹配除数字之外的任何单个字符,,:和-:
Foo
: ~('0'..'9' | ',' | ':' | '-')
;
Run Code Online (Sandbox Code Playgroud)
(~否定词法规则中的单个字符)
但是你可能想要发表你的整个语法:我得到的印象是你应该做的其他一些你没有做过的事情.你的来电.
| 归档时间: |
|
| 查看次数: |
4498 次 |
| 最近记录: |