Jak*_*kob 10 antlr bnf context-free-grammar
是否有任何工具可以将ANTLR语法语法转换为其他BNF语法?Backus-Naur形式(BNF,EBNF,ABNF,W3C-BNF,XBNF ......)有几种形式,有规格,例如见此列表.ANTLR语法语法似乎只是通过示例来描述.我知道ANTLR语法文件包含的不仅仅是无上下文语法的规范,但你应该能够至少转换公共子集 - 有人自动完成吗?
# Grammar Syntax
| | BNF | ISO EBNF | ABNF | ANTLR |
|:-----------------------------:|:-----------------------------:|:-----------------------------:|:-----------------------------:|:-----------------------------:|
| rule definition | `<name> ::= ...` | `name = ... ;` | `name = ...` | `name : ... ;` |
| terminal items | `...` | `'...'` or `"..."` | integer or `"..."` | `'...'` |
| non-terminal items | `<...>` | `...` | `...` or `<...>` | `...` |
| concatenation | (space) | `,` | (space) | (space) |
| choice | `|` | `|` | `/` | `|` |
| optional | requires choice syntax[^1] | `[...]` | `*1...` or `[...]` | `...?` |
| 0 or more repititions | requires choice syntax[^2] | `{...}` | `*...` | `...*` |
| 1 or more repititions | requires choice syntax[^3] | `{...}-` | `1*...` | `...+` |
| n repititions | | `n*...` | `n*n...` | |
| n to m repititions | | | `n*m...` | |
| grouping | | `(...)` | `(...)` | `(...)` |
| comment | | `(*...*)` | `;...` | `// ...` or `/* ... */` |
[^1]: `optionalb ::= a b c d | a c d`
[^2]: `list ::= | listitem list`
[^3]: `list ::= listitem | listitem list`
Run Code Online (Sandbox Code Playgroud)
雅各布写道:
ANTLR语法似乎只是通过示例来描述。
ANTLR (v3) 是“用它自己的话”(正如特伦斯·帕尔本人所说)用以下语法编写的:
http://www.antlr.org/grammar/ANTLR/ANTLRv3.g
雅各布写道:
但你应该至少能够转换公共子集 - 有人自动完成吗?
从来没听说过。如果它确实存在,我也从未在我定期阅读的 ANTLR 邮件列表上看到过讨论这个工具。
另请注意,许多 BNF 变体允许左递归规则,这是像 ANTLR 这样的 LL 解析器生成器无法处理的。左递归规则当然可以由该工具重新分解,但这可能相当棘手,并且可能会导致比手动执行此操作所得到的语法“可读”得多。
至于将 ANTLR 语法转换为类似 BNF 的形式,我想会更容易,尽管只是使用最简单的语法。一旦将各种类型的谓词放入 ANTLR 语法中,转换可能会再次变得棘手。
| 归档时间: |
|
| 查看次数: |
3214 次 |
| 最近记录: |