导航:首页 > 源码编译 > 编译原理前缀后缀定义

编译原理前缀后缀定义

发布时间:2025-09-09 12:59:49

⑴ 什么叫活前缀,用通俗的话解答下,或者简单的例子。 这个题是编译原理的。

活前缀:右句型的前缀,而且其右端不会超过该句型的最右边句柄的末端。
右句型:最右推导可得到的句型。
最右推导:每步推导都替代最右非终结符的推导。
推导:我们说αBγ推导出αβγ,是说存在产生式B->β。
产生式:左边为非终结符,右边为终结符与非终结符组合成的串。
非终结符:是字符串的集合。
终结符:组成语言的词。如c语言中的2,a,int,if等。
句型:开始符经过若干步推导后得到的串。
前缀:如abc的前缀为a、ab、abc。
开始符:开始符是整个语言的集合。
句柄:非形式的,句柄是和某个产生式右部匹配的字符串,把句柄归约成产生式左部的非终结符,可以得到最右推导的逆过程的一步。形式的定义为:开始符s经过若干步最右推导得到αBγ,αBγ经过一步最右推导得到αβγ,若γ为终结符的集合,则β为句柄。举例:
E->E+E|E*E|-E|(E)|id,对于id+id*id,其中一个最右推导为E->E+E->E+E*E->E+E*id->E+id*id->id+id*id。在id+id*id归约成E+id*id的过程中,最左边的id是句柄。E+id*id归约成E+E*id时,最左边的id是句柄,把E+E*id归约成E+E*E时,id是句柄。把E+E*E归约成E+E时E*E是句柄。E+E归约成E时,E+E是句柄。
归约:可理解为把产生式右边的串用产生式左边的非终结符代替。
注1:再说一下活前缀,举个例子,比如E+E*E归约成E+E,句柄是E*E,那么它的活前缀就是E、E+、E+E、E+E*、E+E*E。又比如id+id*id归约成E+id*id,句柄是最左边的id,那么它的活前缀是id,因为不能超过句柄。
注2:至于为什么要给出活前缀的定义和如何用归约的方法实现语法分析,还要进一步学习。

⑵ 编译原理 正则语言 二义文法 急~

这个没有一个好老师,自己咬文嚼字看懂是很累的
二义性文法

【定义】 若文法中存在这样的句型,它具有两棵不同的语法树,则称该文法是二义性文法。

二义性文法会引起歧义,应尽量避免之!
G(E):E -> E+E | E*E | (E) | i
这两种展开
E E
E + E E * E
i E * E E + E i
i i i i

都可以表示i+i*i

所以;文法具有二义性。

⑶ 编译原理中的文法的产生式的括号有什么用

不会就别瞎扯误导别人。。。有括号是因为这个是中缀表达式,中缀表达式需要括号来表达正确的计算顺序,如果是前缀表达式的话就可以没有括号这个推导。

⑷ 栈的应用举例:数制转换,表达式求值

关于表达式的分析与求值是计算机软件专业中“编译原理”课程极其重要的部分,主要用于最初的词法分析。其表示方式有:前缀、中缀、后缀表示法。其数据结构可以使用一个堆栈来表示。具体的实现代码,我以前使用的书籍是《C语言大全》,那上面就有完整的、现成的代码,可以供你参考运行。同时你还可以参考《编译原理》相关的教材。
但是由于我已经很久没有编写编译原理方面的程序了,况且编写并亲自调试通过该程序,难度还是比较大的。所以我也无法亲自给你编写一个完整表达式分析与求值的程序。只能够给你提供一些思路和线索。
另外,关于不同数制之间的转换问题,这个倒是不难解决,可以采用通常的算法就是短除法,然后将每一次的余数采取“倒排”即可。例如:将十进制的 15 转换为二进制。
2|15(1
--
2|7(1
-
2|3(1
-
2|1(1

-
0
则十进制的 15 为二进制的:1111。

阅读全文

与编译原理前缀后缀定义相关的资料

热点内容
程序员系列大全 浏览:359
安卓怎么用文件升级 浏览:658
如何发展mc服务器 浏览:160
安卓手机拍照是反的如何正过来 浏览:619
服务器怎么外接机械硬盘 浏览:84
如何输入代理服务器和端口 浏览:674
排序算法的实现的总结 浏览:17
重庆活塞并联压缩机哪里买 浏览:516
中信银行信用卡app叫什么名字图片 浏览:15
php指定ip访问 浏览:45
n1盒子编译openwrt 浏览:957
android不混淆库 浏览:622
酷程序员头像 浏览:808
短视频平台服务器怎么选 浏览:74
怎么分辨瑞年和平年的C语言编译 浏览:217
黑马程序员vue教程第32讲 浏览:761
为什么服务器拷贝速度百兆 浏览:651
月薪过万的程序员多久能在北上广 浏览:982
妈妈看中程序员相亲 浏览:381
服务器配置不了ip地址怎么办 浏览:878