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

发布于 2024-09-08 19:08:37 字数 225 浏览 11 评论 0原文

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

[{header entry}newline]newline

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

I have to generate parser of CSV data. Somehow I managed to write BNF, EBNF for CSV data but I don't know how to convert this into an ANTLR grammar (which is a parser generator). For example, in EBNF we write:

[{header entry}newline]newline

but when I write this in ANTLR to generate a parser, it's giving an error and not taking brackets. I am not expert in ANTLR can anyone help?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

乖乖 2024-09-15 19:08:37

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

在我知道的大多数语言中,已经存在一个不错的第三方 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, ..., while:

('a' 'b')+

匹配:abababababab...

hi , i have to generate parser of CSV data ...

In most languages I know, there already exists a decent 3rd party CSV parser. So, chances are that you're reinventing the wheel.

For Example in EBNF we wrire [{header entry}newline]newline

The equivalent in ANTLR would look like this:

((header entry)* newline)? newline

In other words:

                 | (E)BNF | ANTLR
-----------------+--------+------
'a' zero or once | [a]    | a?
'a' zero or more | {a}    | a*
'a' once or more | a {a}  | a+

Note that you can group rules by using parenthesis (sub-rules is what they're called):

'a' 'b'+

matches: ab, abb, abbb, ..., while:

('a' 'b')+

matches: ab, abab, ababab, ...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文