如何在语法中编写类似Python的缩进语言?

时间:2013-03-20 19:11:29

标签: parsing

我正在编写一个带有类似Python的内置语言的工具。我想在语法中使缩进有意义(因此行开头的制表符和空格将表示命令的嵌套)。

这样做的最佳方式是什么?

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

3 个答案:

答案 0 :(得分:5)

当前CPython的解析器seems to be使用名为ASDL的内容生成。

关于您要求的缩进,it's done使用名为 INDENT DEDENT 的特殊词法分析器。要复制它,只需在你的词法分析器中实现这些标记(如果使用堆栈来存储先前缩进行的起始列,这很容易),然后像往常一样将它们插入到你的语法中(就像任何其他关键字或操作符令牌一样)

答案 1 :(得分:0)

查看python compiler,特别是compiler.parse

答案 2 :(得分:0)

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

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

  

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

     

PyPy发表了一篇关于lexing Python的有趣帖子(他们打算使用后处理词法分析器输出来解决它)

     

CPython的tokenizer是用C语言编写的。它是临时的,手写的,和   复杂。它是Python lexing的唯一官方实现   我知道。