我必须生成CSV数据的解析器。不知怎的,我设法写了BNF,EBNF用于CSV数据,但我不知道如何将其转换为ANTLR语法(这是一个解析器生成器)。例如,在EBNF中我们写道:
[{header entry}newline]newline
但是当我在ANTLR中编写它以生成解析器时,它会给出错误而不是括号。我不是ANTLR的专家,任何人都可以帮忙吗?
答案 0 :(得分:6)
嗨,我必须生成CSV数据的解析器...
在大多数语言中,我知道,已经存在一个像样的第三方CSV解析器。所以,很有可能你正在重新发明轮子。
例如,在EBNF中,我们wrire [{header entry}换行符]换行符
ANTLR中的等价物如下所示:
((header entry)* newline)? newline
换句话说:
| (E)BNF | ANTLR
-----------------+--------+------
'a' zero or once | [a] | a?
'a' zero or more | {a} | a*
'a' once or more | a {a} | a+
请注意,您可以使用括号对子规则进行分组(子规则就是它们所称的):
'a' 'b'+
匹配:ab
,abb
,abbb
,...
,同时:
('a' 'b')+
匹配:ab
,abab
,ababab
,...