什么是语法制导翻译?\n


在语法制导翻译中,除了语法之外,它还可以识别一些非正式的表示法,这些表示法被称为语义规则。

在实现语义分析后,源程序被修改为中间形式。

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

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

因此,将属性附加到上下文无关文法的变量并定义每个语法产生式的语义动作(含义)称为**语法制导翻译**。

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

**语义动作** - 它是当解析器识别由上下文无关文法生成的输入字符串时执行的操作。

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

语义动作用花括号括起来,附加到产生式上。

**在自顶向下解析器中**,当 A 展开推导出 BC,BC 进一步推导出字符串 w 时,将执行语义动作。

**在自底向上解析器中**,当 BC 还原为 A 时,生成语义动作。

语义动作可以执行 -

  • 计算变量的值

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

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

  • 打印错误消息

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

每当 A 展开为 BC 时,都会调用错误函数来打印错误消息。

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

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

例如,标识符的属性可以包括名称、作用域、类型、实际参数(参数数量)和参数类型、返回类型等。语法树节点中属性的值由与应用于该节点的产生式相关的语义规则表示。

更新于: 2021-11-03

7K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告