使用pygments lexer和antl python目标

时间:2011-09-05 07:31:03

标签: antlr pygments

Terence Parr亲自谈到了antlr3:“不幸的是,使用ANTLR构建标记器似乎比使用传统的类似lex的方法更难”。对于几乎任何语言,pygments都有lexers,你可以想到:http://pygments.org/languages/

有没有人尝试过使用带有antlr python目标的pygments词法分析器? antlr2有一个使用flex与cpp目标的例子,遗憾的是antlr3没有这样的例子。
我可以手工编写一个antlr解析器可以导入的grammarname.tokens文件吗? 当我使用antlr lexer时,有一堆匿名标记,我可以删除它们吗? 或者,可以修改pygments以接受其令牌的antlr .tokens文件。 pygments令牌流只需要实现antlr令牌流接口。

2 个答案:

答案 0 :(得分:1)

  

Naveen写道:

     

有没有人尝试过使用带有antlr python目标的pygments lexer?

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

  

Naveen写道:

     

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

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

  

Naveen写道:

     

当我使用antlr lexer时,有一堆匿名标记,我可以删除它们吗?

不太清楚你的意思,但删除任何生成的代码对我来说似乎不太好。如果您正在引用.tokens文件,如前所述:它不应该手动编辑。

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

答案 1 :(得分:0)

这个其他q / a非常有帮助:ANTLR Parser with manual lexer 还阅读了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