我正在寻找一种有趣的编程语言,但是我所看到的大多数资源都是用于编写无上下文的语言,但我希望编写一种像python一样使用缩进的语言,这对我的理解意味着它可以没有上下文.
简单地说,无上下文语法是一种不需要符号表以正确解析代码的语法.上下文敏感的语法可以.
D编程语言是无上下文语法的示例.C++是一个上下文敏感的.(例如,T*x声明x是指向T的指针,还是将T乘以x?我们只能通过在符号表中查找T来判断它是一个类型还是一个变量.)
空白与它无关.
D使用无上下文语法以大大简化解析它,因此简单的工具可以解析它(例如语法高亮编辑器).
您可能想要阅读这篇关于解析Python的相当精彩的文章,Python:关于缩进的神话.
虽然我没有尝试使用类似yacc的东西编写无上下文解析器,但我认为使用条件词法分析器可以返回缩进更改标记,如url中所述.
顺便说一句,这是来自python.org的官方python语法:http://www.python.org/doc/current/ref/grammar.txt
我首先要通过阅读有关该主题的一些文献来熟悉这个问题.Aho等人的经典编译器书.人.可能在数学和复合科学上很重要,但更可靠的文本是Jack Crenshaw 的Let's Build a Compiler文章.这是Crenshaw先生在80年代后期写的一系列文章,它是有史以来编写的最不受欢迎的文本.方法很简单,重点:克伦肖先生表示" A"方法很有效.你可以轻松地浏览几个晚上的内容,并对编译器的内容有更好的理解.有几点需要注意的是,文中的例子是用Turbo Pascal编写的.编译器发出68K汇编程序.这些示例很容易移植到更新的编程语言,我推荐Python.但是如果你想跟随示例,你将至少需要Turbo Pascal 5.5和68K汇编程序.和模拟器.该文本今天仍然具有相关性,使用这些旧技术非常有趣.我强烈推荐它作为任何人在编译器上的第一篇文章.好消息是像Python和Ruby这样的语言是开源的,你可以下载和研究C源代码,以便更好地理解它是如何完成的.