0

Terence Parr 自己谈到 antlr3:“不幸的是,使用 ANTLR 构建标记器似乎仍然比使用传统的类 lex 方法更困难”。pygments 有几乎所有你能想到的语言的词法分析器:http: //pygments.org/languages/

有没有人尝试过将 pygments 词法分析器与 antlr python 目标一起使用?antlr2 有一个将 flex 与 cpp 目标一起使用的示例,不幸的是,antlr3 没有这样的示例。
我可以手写一个 antlr 解析器可以导入的 Grammarname.tokens 文件吗?当我使用 antlr 词法分析器时,有一堆匿名令牌,我可以删除它们吗?或者,可以修改 pygments 以接受 antlr .tokens 文件作为其令牌。pygments令牌流只需要实现antlr令牌流接口即可。

4

2 回答 2

1

纳文写道:

有没有人尝试过将 pygments 词法分析器与 antlr python 目标一起使用?

我对此表示怀疑。至少,我从未见过有人在 SO 或 ANTLR 邮件列表(我现在监控了很长一段时间)上提到这一点。

纳文写道:

我可以手写一个 antlr 解析器可以导入的 Grammarname.tokens 文件吗?

不,解析器需要一个Lexer对象的实例,它存在于(Python)运行时中。.tokens不应手动编辑文件。

纳文写道:

当我使用 antlr 词法分析器时,有一堆匿名令牌,我可以删除它们吗?

不太清楚你的意思,但删除任何生成的代码对我来说似乎是个坏主意。如果您指的是.tokens文件,正如我之前提到的:它不应该手动编辑。

我真的不会费心尝试将一些外部词法分析器语法或完整的词法分析器“粘合”到 ANTLR 中。我很确定这会让你有更多的时间来实现,而不是自己编写 ANTLR 词法分析器语法。毕竟:在大多数情况下,定义词法分析器规则是语言中最简单的部分。

于 2011-09-05T07:53:49.363 回答
0

这个其他 q/a 非常有帮助:带有手动词法分析器的 ANTLR Parser 还通读了 stax 和 jflex 片段: http ://www.antlr.org/wiki/display/ANTLR3/Interfacing+StAX+to+ANTLR http:// www.antlr.org/pipermail/antlr-interest/2007-October/023957.html

如果您从生成的解析器文件导入令牌类型,则令牌文件不是问题。不幸的是,我首先尝试解析 .tokens 文件并忘记将令牌类型转换为整数,这导致了长时间的错误追逐......

但是,我终于想通了:我想通了:http: //github.com/tinku99/antlr-pygments

于 2011-10-25T20:49:42.880 回答