Terence Parr本人在谈到antlr3时说:“不幸的是,使用ANTLR构建标记器似乎仍然比使用传统的lex-like方法更难。”其中,as pygments拥有几乎所有你能想到的语言的词法分析器:http://pygments.org/languages/
有没有人尝试过将pygments lexer与antlr python目标一起使用?antlr2有一个将flex与cpp目标一起使用的示例,但不幸的是,antlr3没有这样的示例。
我可以手写一个antlr解析器可以导入的grammarname.tokens文件吗?当我使用antlr lexer时,有一堆匿名标记,我可以直接删除它们吗?或者,也许可以修改pygments以接受antlr .tokens文件作为其令牌。pygments令牌流只需要实现antlr令牌流接口。
发布于 2011-10-26 04:49:43
另一个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
发布于 2011-09-05 15:53:49
纳温写道:
有没有人尝试过将pygments lexer与antlr python目标一起使用?
我怀疑。至少,我从来没有见过任何人在这里提到这一点,或者在ANTLR邮件列表上(我现在已经监控了很长一段时间)。
纳温写道:
我可以手写一个antlr解析器可以导入的grammarname.tokens文件吗?
不是的。解析器需要一个Python对象的实例,该实例出现在( Lexer )运行时中。.tokens文件不应手动编辑。
纳温写道:
当我使用antlr lexer时,有一堆匿名标记,我可以直接删除它们吗?
我不太确定你的意思,但是删除任何生成的代码对我来说似乎是一个坏主意。如果你指的是.tokens文件,就像我之前提到的:它不应该被手工编辑。
我真的不会费心去“粘合”一些外部词法分析器语法,或完整的词法分析器到ANTLR中。我很确定这会让你花更多的时间来实现,而不是自己编写ANTLR词法分析器语法。毕竟:在大多数情况下,定义词法分析器规则是语言中最简单的部分。
https://stackoverflow.com/questions/7305043
复制相似问题