语法制导定义(SDD)

语义分析的概念

语义分析用于检查程序是否符合语言的语义规则,比如类型规则、变量使用规则、函数调用规则、属性访问规则等。语法分析不能检查语义,因为语法分析基于CFG(Context-Free Grammar)上下文无关文法,而语义分析需要和语法元素的上下文密切相关

同时语义分析对于程序中的构造(函数定义、语句、表达式等)根据其对应的CFG文法结构赋予其语义,检查语义是否符合语言的规则

我们可以使用CFG引导语义的分析:CFG的非终结符号代表了语言的某个构造,程序设计语言可以由更小的构造组合而成。一个构造的语义可以由小构造的含义综合而来也可以从附近的构造继承而来

语法制导的定义

Syntax- Directed Definition(SDD)是上下文无关文法属性/规则的组合:

  • 属性和文法符号相关联,按照需要来确定各个文法符号需要哪些属性

  • 规则和产生式相关联

定义:对于文法符号X和属性a,我们使用X.a表示分析树中某个标号为X的结点的值定义:对于文法符号X和属性a,我们使用X.a表示分析树中某个标号为X的结点的值

一个分析树结点和它的分支对应一个产生式规则,而对应的语义规则确定了这些结点上属性的取值和计算。基于SDD,我们可以在一个程序的分析树上进行语义信息的计算

一个SDD的例子

Last updated