gpt4 book ai didi

antlr4语法-如何匹配EOF/NL

转载 作者:行者123 更新时间:2023-12-01 13:39:48 25 4
gpt4 key购买 nike

我如何匹配最后一行没有换行符的文件结尾。当我使用注释行 (w/EOF) 时,解析器进入什么看起来像一个无限循环(即挂起)。

这是一个语法——大部分是从 tparr 的作品中借来的

grammar csv;

prog : row+ ;
row : field (',' field)* NL;
// row : field (',' field)* (NL|EOF); // doesn't work

field : STR | QSTR | ; // field can be empty

STR : ~[\n,"]+ ;
QSTR : Q (QQ|~'"')* Q ;
NL : '\n';

fragment QQ : '""' ;
fragment Q : '"' ;

这里是对应的数据文件。

Details,Month,Amount
Mid Bonus,June,"$2,000"
,January,"""zippo"""
Total Bonuses,"","$5,000"<EOF is on the same line>

最佳答案

解析器进入无限循环,因为您的 rule 行(包含 EOF 的变体)可以匹配末尾的空输入字符串:

  • 字段可以匹配空串
  • (',' field)* 显然可以匹配空串,因为*量词
  • EOF token 不能被消耗(即它出现无限次),因此它可以匹配多次。

与其将行视为以换行符结尾,不如将换行符视为行分隔符:

prog : row (NL row)* EOF;
row : field (',' field)*;

那是未经测试的,但应该可以正常工作。

关于antlr4语法-如何匹配EOF/NL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41251735/

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