ANTLR,如何在ANTLR中转换BNF,EBNF数据?

时间:2010-07-12 17:11:19

标签: antlr bnf ebnf

我必须生成CSV数据的解析器。不知怎的,我设法写了BNF,EBNF用于CSV数据,但我不知道如何将其转换为ANTLR语法(这是一个解析器生成器)。例如,在EBNF中我们写道:

[{header entry}newline]newline

但是当我在ANTLR中编写它以生成解析器时,它会给出错误而不是括号。我不是ANTLR的专家,任何人都可以帮忙吗?

1 个答案:

答案 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'+

匹配:ababbabbb...,同时:

('a' 'b')+

匹配:abababababab...