第三章 习题讲解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题讲解
消除文法的二义性
设置运算符的优先权
– 定义如下的简单表达式文法: exp -> exp addop exp | term addop -> + | term -> term mulop term | factor mulop -> * factor -> (exp) | id – 这样乘法被归在term规则下,而加减法被归在exp规则下,因此在分 析树和语法树中加减法将更接近于根,由此也就接受了更低一级的 优先权。 – 这样将算符放在不同的优先权级别中的办法是在语法说明中使用BNF 的一个标准方法,称为优先级联(precedence cascade)。
R->R’|’R | Term Term->Term Term|C C->C*|Factor Factor->(R)|a|b
3.21
3.22 3.23 3.24
3.41 一个C语言的文件如下,第四行的if误写成fi: 1 long gcd(p,q) 2 long p,q; 3 { 4 fi (p%q == 0) 5 return q; 6 else 7 return gcd(q, p%q); 8 } 基于LALR(1)方法的一个编译器的报错情况如下: parse error before ‘return’ ( line 5). 是否违反了LR分析的活前缀性质。(能及时发现错误,且不会 把出错点后面的符号移进分析栈 )
c) a和b的个数不相等的所有串
消除文法的二义性
如何让同级运算从左往右。
–可以将表达式文法改为
exp -> exp addop term | term
addop -> + |term -> term mulop factor | factor mulop -> * factor -> (exp) | id
这样就使得加法和ቤተ መጻሕፍቲ ባይዱ法左结合,而如果写成
exp -> term addop exp | term
这样的形式,则会使得它们右结合。
3.2 S->aSbS|bSaS|ε
S=>aSbS=>abSaSbS=>abaSbS=>absbS =>abab S=>aSbS=>aSbaSbS => abaSbS => ababS =>abab
3.4 R->R’|’R | RR|R*|(R)|a|b


为字母表{a,b}上的下列每个语言设计一个 文法。
a) 每个a后面至少有一个b跟随的所有串 b) a和b的个数相等的所有串 c) a和b的个数不相等的所有串
a) 每个a后面至少有一个b跟随的所有串
S abS|bS|
b) a和b的个数相等的所有串
S aB|bA| AaS|bAA BbS|aBB
相关文档
最新文档