如何定义解析器和词法分析器规则来解析使用缩进来定义范围的语言.
我已经google了一下,通过在词法分析器中生成INDENT和DEDENT令牌,找到了一种解析它的聪明方法.
如果我谈到一些有趣的东西,我会更深入地研究这个问题并发表答案,但我希望看到解决问题的其他方法.
编辑:正如查理指出的,如果不是相同的话,已经有另一个非常相似的线程.我的帖子应该被删除吗?
这是一种假设,因为它取决于你的词法分析器和解析器的技术,但最简单的方法似乎是让BEGINBLOCK和ENDBLOCK标记类似于C中的大括号.使用你的词法分析器所需的"越位规则"跟踪一堆压力水平.当缩进级别增加时,为解析器发出BEGINBLOCK; 当缩进级别减小时,从堆栈中发出ENDBLOCK和弹出级别.
这是关于SO 的另一个讨论,顺便说一下.