- 为了指定语法的语法,我们给出一种广泛使用的记法,叫做上下文无关文法或者BNF(Backus-Naur Form)。
- 有了这种记法,描述一种语言的语义要比语法难得多了。为了指定一种语言的语义,我们应该使用非形式化的描述和建议的范例
除了指定语言的语法,一个上下文无关文法可以用来帮助指导程序的翻译。一种面向文法的编译技术,叫做语法导向的翻译syntax-directed translation,对组织一个编译器前端是非常有帮助的,并且在本章中大量使用。
在讨论语法导向翻译的过程中,我们应该构造一个编译器,把中缀表达式转换为后缀形式,一种记法-其中操作符出现在操作数的后面。例如,中缀表达式9-5+2的后缀表达形式是95-2+。后缀表达式可以直接翻译成一种计算机的代码,这种计算机使用一个stack执行它的所有计算。
我们从构造一个简单的程序开始,把数字组成、加减号分开的表达式转换成后缀形式。基本的想法清楚以后,我们扩展程序处理更加通用的编程语言构造。我们的每个翻译器都通过扩展前一个得到。
在我们的编译器中,词法分析器把输入的字符流变成token流,然后变成下一阶段的输入,如Fig.2.1 所示

图中,syntax-directed translator 是一个语法分析器和一个中间代码生成器的组合。
从数字组成的表达式开始的原因是,词法分析可以很简单。每一个输入字符形成一个token.
后面我们会扩展语言包含词法构造例如数字、标识符和关键字。我们会为之构造一个词法分析器,收集连续的输入字符成为合适的token。
没有评论:
发表评论