我正在编写一个带有类似Python的内置语言的工具。我想在语法中使缩进有意义(因此行开头的制表符和空格将表示命令的嵌套)。
这样做的最佳方式是什么?
之前我曾写过递归下降和有限自动机解析器。
答案 0 :(得分:5)
当前CPython的解析器seems to be使用名为ASDL的内容生成。
关于您要求的缩进,it's done使用名为 INDENT
和 DEDENT
的特殊词法分析器。要复制它,只需在你的词法分析器中实现这些标记(如果使用堆栈来存储先前缩进行的起始列,这很容易),然后像往常一样将它们插入到你的语法中(就像任何其他关键字或操作符令牌一样)
答案 1 :(得分:0)
答案 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的唯一官方实现 我知道。