我想在ANTLR4中构建一个自然语言日期解析器,并被卡在忽略“噪声”输入上。下面的简化语法分析包含格式日期月份有效日期的任何字符串:忽略ANTLR4中的“噪声”
dates
: simple_date dates
| EOF
;
simple_date
: DATE MONTH
;
DATE : [0-9][0-9]?;
MONTH : January | February | March // etc.;
文字,如“1年1月22日”将被接受。我想语法接受其他文字一样,所以我在结尾加上ANY : . -> skip;
:
dates
: simple_date dates
| EOF
;
simple_date
: DATE MONTH
;
DATE : [0-9][0-9]?;
MONTH : January | February | March // etc.;
ANY : . -> skip;
这并不完全做我想做的,但是。虽然诸如“1月1日和2月22日”这样的字符串被接受并且simple_date
规则匹配两次,但字符串“On 1XX January”也将匹配规则。
问题:如何建立在这种规则只与确切令牌序列相匹配的语法,而忽略其他所有输入,包括在任何规则没有定义的命令令牌?考虑以下情况:
"From 1 January to 2 February" -> simple_date matches "1 January" and "2 February"
"From 1XX January to 2 February" -> simple_date matches "2 February", rest is ignored
"From January to February" -> no match, everything ignored
你需要发布一个工作语法。你的语法如何匹配“2月22日2月”?有些规则应该使用未显示的+或*运算符。 – JavaMan
对不起,在语法中出现了一个错字 - 我已经在顶级规则中将'date'更改为'dates',以使其按照描述工作。 – David