导航:首页 > 源码编译 > 编译原理前缀后缀集合

编译原理前缀后缀集合

发布时间:2022-08-08 00:15:53

A. 编译原理转化为后缀表达式怎么计算

比如a+b*(c+d/e)怎么转化为后缀表达式就成了abcde/+*+?
1:d/e -> de/
2: c + de/ -> cde/+
3: b * (cde/+) -> bcde/+*
4: a + bcde/+* -> abcde/+*+
其实就一个原则:先输出符号左边的, 然后输出符号右边的, 最后输出符号。

B. 表达式求值 (栈的应用)前中后缀

表达式的分析与求值是编译原理课程中极其重要的部分,主要用于最初的词法分析。其表示方式有:前缀、中缀、后缀表示法。其数据结构可以使用一个堆栈来表示。具体的实现代码,我以前使用的书籍是《C语言大全》,那上面就有完整的代码,你可以参考。但是由于我已经很久没有编写编译原理方面的程序了,所以我也无法亲自给你编写一个完整表达式分析求值的程序。只能够给你提供一些思路和线索。

C. 为什么要采用中间代码中间代码有哪几种形式(编译原理)

采用中间代码是把源程序映射成中间代码表示,再映射成目标代码的工作分在几个阶段进行,使编译算法更加清晰。中间代码有四种形式:

1、逆波兰表示

逆波兰表示又称后缀表示法,它是最简单的一种中间代码表示形式,早在编译程序出现之前,它就用于表示算术表达式。

2、四元式

四元式也是一种比较普遍采用的中间代码形式,

其形式为:(OP,ARG1,ARG2,RESULT)

3、三元式

三元式表示是与四元式类似的一种表示法,所不同的仅是三元式中没有表示运算结果的部分,凡要涉及到运算结果的均用三元式的位置或序号来代替。

4、树表示

树形表示是三元式的翻版。在树的表示中,树叶均为运算对象,即常量或变量,其他结点表示运算符。表达式的树形表示很容易实现:简单变量或常量的树就是该变量或常量自身。

(3)编译原理前缀后缀集合扩展阅读

中间语言的优点:

1、中间语言与具体机器特性无关,一种中间语言可以为生成多种不同型号的目标机的目标代码服务。

2、可对中间语言进行与机器无关的优化,有利于提高目标代码的质量。

对于中间语言,要求其不但与机器无关,而且有利于代码生成。

D. 编译原理写出表达式-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为右结点,"+"为根,左子树为刚才得到的树。 该树后序遍历即得。

E. 编译原理:构造表示“标识符”的正则表达式标识符定义:以字母开头的字母数字串,标识符可以有后缀,

^([A-Za-z]\w*)([.]([A-Za-z]\w*))*$

不知理解得对不对
比如
(java).(util).(Locale)
java util Locale三组都是以字母开头,后接单词字符(即[A-Za-z0-9_]的缩写\w)的表达式

F. 编译原理描述文法所有可行前缀

空 •0s1 0•s1 0s•1 0s1• •01 0•1 01•

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

活前缀:右句型的前缀,而且其右端不会超过该句型的最右边句柄的末端。
右句型:最右推导可得到的句型。
最右推导:每步推导都替代最右非终结符的推导。
推导:我们说α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:至于为什么要给出活前缀的定义和如何用归约的方法实现语法分析,还要进一步学习。

H. 数据结构后缀表达式

提醒一下楼主,这个是问题编译原理的范畴。a/(b-c)+d*e

I. 编译原理 活前缀问题

不含句柄之后字符的前缀都是活前缀,a在句柄之前,当然是。

J. 编译原理 后缀式与中缀式的转换

程序求的话,当然是设栈,可是“栈”这玩意是计算机的思维模式,咱们人类要在脑子里维护个栈,那个智商要求是比较高的,以本人比较低的智商来说是相当的困难。
所以,曲线救国:把前、后缀式转换成中缀式,中缀式求值参照上面一条。

阅读全文

与编译原理前缀后缀集合相关的资料

热点内容
怎么运行cmd命令行 浏览:366
php中类的继承 浏览:228
openvpnlinux安装配置 浏览:463
PHP7从入门到精通 浏览:27
单片机生日 浏览:500
linux当前进程号 浏览:728
老死pdf 浏览:25
云服务器关机网址不见了 浏览:69
余冠英pdf 浏览:755
开发一个app上市需要什么步骤 浏览:28
phpsleep方法 浏览:430
时间同步服务器ip地址6 浏览:926
钢琴谱pdf下载 浏览:524
香港阿里云服务器怎么封udp 浏览:875
APp买海鲜到哪里 浏览:501
辽油社保app总提示更新怎么办 浏览:586
导入源码教程视频 浏览:613
天翼贷app在哪里下载 浏览:186
app开发源码查看器 浏览:516
程序员发展到了一个瓶颈 浏览:120