2009-11-14 103 views

回答

6

Lex通常只用于标记,而不是完整的解析。使用flex/lex进行标记化的项目通常使用yacc/bison进行实际解析。

你可能想看看ANTLR,这是一个更“现代”的替代lexx & yacc。

的ANTLR项目有a Github repo containing many ANTLR 4 grammars包括至少one for Python 3

+0

所以这会同时扫描和解析?太棒了,我听说过这个,但不确定它是多么成熟。除了吐出C代码之外,你知道它和Objective-C的搭配有多好吗?生成图表的任何选项(如铁路图或有限状态机图)? – pokstad 2009-11-14 01:03:42

+0

是的,ANTLR同时进行扫描和解析。自从我上次使用它以来已经有一段时间了,但我记得喜欢扫描和解析语法非常相似的事实。它显然甚至有对Objective-C的明确支持(除了C,C++,Java,C#和Python)。我从来没有使用它,但你可能想尝试ANTLRWorks(http://antlr.org/works/index.html)的图表。 – 2009-11-14 01:32:44

+0

我会给它一个镜头,谢谢! – pokstad 2009-11-14 02:50:22

3

grammar.txt是官方的,完整的Python语法 - 不是直接lex兼容,但你应该能够将它按摩到合适的形式。

+0

我已经看到了,但我注意到它与我所见过的lex语法有很大不同。我并不偏向flex/lex,只是寻找一些适用于语法分析器的东西。你有使用该语法文件的词法分析器的建议吗? – pokstad 2009-11-14 00:57:54

0

你有没有考虑过使用现有的代码荧光笔之一,像Pygments

+0

这将解决第一个问题,但对其他转换没有太大帮助。 – 2009-11-14 00:41:02

+0

代码突出显示是不够的,因为我需要为兼容的语法分析器生成输出。 – pokstad 2009-11-14 01:00:09