A. 编译原理及编译程序构造课后习题答案 薛联凤
您好,《普通高校计算机专业精品教材系列:编译原理及编译程序构造(第2版)》介绍编译理论基础及其实现方法,强调语言的形式化定义、编译技术的各种概念及实现过程的具体方法。介绍过程以算法为核心,力求简单明了地反映编译的基础知识。从形式语言理论角度讨论词法分析和语法分析技术,为计算机软件工作者开发大型软件打下良好基础。《普通高校计算机专业精品教材系列:编译原理及编译程序构造(第2版)》以理论联系实际为宗旨,内容深入浅出,重点突出,并结合构造el语言的编译程序介绍一种常用而又简单的编译方法。
B. 高分。。什么叫左结合,什么叫右结合
左结合性:意思是从左向右执行运算;
右结合性:意思是从右向左执行运算。
例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。这种自左至右的结合 方向就称为“左结合性”。
而自右至左的结合方向称为“右结合性”。最典型的右结合 性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算。
(2)编译原理中右结合扩展阅读:
C语言中,运算符的运算优先级共分为15 级。1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。
优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。
所有的优先级中,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。其它的都是从左至右结合。
C. 左结合和右结合的问题~和编译原理有关
B与第一个*结合:用编译原理的运算符的结合性来解释的话,就是假设*是左结合的。当运算分量(本例中是B)两侧都有运算符(本例中是*)的时候,采用左结合。即B与B左边的*结合。
eg: L —>A*B*C 先计算 A*B 然后计算(A*B)*C。
不知道你懂么??
D. 关于编译原理中的最右推导问题。题目如下:
大写A应该是最右边的非终结符号,S怎么是最右非终结符号?最右推导是将最右边的非终结符号替换
E. 编译原理服从左结合
1+2+3+4
比如所这个
就是
先1+2
然后3+3
然后6+4
F. 编译原理中,在文法G中,E'的follow集为什么会含有右括号,题和答案如图,求解答
这个问题中的一个产生式E’→+TE’| e,应该是E->+TE’ |ε这样吧!否则不可能获得如此结果.
关于求follow集合,龙书中说得很清楚,依据三条规则即可:
1、任何FOLLOW(S)都包含输入终止符号,其中S是开始符号.
适用该条,因此FOLLOW(E’)中包含终止符号#.
2、如果存在产生式,A->αBβ,则将FIRST(β)中除ε以外的符号都放入FOLLOW(B)中.
该条不适用,因为在上述所有产生式中不存在形如E‘->αE’β这样的产生式.
3、如果存在产生式,A->αB,或A->αBβ,其中FIRST(β)中包含ε,则将FOLLOW(A)中的所有符号都放入FOLLOW(B)中.
适用该条,因为存在这样的产生式E->+TE’,使得FOLLOW(E’)=FOLLOW(E)成立.而FOLLOW(E)适用上述第二条,根据产生式F→(E)可求得为FOLLOW(E)={#,)}.
综上,FOLLOW(E’)=FOLLOW(E)={#,)}.
G. 编译原理中的文法的产生式的括号有什么用
不会就别瞎扯误导别人。。。有括号是因为这个是中缀表达式,中缀表达式需要括号来表达正确的计算顺序,如果是前缀表达式的话就可以没有括号这个推导。
H. 编译原理 如何通过一个普通文法得出一个右线性文法 是看出来的吗
哈哈,还不就是看出来的吗,最后三个都是右线性文法。你这个问题问的超级呆萌,哈哈,你真可爱!
I. 编译原理写出表达式-a-(b*c/(c-d)+(-b)*a)的前缀式和后缀式。
abcde/+*+ 画一个运算树 先算的d/e根为"/",子结点为d,e 然后算c+d/e,根为“+”,左右子结点为e和上面的子树 b*(c+d/e)根为"*",作子树为b,右子树为(c+d/e)的树 最后a为右结点,"+"为根,左子树为刚才得到的树。 该树后序遍历即得。