5

我正在用它自己的类似于 Python 的内置语言编写一个工具。我想让缩进在语法中有意义(这样行首的制表符和空格将代表命令的嵌套)。

做这个的最好方式是什么?

我以前写过递归下降和有限自动机解析器。

4

3 回答 3

5

当前CPython的解析器似乎是使用称为ASDL的东西生成的。

关于您要求的缩进,它是INDENT使用称为and的特殊词法分析器标记完成的DEDENT。要复制它,只需在您的词法分析器中实现这些标记(如果您使用堆栈来存储先前缩进行的起始列,这非常容易),然后像往常一样将它们插入到您的语法中(就像任何其他关键字或运算符标记一样) .

于 2013-03-20T19:24:56.093 回答
0

查看python 编译器,特别是compiler.parse.

于 2013-03-20T19:16:10.950 回答
0

我建议将 ANTLR 用于任何词法分析器/解析器生成(http://www.antlr.org)。

此外,该网站(http://erezsh.wordpress.com/2008/07/12/python-parsing-1-lexing/)有更多信息,特别是:

Python 的缩进不能用 DFA 解决。(我仍然对它是否可以用上下文无关语法来解决感到困惑)。

PyPy 发表了一篇关于对 Python 进行词法分析的有趣文章(他们打算通过对词法分析器输出进行后处理来解决它)

CPython 的分词器是用 C 编写的。它是临时的、手写的和复杂的。这是我所知道的唯一官方的 Python 词法实现。

于 2013-03-20T19:16:36.680 回答