什么是语法定向翻译?

在语法导向翻译中,它可以与语法一起识别一些非正式的符号,这些符号称为语义规则。

执行语义分析后,源程序被修改为中间形式。

中间代码生成阶段需要一些信息来将经过语义检查的分析树转换为中间代码。但是这些信息或变量的属性不能单独用上下文无关语法来表示。

因此,一些语义动作必须附加上下文无关语法,这有助于中间代码生成阶段生成中间代码。

因此,将属性附加到上下文自由语法的变量并定义每个语法产生的语义动作(含义)称为语法定向翻译

它是一种符号,其中每个上下文无关语法的产生都与一组语义规则或动作相关,每个语法符号都与一组属性相关。因此,语法和语义动作组结合起来形成语法导向的定义。翻译可能是中间代码、目标代码的生成,或者在符号表中添加关于构造类型的信息。

Semantic Actions - 每当解析器识别由上下文无关语法生成的输入字符串时执行的操作。

例如,A → BC {语义动作}

语义动作写在花括号中,并附有产生式。

在 Top-Down Parser中,当扩展 A 以导出 BC 时将采取语义动作,BC 将进一步导出字符串 w。

在 Bottom-Up Parser中,当 BC 简化为 A 时会生成语义动作。

语义动作可以执行 -

  • 变量值的计算

S → S (1) + S (2)                                  {S. VAL = S (1)。VAL + S (2)。值}

这里 S.VAL 将计算 S (1)和 S (2)值的总和。

  • 打印错误信息

示例- A → BC {error ( ); }

每当 A 将扩展为 BC 时,将调用错误函数以打印错误消息。

语法导向的翻译方案是有益的,因为它允许编译器设计者直接根据源语言的语法结构来定义中间代码的生成。它分为两个子集,称为语法的综合属性和继承属性。

属性与语法符号相关,语法符号是解析树节点的标签。换句话说,属性是通过将属性附加到表示该结构的语法符号而与语言结构相关联的信息。属性可以描述任何(合理的)它可以选择字符串、数字、类型、内存位置、代码片段等的内容。

例如,标识符的属性可以包括名称、范围、类型、实际参数(参数个数)以及参数类型、返回类型等。解析树节点处的属性值由语义规则表示与在该节点应用的生产相关。