4

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

[{header entry}newline]newline

但是当我在 ANTLR 中编写它来生成解析器时,它给出了一个错误并且不带括号。我不是ANTLR专家,有人可以帮忙吗?

4

1 回答 1

6

嗨,我必须生成 CSV 数据的解析器...

在我知道的大多数语言中,已经存在一个不错的 3rd 方 CSV 解析器。因此,您很有可能正在重新发明轮子。

例如在 EBNF 我们写 [{header entry}newline]newline

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,...

于 2010-07-12T17:49:58.617 回答