4.1 引言和预备知识 一个程序设计语言是一个记号系统,如同自然语言一样,它的完整的定义应包括语法和语义两个方面。所谓一个语言的语法是指一组规则,用它可以形成和产生一个合适的程序。目前广泛使用的手段是上下文无关文法,即用上下文无关文法作为程序设计语言语法的描述工具。语法只是定义什么样的符号序列是合法的,与这些符号的含义毫无关系,比如对于一个PASCAL程序来说,一个上下文无关文法可以定义A∶=B+C是合乎语法的,而A∶=B+是不合乎语法的。但是,如果B是实型的,而C是布尔型的,或者B,C中任何一个变量没有事先说明,则A∶=B+C仍不是正确的程序,也就是说程序结构上的这种特点,类型匹配,变量作用域等是无法用上下文无关手段检查的,这些工作属于语义分析工作。我们常常把程序设计语言的语义分为两类:静态语义和动态语义。静态语义是一系列限定规则,并确定哪些合乎语法的程序是合适的;动态语义也称作运行语义或执行语义,表明程序要做些什么,要计算什么。 阐明语法的一个工具是文法,这是形式语言理论的基本概念之一。本章将介绍文法和语言的概念,重点讨论上下文无关文法及其句型分析中的有关问题。 |