Crowbar源码剖析:语法
Introduction 上回书说到,Crowbar的词法分析器将具体的源码文件解析为一串抽象的符号,并伴随着一系列附属动作。接下来轮到Crowbar的语法分析器登场了——它是如何解读这串符号的?解读的同时又做了些什么事情呢?我们一起来看看。 本篇有非常多杂七杂八的代码,看的时候一定要把握住最大的共同点——语法和数据结构的高度一致。很多代码都是相似的,把握住设计思想才是最关键的。 ...
Introduction 上回书说到,Crowbar的词法分析器将具体的源码文件解析为一串抽象的符号,并伴随着一系列附属动作。接下来轮到Crowbar的语法分析器登场了——它是如何解读这串符号的?解读的同时又做了些什么事情呢?我们一起来看看。 本篇有非常多杂七杂八的代码,看的时候一定要把握住最大的共同点——语法和数据结构的高度一致。很多代码都是相似的,把握住设计思想才是最关键的。 ...
Introduction 上回书说到,Crowbar用了Lex/Yacc这对经典工具来生成词法/语法分析器。它们具体的编写规则我不想细说,请参考这篇文章,但大致来讲,两者都是“一边匹配一边触发动作”。 本篇文章会集中讨论匹配触发了哪些动作,而不讲如何匹配、为什么匹配。 Crowbar-Lex 这部分讲述Lex如何对五花八门的字符作出不同反应,用<X>exp{action}表示“状态X下,与exp匹配时,执行action”。为了给Yacc传递符号的解析结果,双方约定了一种“通信方式”: ...
Introduction Crowbar是《自制编程语言》一书中作者自己构思的无类型语言。本书一边向读者讲述编程语言的基本要素,一边讲解具体的实现方法,可作为编译技术的入门材料。此外,书中还有一门叫做Diksam的静态类型语言,等我学完了再来写。不🐦,真的。 ...