给定文法 G[S]: S->(L)a L->L.S|S 如下是相应于G[S]的一个属性文法(或翻译模式):S->(L) S->a L->L1,S L->S (S.num:=L.num +1;) (S.num:-0;) (L.num:-Li.num+S.num;) (L.num:=S.num;) 图7.19 分别是输入串(a,(a))的语法分析树和对应的带标注语法树,但后者的属性值没有标出,试将其标出(即填写图 7.19 右图中符号一右边的值)。
时间: 2024-03-31 16:33:32 浏览: 55
带标注语法树中各节点的属性值如下:
S.num = 0
L.num = 1
对于每个节点,其属性值表示的是以该节点为根的子树对应的语法片段的属性值。在这个属性文法中,S.num 表示整个语法片段中括号对的数量,L.num 表示当前括号对中左括号的数量。因此,在输入串 (a,(a)) 的语法分析树对应的带标注语法树中,根节点 S 的 S.num 属性为 0,表示整个语法片段中括号对的数量为 0;而 L 的 L.num 属性为 1,表示当前括号对中左括号的数量为 1。
相关问题
给定以下文法: E ->E op E | ( E ) | int op ->+ | - | * | / int ->0 | 1 | ... | 9 判定该文法是否是二义性文法。给出至少两个理由。
该文法是二义性文法。
理由一:考虑表达式 "2 + 3 * 4",它可以有两种不同的解析方式:
1. E -> E + E -> int + E -> 2 + E -> 2 + E * E -> 2 + int * E -> 2 + 3 * E -> 2 + 3 * int -> 2 + 3 * 4
2. E -> E * E -> int * E -> 2 * E -> 2 * int + E -> 2 * 3 + E -> 2 * 3 + int -> 6 + int -> 6 + 4 -> 10
因此,该文法存在二义性。
理由二:考虑表达式 "2 - 3 + 4",它也可以有两种不同的解析方式:
1. E -> E - E -> int - E -> 2 - E -> 2 - E + E -> 2 - int + E -> 2 - 3 + E -> 2 - 3 + int -> -1 + int -> -1 + 4 -> 3
2. E -> E + E -> E + int -> E + 4 -> E - E + 4 -> int - E + 4 -> 2 - E + 4 -> 2 - int + 4 -> 2 - 3 + 4 -> -1 + 4 -> 3
因此,该文法存在二义性。
给定文法G[S]:S→(L)|A
这是一个文法,其中S是起始符号,→表示生成规则。该文法包括两个非终结符号,分别是S和L,以及一个终结符号“(”和一个自己定义的终结符号A。该文法的生成规则为:
1. S → (L)
2. S → A
其中,1表示在S的产生式中,将S替换为“(L)”,即“(”后面跟着一个L,再加上一个“)”,这就是一个完整的括号表达式;2表示在S的产生式中,将S替换为A,即生成一个A。