Antlr4 解析日期
Antlr4 Parsing dates
我正在尝试使用以 C# 作为目标的 Antlr4 来解析日期。在我的案例中,有效日期应具有以下内容
- 采用
year / month / day
格式
- 年份必须只有 4 位数字
- 月份和日期必须只有 2 位数字
我知道这里已经有类似的问题,但他们的解决方案似乎对我不起作用
- Antlr: Simplest way to recognize dates and numbers?
我在某处读到过类似优先级的解析,其中首先评估基于语法文件编写方式的最顶层规则。所以考虑一下,除了日期之外,我的语法还应该能够解析整数。
我拥有并有效的语法(但它不遵循上述规则如下)
/*
* Parser Rules
*/
dateFormat : DECIMAL '/' DECIMAL '/' DECIMAL
;
/*
* Lexer Rules
*/
DECIMAL: DEC_DIGIT+;
fragment DEC_DIGIT: [0-9];
我试着放类似
的东西
YEAR or year : DEC_DIGIT DEC_DIGIT DEC_DIGIT DEC_DIGIT;
在词法分析器或解析器规则中都不起作用。
有什么想法/建议吗?
注意:请不要建议正则表达式的替代方案或争论我是否应该使用 Antlr。
我想这应该可行。 date
日期解析规则,integer
整数规则。
date
: year=FOUR_DIGITS SLASH month=TWO_DIGITS SLASH day=TWO_DIGITS
;
integer
: INTEGER
| FOUR_DIGITS
| TWO_DIGITS
;
FOUR_DIGITS: DIGIT DIGIT DIGIT DIGIT;
TWO_DIGITS: DIGIT DIGIT;
INTEGER: DIGIT+;
SLASH: '/';
fragment DIGIT: [0-9];
我正在尝试使用以 C# 作为目标的 Antlr4 来解析日期。在我的案例中,有效日期应具有以下内容
- 采用
year / month / day
格式 - 年份必须只有 4 位数字
- 月份和日期必须只有 2 位数字
我知道这里已经有类似的问题,但他们的解决方案似乎对我不起作用
- Antlr: Simplest way to recognize dates and numbers?
我在某处读到过类似优先级的解析,其中首先评估基于语法文件编写方式的最顶层规则。所以考虑一下,除了日期之外,我的语法还应该能够解析整数。
我拥有并有效的语法(但它不遵循上述规则如下)
/*
* Parser Rules
*/
dateFormat : DECIMAL '/' DECIMAL '/' DECIMAL
;
/*
* Lexer Rules
*/
DECIMAL: DEC_DIGIT+;
fragment DEC_DIGIT: [0-9];
我试着放类似
的东西YEAR or year : DEC_DIGIT DEC_DIGIT DEC_DIGIT DEC_DIGIT;
在词法分析器或解析器规则中都不起作用。
有什么想法/建议吗?
注意:请不要建议正则表达式的替代方案或争论我是否应该使用 Antlr。
我想这应该可行。 date
日期解析规则,integer
整数规则。
date
: year=FOUR_DIGITS SLASH month=TWO_DIGITS SLASH day=TWO_DIGITS
;
integer
: INTEGER
| FOUR_DIGITS
| TWO_DIGITS
;
FOUR_DIGITS: DIGIT DIGIT DIGIT DIGIT;
TWO_DIGITS: DIGIT DIGIT;
INTEGER: DIGIT+;
SLASH: '/';
fragment DIGIT: [0-9];