title: 如何用Yacc实现一个Python的编译器？
desc: YACC for ansi C 的文法在很多地方都可以找到了。为什么没有Python的？如何把Python源代码中的grammar编译成yacc的？
topic: Python
content: 理论上是可以的，关键点在于您要在Lexer和Parser之间要多加一层，用于分析哪些地方是进入缩进，哪些地方是退出缩进。然后匹配到缩进的时候插入INDENT和DEDENT这样的Token。至于分析的方法，您可以先建一个Stack来存放每一层缩进块的Token， 然后根据Lexer送来的Token中的行号列号等信息来和Stack栈顶的数据进行对比， 判断下来是该进入缩进的就push一个INDENT，并这个INDENT插入到输出的Token流中。发现是Stack中旧的Token匹
answerer_tags: 研发主管