赋值语句翻译
编译原理(4)语义_2(表达式及赋值语句的翻译)
表达式,当扫描到“a∨”或“a ∧”之后就立即可以进行规约, 不用去关系b的取值。
4.4
表达式及赋值语句的翻译
5、解决“真”、“假”出口问题的方法:拉链和回填
(1) 拉链:在同一个表达式内,当前i号四元式产生的时候, 强制其出口为0,若j号(j>i)四元式和它出口相同,用i去 填充 j 号四元式的(result),从而将不同的四元式链接起
表达式及赋值语句的翻译
4.4.2 布尔表达式的翻译
1、布尔表达式的组成
布尔表达式:由运算符与运算对象组成。
定义布尔变量
A、B、C、D
A = bop1 B bop2 C bop3 D
(1)运算符:非┐(单目)、与∧ (双目)、或∨ (双目) 注意:1、优先级: ┐ ⋗ ∧ ⋗ ∨
2、∧和∨分别服从左结合
赋值语句的四元式中间代码:
(1)(*,2, 3.1416,T1) (2)(*,T1, r, (3)(+,h, r, (4)(*,T2, T3, (5)(=,T4, _, T2) T3) T4) s)
4.4
表达式及赋值语句的翻译
非终结符A代表“赋值句” 非终结符E代表“表达式”
考虑以下文法G[A]: A→ i = E
规约的时候,再次扩充语义栈,添加tc栈和fc栈;
2、nxq:这是一个int变量,翻译工作开始之前,初始值 是1,翻译工作开始之后,每执行一次emit(),nxq自增1, 即: nxq = 四元式个数+1;
4.4
表达式及赋值语句的翻译
例4.3 试给出布尔表达式a∧b∨c≥d作为控制条件的四元式中
间代码。
4.4
表达式及赋值语句的翻译
表达式及赋值语句的翻译ppt课件
返填。
.
13
例如,假定E的四元式需要回填“真”出口的有p、 q、r这三个四元式,则它们可链接成如图4–6所示 的一条真值链(记作tc)。
(p) (x, x, x,0) …
(q) (x , x, x,p) …
(r) (x, x, x,q)
0是链尾标志 地址(r)是E.tc的链首
.
14
为了处理E.tc和E.fc这两项语义值,我们 需要引入如下的语义变量和函数:
(7) EB→E(1)∨ {Backpatch(E(1).fc,nxq);
EB.tc = E(1).tc; }
(8) E→EBE(2) {E.fc = E(2).fc;
E.tc = merge(EB.tc,E(2).tc);}
注意: EA 、EB是与E不同的非终结符, E(1) 、E(2)是与E相同的非终结符。
算术表达式:
– 算术运算符: +、-、*、/、^等 – 运算对象:操作数 – 算术运算符的运算顺序一般为^、 *、/、 +、-,
且满足左结合,其运算优先级高于布尔运算符, 且高于任何关系运算符。
.
9
为简单起见,我们遵循以上运算约定讨论下 述文法G[E]生成的布尔表达式:
G[E]:E→E∧E∣E∨E∣┐E∣(E)∣i∣i rop i
对于每个非终结符E,我们需要为它赋予两个语义
值E.tc和E.fc,以分别记录E所对应的四元式需要
回填“真”、“假”出口的四元式地址所构成的
链。这是因为在翻译过程中,常常会出现若干转
移四元式转向同一个目标但目标位置又未确定的
情况,此时可用“拉链”的方法将这些四元式链
接起来,待获得转移目标的四元式地址时再进行
Fortran基本计算之赋值语句
第9章基本计算(一)赋值语句从计算机的实际状态来看,给出表达式并不意味着计算的开始,真正能够驱动计算的是可执行语句,而最直接驱动表达式的计算过程的就是赋值语句,完成一个赋值步骤,就意味着机器的状态的局部或全局发生了一个根本的变化。
从语法的角度来看,一个表达式还只是一个比较复杂的复合词汇,还不能构成一个完整的语句,而赋值语句则是一个在语法意义上的完整的语句,表达式在赋值语句中扮演关键的语法作用。
从计算问题的角度来看,赋值可以说是基本的计算步骤,考虑一下我们人工计算的过程就可以发现,任何一个完整的计算步骤,都可以说就是一个赋值步骤,特别是公式演算和数值计算,完成一个局部运算过程的标志,往往就是求出某个中间变量的数值或表达式。
FORTRAN语言作为一种以公式翻译为初衷的高级语言,它的赋值语句的一般形式就是一个数学等式,当然不是那种公式恒等变换得到的恒等式,而是要把运算的结果赋予一个变量,因此它的一般句法形式为:variable = expressionvariable => expression可以看到一个赋值语句作为一个完整的语句,分为三个部分:● 被赋值的变量● 赋值符号● 计算(表达式)其中被赋值的变量,通过赋值,就拥有了明确的取值形式,如果该变量含有下标,片断下标或子串范围,则赋值的前提是它们都已经获得具体的取值。
基于表达式结果的不同种类,赋值语句分为:●固有赋值:固有赋值是把任意类型的值赋予一个非指针变量,或把一个指针变量赋予一个与之相关联的目标。
●自定义赋值:自定义赋值得以构成的前提是存在一个可访问的子例行程序,它包含一个具有ASSIGNMENT形式的赋值界面,其属性与自定义赋值语句里的变量和表达式的属性保持一致。
●指针赋值:指针赋值把一个指针变量关联到它的目标对象,或者说把一个目标对象赋予到一个指针变量。
在形式上它使用符号=>。
●过滤数组赋值:这个赋值过程是对满足一定条件的数组元素进行赋值,而不是对数组整体进行赋值。
附录:语义子程序(四元式)
N
{ N.nextlist := makelist(nextquad) ;
emit (j ,,,)}
M
{ M.quad := nextquad }
SifE then M S1
{ backpatch (E.truelist, M.quad) ;
{ E.truelist := E1.falselist ;
E.falselist := E1.truelist }
E( E1)
{ E.truelist := E1.truelist ;
E.falselist := E1.falselist }
Eid1relop id2
{ E.truelist := makelist ( nextquad ) ;
E
{place := newtemp;
emit (uminus,place,,place) }
E)
{place :=place}
Eid
{place :=entry(id)}
2.布尔表达式的翻译模式
产生式
翻译模式
Eor M
{ backpatch (falselist, M.quad) ;
E.truelist :=merge( E1.truelist, E2.truelist ) ;
E.falselist := makelist ( nextquad + 1 ) ;
emit (jrelop.op,id1.place,id2.place,0) ;
emit (j,,, 0) }
Eid
{ E.truelist := makelist ( nextquad ) ;
语义分析和语法制导翻译-编译原理-06-(二)
E.place:= E1.place; E.code:= E1.code
E.place:= id.place; E.code:= ' ' E.place:= num.val;E.code:= ' '
注释: || 表示代码序列的连接
T.type := „real‟ L1.in := L.in addtype( id.entry, L.in )
L → id
entry addtype
addtype( id.entry, L.in ) 单词 id 的属性(符号表入口)
在符号表中为变量填加类型信息
属性文法的作用
抽象描述语义处理的要求
习题
1. 下列文法是一个二进制数的文法。试根据 该文法,编写一个语法制导定义,描述由 S 生成的二进制数的数值计算。 S -> L . L L -> L B | B B -> 0 | 1 2. 参照下列表达式文法编写语法制导定义, 描述表达式的类型计算。要求在不同精度的 数的计算中,结果取精度高的类型。 E -> E + T | T T -> n.n | n
分析树和属性计算
S-属性定义:
仅包括综合属性
对于所有A
→ X1 X2 …Xn, 的属性
A的属性计算仅用X1…Xn
如:算术表达式求值的属性文法
L-属性定义:
其属性可用深度优先的顺序从左
至右计算
对于所有 Xi
A→X1 X2 … Xn
属性计算仅使用A X1 X2 … Xi-1 的属性
编程术语中英文翻译
candidate function 候选函式 候选函数
(在函式多载决议程序中出现的候选函式)
data 资料 数据
data member 资料成员、成员变数 数据成员、成员变量
data structure 资料结构 数据结构
binary tree 二元树 二叉树
binary operator 二元运算子 二元运算符
binding 系结 绑定
derived class 衍生类别 派生类
destructor(dtor) 解构式 析构函数、析构器
device 装置 设备
class body 类别本体 类体 ?
class declaration 类别宣告、类别宣告式 类声明
class definition 类别定义、类别定义式 类定义
class derivation list 类别衍化列 类继承列表
class head 类别表头 类头 ?
class hierarchy 类别继承体系 ?
bit 位元 位
bitwise 以 bit 为单元┅、位元逐一┅ ?
bitwise copy 以 bit 为单元进行复制、位元逐一复制 位拷贝
access function 存取函式 存取函数
address-of operator 取址运算子 & 取地址运算符
algorithm 演算法 算法
类别范本局部特制体、 类模板部分特化
类别范本局部特殊化
class template specializations
类别范本特制体、类别范本特殊化 类模板特化
enclosing class 外围类别(与巢状类别 num (enumeration) 列举(一种 C++ 资料型别) 枚举
专业英语术语翻译整理
central processing unit 中央处理单元plug and play即插即用electronic commerce电子商务artificial intelligence人工智能URL(Uniform Resource Locator)网址software life cycle软件生命周期e-journal 电子期刊FAQ(Frequently Asked Question)常问问题network security 网络安全objective-oriented 以目标为导向Trojan horse 木马ink cartridge 墨盒object linking and embedding (OLE)对象链接和嵌入procedural language 程序语言Windows socket 窗口操作系统插座character set字集cost effectiveness成本效益run a computer program 运行的计算机程序event-driven programming 事件驱动编程scroll bar 滚动条analogue computer模拟计算机polymorphism多态性rotating shafts and gears 旋转轴和齿轮numerical approximation 数值逼近equation 方程middleware中间件integrated circuit 集成电路transistor 晶体管fabricate 编造scalability可扩展性silicon substrate 硅衬底throughput吞吐量operating instruction 操作指令microminiaturization 微型化superconductivity超导parser分析器convergence收敛Data Modification Language (DML)数据修改语言Distributed Component Object Model (DCOM)分布式组件对象模型electronic bulletin board电子公告板Random Access Memory (RAM)随机存取存储器assignment statement赋值语句relational database关系型数据库data access数据访问bootstrap sector引导扇区system expandability系统的可扩展性entity relationship diagram实体关系图permanent table永久表clustered index聚集索引synchronization同步file transfer protocol (FTP)文件传输协议load balancing负载均衡data encryption数据加密graphical user interface (GUI) 图形用户界面universal serial bus (USB)通用串行总线OSI(Open System Interconnection)开放系统互连virtual reality虚拟现实liquid crystal display (LCD) 液晶显示器database management system (DBMS)数据库管理系统development tool开发工具peer-to-peer network对等网络prototype原型赋值语句Assignment statement非易失性 Nonvolatile(NV)关系数据库Relational Database数据存取Data Access外围设备Peripheral Equipment系统可扩展性 System scalability多核处理器Multi-core processors实体关系图Entity Relationship Diagram(ERD)派生类 Derived class数据修改语言 Data Modification Language神经网络Neural Network永久(固定)表Permanent (fixed) Table簇索引Clustered index体系结构框架 Architecture Framework分布式组件对象模型 Distributed Component Object Model对象关系数据库Object-Relational Database电子公告板Electronic bulletin board随机存储器Random Access Memory(RAM)网络适配器 Network Adapter文件传输协议File Transfer Protocol(TCP)负载平衡Load Balancing嵌入式操作系统 Embedded operating system图形用户接口Graphical User Interface通用串行总线Universal Serial Bus(USB)Open Systems Interconnection Reference Model 开放式系统互联参考模型液晶显示器LCD display数字用户线路 Digital Subscriber Line(DSL)数据库管理系统Database Management Systems开发工具 Development Tools元数据 Metadata对等网络 Peer network谓词演算Predicate calculus。
赋值,输入,输出语句
你知道计算机是怎样工作的吗
• 计算机完成任何一项任务都需要算法 • 算法要用计算机能够理解的程序设计语言 (programming language)翻译成计算机程 序。 • 程序设计语言有很多种。如BASIC, Foxbase,C语言,C++,J++,VB等。 • 为了实现算法中的三种基本的逻辑结构, 各种程序设计语言中都包含下列基本的算 法语句:
回顾反思
• 本节课介绍了输入语句、输出语句和赋值 语句的结构特点及联系。掌握并应用输入 语句,输出语句,赋值语句编写一些简单 的程序解决数学问题,特别是掌握赋值语 句中“←”的作用及应用。编程一般的步 骤:先写出算法,再进行编程。
回顾反思
• (1)输入语句和赋值语句的区别:输入语 句是外部直接给程序中变量赋值;赋值语 句是程序内部运行时给变量赋值,先计算 右边的表达式,得到的值赋给左边的变量. • (2)输入语句和输出语句的区别:输入 语句是外部直接给程序中变量赋值;输出 语句是程序运行的结果输出到外部,先计 算表达式,得到结果输出.
例1:写出求x=23时多项式7x3+3x2-5x+11 的值的算法. 算法1:
p ←7x + 3x −5x +11
3 2
x ← 23;
算法2:
x ← 23; p ←((7x + 3)x − 5)x +11;
两种算法比较:算法1要做6次乘法,算法 2只需做3次乘法.如此可见,算法的好坏 会影响运算速度. 算法2称为秦九韶算法,其算法特点 是:通过一次式的反复计算,逐步得出高 次多项式的值;对于一个n 次多项式,只 要做 n 次乘法和 n 次加法.
输出 x , y
第17讲 赋值语句的翻译
E.type:=integer else E.type:=real }
产生式E→E1 +E2 的语义动作
{ E.place:=newtemp;
if E1.type=integer and E2.type=integer then begin
函数newtemp的功能是,每次调用它时,将返 回一个不同的临时变量名字,如T1,T2,…
赋值语句生成三地址代码的S-属性文法
产生式 S→id:=E E→E1+E2
E→E1*E2
E→-E1
E→ (E1)
E→id
语义规则 S.code:=E.code || gen(id.place ‘:=’ E.place)
(6) L→id { L.place:=id.place; L.offset:=null }
A[i1,i2,…,ik] ((…i1 n2+i2)n3+i3)…)nk+ik) ×w + base-((…((low1 n2+low2)n3+low3)…)nk+lowk)×w
带数组元素引用的赋值语句翻译模式
L.offset
若L为简单变量,null 若L为下标变量,指存放可变部分的临时变量的名字
((…i1 n2+i2)n3+i3)…)nk+ik)×w + base-((…((low1 n2+low2)n3+low3)…)nk+lowk)×w
带数组元素引用的赋值语句
(1) S→L:=E (2) E→E+E (3) E→(E) (4) E→L (5) L→Elist ] (6) L→id (7) Elist→ Elist, E (8) Elist→id [ E
计算机专业英语第二版课后翻译答案
Unite 1Section A: 1、artificial intelligence 人工智能2、paper-tape reader 纸带阅读器3、Optical computer 光学计算机4、Neural network 神经网络5、Instruction set 指令集6、Parallel processing 并行处理器7、Difference engine差分机8、Versatile logical element 多用途逻辑元件9、Silicon substrate 硅衬底10、Vaccum tube 真空管11、数据的存储与管理the storage and management of data12、超大规模集成电路large-scale integrated circuit13、中央处理器central processing unit14、个人计算机personal computer15、模拟计算机analog computer16、数字计算机digital computer17、通用计算机general purpose computer18、处理器芯片processor chip19、操作指令operating instructions20、输入设备input devicesSection B1、artificial neural network 人工智能神经网络2、Computer architecture 计算机体系结构3、Robust computer program 健壮的计算机程序4、Human-computer interface 人机接口5、Knowledge representation 知识代表6、数值分析numerical analysis7、程序设计环境programming environment8、数据结构data structure9、存储和检索信息store and retrieve information10、虚拟现实virtual realityUnit 2Section A:1、function key 功能键2、V oice recognition module 声音识别调制器3、Touch-sensitive region 触敏扫描仪4、Address bus 地址总线5、Flatbed scanner 平板扫描仪6、Dot-matrix printer 矩阵式打印机7、Parallel connection 并行连接8、Cathode ray tube 阴极射线管9、Video game 电子游戏10、Audio signal 音频信号11、操作系统operating system12、液晶显示liquid crystal display13、喷墨打印机inkjet printer14、数据总线data bus15、串行连接serial connection16、易失性存储器volatile memory17、激光打印机laser printer18、磁盘存储器floppy disc19、基本输入输出系统basic input/output system20、视频显示器video displaySection B:1、interrupt handler 中断处理程序2、Virtual memory 虚拟内存3、Context switch 上下文转换4、Main memory 主存5、Bit pattern 位模式6、外围设备peripheral device7、进程表process table8、时间片time slice9、图形用户界面graphics user interface10、海量存储器mass storageUnit 3Section A:1、storage register 存储寄存器2、Function statement 函数语句3、Program statement 程序语句4、Object-oriented language 面向对象语言5、Assembly language 汇编语言6、Intermediate language 中间语言7、Relational language 关系语言8、Artificial language 人工语言9、Data declaration 数据声明10、SQL 结构化查询语言11、可执行程序executable program12、程序模块program module13、条件语句conditional statement14、赋值语句assignment statement15、逻辑语言logic statement16、机器语言machine language17、函数式语言functional language18、程序设计语言programming language19、运行计算机程序run a omputer program20、计算机程序员computer programmerSection B1、native code 本机代码2、Header file 头文件3、Multithreaded program 多线程程序4、Java-enabled browser 支持Java的浏览器5、Mallicious code6、机器码machine code7、汇编码assembly code8、特洛伊木马程序trojan9、软件包software package10、类层次class hierarchyUnit 4Section A1、inference engine 推理机2、System call 系统调用3、Compiled language 编译执行的语言4、Parellel computing 并行计算5、Pattern matching 模式匹配6、Memory location 存储单元7、Interpreter program 解释程序8、Library routine 库程序9、Intermediate program 中间程序10、Source file 源文件11、解释执行的语言interpreted language12、设备驱动程序device driver13、源程序source program14、调试程序debugger15、目标代码object code16、应用程序application program17、实用程序utility program18、逻辑程序logic program19、黑盒ink cartridge20、程序的存储与执行storage and execution of program Section B1、Messaging model 通信模式2、Common language runtime 通用语言运行时刻(环境)3、Hierarchical namespace 分层的名称空间4、Development community 开发社区5、CORBA 公共对象请求代理体系结构6、基本组件basic components7、元数据标记metadata token8、虚拟机VM virtual machine9、集成开发环境IDE(intergrated development environment)10、简单对象访问协议SOAP(simple object access protocol) Unit 5Section A1、system specification 系统规范2、Unit testing 单元测试3、Software life cycle 软件的生命周期4、System validation process 系统验证过程5、Evolutionary development process 进化发展过程6、Simple linear model 简单线性模型7、Program unit 程序单元8、Throwaway prototype 一次性使用原型9、Text formatting 文本格式10、System evolution 系统演变11、系统设计范例paradigm for system design12、需求分析与定义Requirements analysis and definition13、探索式编程方法exploratory programming approach14、系统文件编制system documentation15、瀑布模型waterfall model16、系统集成system integration17、商用现成软件commercial off-the-shelf software18、基于组件的软件工程component-based software engineering19、软件维护工具software maintenance tool20、软件复用software reuseSection B1、check box 复选框2、Structured design 结构化设计3、Building block 构建模块4、Database schema 数据库模式5、Radio button 单选按钮6、系统建模技术system modeling techniques7、模型驱动开发MDD(model-driven development)8、数据流程图data flow diagram9、下拉式菜单drop-down10、滚动条scroll barUnit 6Section A1、end user 终端用户2、Atomic operation 原子操作3、Database administrator 数据库管理员4、Relational database model 关系数据库模型5、Local data 本地数据6、Object-oriented database 面向对象的数据库7、Database management system 数据库管理系统8、Entity-relationship model 实体关系模型9、Distributed database 分布式数据库10、Flat file 展开文件11、二维表two-dimensional table12、数据属性data attributes13、数据库对象database object14、存储设备storage device15、数据类型data type16、数据插入与删除insertion and deletion17、层次数据库模型hierarchical18、数据库体系结构database architecture19、关系数据库管理系统ralational database management system20、全局控制总线global control busSection B1、nonvolatile storage system 易失性存储系统2、Equitment malfunction 设备故障3、Wound-wait protocol 损伤等待协议4、Exclusive lock 排它锁5、Database integrity 数据库完整性6、共享锁shared lock7、数据库实现database implementation8、级联回滚cascading rollback9、数据项data item10、分时操作系统time sharing operating system ;Unit 7Section A1、microwave radio 微波无线电2、digital television 数字电视3、DSL 数字用户线路4、analog transmission 模拟传输5、on-screen pointer 屏幕上的指针6、computer terminal 计算机终端7、radio telephone 无线电话8、cellular telephone 蜂窝电话,移动电话,手机9、decentralized network 分散型网络10、wire-based internal network 基于导线的内部网络,有线内部网11、光缆fiber-optic cable12、传真机fax machine13、线通信wireless communications14、点对点通信point-to-point communications15、调制电脉冲modulated electrical impulse16、通信卫星communication(s) satellite17、电报电键telegraph key18、传输媒体transmission medium (或media)19、无绳电话cordless telephone20、金属导体metal conductorSection B1、bit map 位图2、parallel port 并行端口3、direct memory access (DMA) 直接存储器存取4、universal serial bus 通用串行总线5、general-purpose register 通用寄存器6、电路板circuit board7、串行通信serial communication8、数码照相机digital camera9、存储映射输入/输出memory-mapped I/O10、有线电视cable televisionUnit 8Section A1、file server 文件服务器2、carrier sense 载波检测3、Protocol suite 协议族4、Peer-to-peer model 点对点模型5、bus topology network 总线拓扑网络6、inter-machine cooperation 计算机间合作7、Ethernet protocol collection 以太网协作集8、Proprietary network 专有网络9、utility package 实用软件包10、star network 星形网络11、局域网local area network (LAN)12、令牌环token ring13、无线网络wireless network14、封闭式网络closed network15、环形拓扑网络ring topology16、客户/服务机模型client/server model17、网络应用程序network application18、进程间通信interprocess communication19、打印服务机printer server20、广域网wide area networkSection B1、routing path 路由选择通路2、dual-ring topology 双环形拓扑结构3、extended star topology 扩展星形拓扑结构4、backbone network 基干网,骨干网5、mesh topology网络拓扑结构6、同轴电缆coaxial cable7、逻辑拓扑结构logical topology8、无冲突连网环境collision-free networking environment9、树形拓扑结构tree topology10、目的地节点destination nodeUnit 9Section A1、cell phone 蜂窝电话,移动电话,手机2、IP address 网际协议地址,IP地址3、autonomous system 自主系统4、dial-up connection 拨号连接5、network identifier 网络标识符6、binary notation 二进制记数法7、mnemonic name 助记名,缩写名8、Internet-wide directory system 因特网范围的目录系统9、name server 名称服务器10、Internet infrastructure 因特网基础结构11、助记地址mnemonic address12、网吧cyber cafe13、宽带因特网访问broadband Internet access14、顶级域名top-level domain (TLD)15、因特网编址Internet addressing16、点分十进制记数法dotted decimal notation17、因特网服务提供商Internet service provider (ISP)18、专用因特网连接dedicated Internet connection19、主机地址host address20、硬件与软件支持hardware and software support Section B1、incoming message 来报,到来的报文2、application layer 应用层3、utility software 实用软件4、sequence number (顺)序号,序列号5、remote login capabilities 远程登录能力6、端口号port number7、软件例程software routine8、传输层transport layer9、文件传送协议FTP(File Transfer Protocol)10、万维网浏览器Web browserUnit 10Section A1、mailing list 邮件发送清单,邮件列表2、proprietary software 专有软件3、cc line 抄送行4、bcc line 密送行5、forwarded e-mail messages 转发的电子邮件6、e-mail convention 电子邮件常规7、click on an icon 点击图标8、confidential document 密件,秘密文件9、classified information 密级信息10、recovered e-mail message 恢复的电子邮件11、常用情感符commonly used emoticon12、已删除电子邮件deleted e-mail13、电子系统electronic system14、附件行Attachments line15、版权法copyright law16、电子邮件网规e-mail netiquette17、信息高速公路information superhighway18、签名文件signature file19、电子数据表程序spreadsheet program20、文字处理软件word processorSection B1、web-authoring software 网络写作软件2、template generator 模版生成程序3、navigation page 导航页面4、corporate logo 公司标识5、splash page 醒目页面,过渡页6、导航条navigation bar7、节点页面node page8、网站地图site map9、可用性测试usability testing10、图形交换格式gif(Graphics Interchange Format)Unit 11Section A1、customized marketing strategy 定制的营销策略2、B2G transaction 企业对政府交易3、mobile telephone 移动电话4、dot-com bust 网络不景气5、smart card 智能卡,灵巧卡6、digital piracy 数字盗版7、dot-com boom 网络繁荣8、C2C transaction 消费者对消费者交易9、Web auction site 拍卖网站10、fingerprint reader 指纹读取器11、射频识别装置radio-frequency identification (RFID) device12、电子数据交换electronic data interchange (EDI)13、库存管理技术inventory management technology14、知识产权intellectual property15、条形码bar code16、货币兑换currency conversion17、电子图书electronic book18、视网膜扫描仪retina scanner19、个人数字助理personal digital assistant (PDA)20、企业对企业电子商务B2B electronic commerceSection B1、software suite 软件套件2、text box 文本框3、virtual checkout counter 虚拟付款台4、static catalog 静态目录5、browser session 浏览器会话期6、动态目录dynamic catalog7、购物车软件shopping cart software8、供应链supply chain9、企业资源计划软件enterprise resource planning (ERP) software10、税率tax rateUnit 12Section A1、encryption program 加密程序2、deletion command 删除命令3、authorized user 授权的用户4、backup copy 备份5、voltage surge 电压浪涌6、circuit breaker 断路器7、electronic component 电子元件(或部件)8、data-entry error 数据输入错误9、electronic break-in 电子入侵10、power line 电力线,输电线11、检测程序detection program12、电源power source13、破坏性计算机程序destructive computer program14、计算机病毒computer virus15、软件侵权software piracy16、硬盘驱动器hard-disk drive17、病毒检查程序virus checker18、主存储器primary storage19、电子公告板electronic bulletin board20、浪涌电压保护器surge protectorSection B1、phishing attack 网络钓鱼攻击2、graphics card 显(示)卡3、heuristic analysis 试探性分析4、infected file 被感染文件5、virus dictionary 病毒字典6、数据捕获data capture7、恶意软件malicious software8、病毒特征代码virus signature9、防病毒软件antivirus software10、内存驻留程序memory-resident program。
关于Verilog中的几种赋值语句(assign-deassign-force-release)
关于Verilog中的几种赋值语句(assign/deassign/force/release)1. 连续赋值语句(Continuous Assignments)连续赋值语句是Verilog数据流建模的基本语句,用于对线网进行赋值,等价于门级描述,是从更高的抽象角度来对电路进行描述。
连续赋值语句必须以关键词assign开始。
连续复制的主要特点是:•连续赋值语句的左值可以是一下类型之一:①标量线网②向量线网③矩阵中的一个元素(该矩阵可以是标量线网类型的,也可以是向量线网类型的)④向量线网的某一位⑤向量线网的部分位以及上述各种类型的拼接体但是,不能是向量或向量寄存器。
•连续赋值语句总是处于激活状态。
只要任意一个操作数发生变化,表达式就会被立即重新计算,并且将结果赋给等号左边的线网。
•操作数可以是标量或向量的线网或寄存器,也可以是函数的调用。
•赋值延迟用于控制对线网赋予新值的时间,根据仿真时间单位进行说明。
赋值延迟类似于门延迟,对于描述实际电路中的时序是非常重要的。
2. 过程赋值语句(Procedural Assignments)过程赋值语句的更新对象是寄存器、整数、实数或时间变量等。
这些类型的变量在被赋值后,其值将保持不变,直到被其他过程赋值语句赋予新值。
过程赋值语句只有在执行到的时候才会起作用。
过程赋值语句只能在initial或always语句内进行赋值,只能对变量数据类型赋值,同时initial和always中只能使用过程赋值语句。
过程赋值语句的左值可以是以下类型之一:①reg、整形数、实型数、时间寄存器变量或存储器单元②上述各种类型的位选(例如:addr[3])③上述各种类型的域选(例如:addr[31:16])④上面三种类型的拼接过程性赋值语句包括两种类型的赋值语句:阻塞赋值(=)和非阻塞赋值(<=)(其主要区别详见各类Verilog参考书,这里不再详述)。
3. 过程连续赋值语句(Procedural ContinuousAssignments)过程连续赋值是在过程块内对变量或线网型数据进行连续赋值,是一种过程性赋值,换言之,过程性连续赋值语句是一种能够在always或initial语句块中出现的语句。
编译第七章语法制导翻译_OK
{PRINT E ●VAL}
• (1)E E(1) +E(2) {E●VAL=E(1)●VAL+E(2)●VAL}
• (2)E E(1) * E(2) {E●VAL=E(1)●VAL*E(2)●VAL}
• (3)E (E(1)) {E●VAL=E(1)●VAL}
• (4)E i
{E●VAL=LEXVAL}
语义子程序
• (0)S’ E
{PRINT VAL[TOP]}
• (1)E E(1) +E(2) {VAL[TOP]=VAL[TOP]+VAL[TOP+2]}
• (2)E E(1) * E(2) {VAL[TOP]=VAL[TOP]*VAL[TOP+2]}
• (3)E (E(1)) {VAL[TOP]=[TOP+1]}
语义子程序
• (1)A i=E {GEN(=,E●PLACE,_,ENTRY(i)}
• (2)E -E(1) {T=NEWTEMP;
• ----
GEN(@,E(1)●PLACE,_,T);
• ----
E●PLACE=T}
• (3)E E(1)*E(2) {T=NEWTEMP;
•
GEN(*,E(1)●PLACE,E(2)●PLACE,T);
• 2、实例:对布尔式X+Y>Z∨A∧( B∨C) 进行翻译:
SYM栈
i i= i=i=-i i=-E i=E i=E* i=E*( i=E*(i i=E*(E
PLACE栈
---------B --T1 --T1--T1---T1--C --T1--C
生成四元式
(@,B,-,T1)
❖21
verilog assign条件赋值语句
verilog assign条件赋值语句
在Verilog中,`assign`语句用于在连续赋值块中执行条件赋值。
一般的`assign`语句的语法如下:
```
assign <output> = <expression>;
```
条件赋值在Verilog中使用`? :`运算符来表示。
它的一般语法
如下:
```
<condition> ? <if_true_expression> : <if_false_expression>
```
可以将条件赋值语句与`assign`语句相结合,用于在连续赋值
块中进行条件赋值。
下面是一个使用条件赋值的例子:
```
module condition_assign;
reg [3:0] a;
wire [3:0] b;
assign b = (a > 8) ? 4'b1111 : 4'b0000;
initial begin
a = 5;
#10;
a = 9;
#10;
a = 3;
#10;
$finish;
end
endmodule
```
在这个例子中,`a`是一个4位寄存器,`b`是一个4位线网。
根据`a`的值,`b`将被连续赋值为全高电平或全低电平。
当`a`的值大于8时,`b`被赋值为`4'b1111`,否则,`b`被赋值为`4'b0000`。
在上述代码中的仿真过程中,`a`的值将在10个时间单位后改变,仿真器会根据条件赋值语句更新`b`的值。
ch8-2赋值语句与布尔表达式的翻译8.4-8.5-(张素琴)
100 (J<,a,b,102) 101 (j, , ,Lfalse) 102 (J<,c,d,104) 103 (j, , ,Lfalse) 104 (J<,e,f, Ltrue) 105 (j, , ,Lfalse)
回填E.true
E.falselist 将E.flase合E.truelist
并成一个链
E=E1*E2 {E.place=newtemp; emit(E.place‘=’E1.place‘*'E2.place')}
3
E =-E1 { E.place:=newtemp; emit(E.place ´ := ´ ´uminus´E1.place}
E=(E1) {E.place:=E1.place}
E→E1 or E2 {E.place:=newtemp;
⑥
emit(E.place=E1.place or E2.place)}
E→E1 and E2 {E.place:=newtemp;
①
emit(E.place=E1.place and E2.place)}
② E→not E1 {E.place:=newtemp;
17
If a<b and c<d and e<f then s1 else s2四元式
if a<b goto L1
100 (J<,a,b,102)
goto Lfalse L1:if c<d goto L2
goto Lfalsel L2:if e<f goto Ltrue
goto Lfalse
101 (j, , ,Lfalse) 102 (J<,c,d,104) 103 (j, , ,Lfalse) 104 (J<,e,f, Ltrue) 105 (j, , , Lfalse) 回填地址链
通达信公式(语法):赋值语句
通达信公式(语法):赋值语句这一篇我来讲一下通达信公式的句式。
文中我也会频繁的回顾第一个公式“多头吞噬”,以其做一个例子(有可能是反面例子),同时也会用到KD指标这个公式。
所以,如果第一次看我的这个系列文章,可以先看一下《通达信公式(概论):第一个公式》,同时了解一下KD指标。
01前一篇说到句式是通达信公式的骨架,通达信公式有它固定的表达方式,比如我们的语言中有陈述句、疑问句、感叹句等等。
而电脑不会有带感情的感叹句,也不会有模棱两可的疑问句,只有陈述句。
你要问现在不是有AI吗,说句话就可以选股了?朋友,通达信只是一个炒股软件,公式只是一个配套工具,AI、人工智能这些就不要想啦。
外面呢,同花顺的i问股在这方面做的还可以,不过离智能还有一定的距离,只是减少了部分写代码的过程,而且不一定能满足大家的投资策略。
我实践总结下来,通达信公式的句式主要分为以下三种:赋值语句、输出语句、条件语句。
赋值语句是为了产生中间变量而存在,比如我们有个策略要用到收盘价除以开盘价(不是涨幅,涨幅是收盘价除以前一日收盘价),通达信没有直接结果,但可以用通达信公式系统基础函数O和C,进行计算得出。
虽然计算出一个数据,但这个数据若没有输出(形成技术指标)或者应用在条件(条件选股、五彩K 线、专家系统)中是没有意义的。
输出语句则在技术指标公式中应用较广,输出一个数据,比如近10个交易日收盘价的平均值,输出到K 线图上就是我们看到的10日均线。
条件语句则在技术指标公式,条件选股公式、专家系统公式、五彩K线公式中均有应用,是句法中的核心。
所以条件选股语句是本篇的重头戏,也是学好通达信公式必须能灵活应用的内容。
02今天重点学习一下赋值语句。
赋值语句,顾名思义就是自己定义一个变量,并给这个变量赋予一个数值。
大家可能会有疑问,就是通达信公式调用的数据既然已经是通达信公式的默认函数了,为什么还需要这个赋值语句呢?上面简单说了一个案例,就是收盘价除以开盘价,大家想一想,有没有点眼熟。
汇编赋值语句
汇编赋值语句
1. 汇编里的赋值语句就像是给机器注入灵魂啊!比如说,MOV
AX,10 ,这就好像给机器的某个部分赋予了一个特定的能力值,让它能按照我们的想法去行动,神奇吧?
2. 你知道吗,汇编的赋值语句那可是关键得很呐!像 ADD BL,5 这样的,不就如同给机器的运作添加了一份动力,推动它向前吗?
3. 哎呀呀,汇编赋值语句简直太重要啦!就像 MOV CX,[BX] ,这不就是在精准地调配资源,让机器的运行更有序吗?
4. 汇编的赋值语句可真是厉害呀!比如 XOR DX,3 ,这不就像给机器的运行轨道来了一个巧妙的调整吗?
5. 哇塞,想想汇编赋值语句吧!像 INC SI 这样的,不就如同给机器的进程加了一把劲,让它加速前进吗?
6. 嘿,可别小看了汇编赋值语句哟!像 SUB AH,2 ,这不就是在精细地控制机器的某个环节,让它乖乖听话吗?
7. 瞧瞧这汇编赋值语句,多牛啊!比如 AND BP,7 ,简直就是给机器的行为模式设定了一个规则,是不是很神奇?
8. 哇,汇编赋值语句真的太有意思啦!像 OR AL,8 ,这不就像是给机器点亮了一盏特别的灯,让它展现出不一样的光彩吗?
9. 哎呀,这汇编赋值语句可太关键啦!比如 MOV [DI],12 ,就好像是给机器的某个仓库放进去了重要的货物,影响重大啊!
10. 嘿,感受一下汇编赋值语句的魅力吧!像 ROL CL,1 ,这不就如同让机器的某个部分欢快地转动起来,充满活力呀!。
语言的语法及其翻译方案
语言的语法及其翻译方案各种语言成分的语法及其翻译方案(示例)1.普通声明语句的翻译下面就是声明语句的文法:p→progid(input,output)d;sd→d;d|list:t|procidd;slist→list1,id|idt→integer|real|arraycoft1|?t1|recorddc→[num]c|ε声明语句的翻译模式:p→progid(input,output){offset:=0}d;sd→d;dd→id:t{enter(,t.type,offset);offset:=offset+t.width}t→integer{t.type: =integer;t.width:=4}t→real{t.type:=real;t.width:=8}t→array[num]oft1{t.type:=array(num.val,t1.type);t.width:=num.val×t1.width}t →↑t1{t.type:=pointer(t1.type);t.width:=4}2.嵌套过程中声明语句的翻译嵌套过程声明语句的产生式。
p→progid(input,output)d;sd→d;d|id:t|procid;d;s(7.1)嵌套过程声明语句的译者模式:p→progid(input,output)md;s{addwidth(top(tblptr),top(offset));pop(tblptr);pop(offset)}m→ε{t:=mktable(nil);push(t,tblptr);push(0,offset)}d→d1;d2d→procid;nd1;s{t:=top(tblptr);addwidth(t,top(offset));pop(tblptr);pop(offset);enterproc(top(tblptr),,t)}d→id:t{enter(top(tblptr),,t.type,top(offset));top(offset):=top(offset)+t.width}n→ε{t:=mktable(top(tblptr));push(t,tblptr);push(0,offset)}3.记录的翻译下面就是分解成记录类型的产生式:t→recorddend生成记录类型的翻译模式:t→recordldend{t.type:=record(top(tblptr));t.width:=top(offset);pop(tblptr);pop(offset)}l→ε{t:=mktable(nil);push(t,tblptr);push(0,offset)}4.赋值语句的翻译下面就是典型的赋值语句文法:s→left:=ee→e1+e2|e1*e2|-e1|(e1)|leftleft→elist]|idelist→elist,e|id[e(7.2)赋值语句的译者模式:⑴s→left:=e{ifleft.offset=nullthen/*left是简单变量id*/gencode(left.addr':='e.addr);1elsegencode(left.addr'['left.offset']'':='e.addr)}/*left是数组元素*/⑵e→e1+e2{e.addr:=newtemp;gencode(e.addr':='e1.addr'+'e2.addr)}⑶e→(e1){e.ad dr:=e1.addr}⑷e→left{ifleft.offset=nullthen/*left是简单id*/e.addr:=left.addrelsebegin/*left是数组元素*/e.addr:=newtemp;gencode(e.addr':='left.addr'['left.offset']')end}⑸left→elist]{left.addr:=newtemp;/*left就是数组元素,因此放置基址和加速度*/left.offset:=newtemp;gencode(left.addr':='c(elist.array));gencode(left.offset':='elist.addr'*'width(elist.array))}⑹left→id{left.addr:=id.addr;left.offset:=null}⑺elist→elist1,e{t:=newtemp;m :=elist1.ndim+1;gencode(t':='elist1.addr'*'limit(elist1.array,m));/*计算em-1×nm*/gencode(t':='t'+'e.addr);/*计算+im*/elist.array:=elist1.array;elist.addr:=t;elist.ndim:=m}⑻elist→id[e{elist.array:=id.addr;elist.addr:=e.addr;elist.ndim:=1}5.各种控制结构的翻译5.1布尔表达式的翻译布尔表达式的文法为:⑴b→b1ormb2⑵b→b1andmb2⑶b→notb1⑷b→(b1)⑸b→e1relope2⑹b→true⑺b→false ⑻m→ε布尔表达式的翻译模式如下所示:⑴b→b1ormb2{backpatch(b1.falselist,m.quad);b.truelist:=me rge(b1.truelist,b2.t ruelist);b.falselist:=b2.falselist}⑵b→b1andmb2{backpatch(b1.truelist,m.quad) ;b.truelist:=b2.truelist;b.falselist:=merge(b1.falselist,b2.falselist)}⑶b→no tb1{b.truelist:=b1.falselist;b.falselist:=b1.truelist}⑷b→(b1){b.truelist:=b1 .truelis t;b.falselist:=b1.falselist}⑸b→e1relope2{b.truelist:=makelist(nextqu ad);b.falselist:=makelist(nextquad+1);2gencode('if'e1.addrrelop.ope1.addr'gotoc');gencode('gotoc')}⑹b→true{b.trueli st:=makelist(nextquad);gencode('gotoc')}⑺b→false{b.falselist:=m akelist(nextq uad);gencode('gotoc')}⑻m→ε{m.quad:=nextquad}5.2常用控制流语句的译者控制流语句if-then,if-then-else和while-do的文法为:⑴s→ifbthens1⑵s→ifbthens1elses2⑶s→whilebdos1⑷s→beginlend⑸s→a⑹l→l1;s ⑺l→s(7.9)if-then,if-then-else和while-do语句的翻译模式:⑴s→ifbthenm1s1nelsem2s2{b ackpatch(b.truelist,m1.quad);backpatch(b.falselist,m2.quad);s.nextlist:=merge(s1.nextlist,merge(n.nextlist,s2.nextlist))}⑵n→ε{n.nextlist:=makelist(nextquad);gencode('gotoc')}⑶m→ε{m.quad:=nextqu ad}⑷s→ifbthenms1{backpatch(b.truelist,m.quad);s.nextlist:=merge(b.falselist, s1.nextlist)}⑸s→whilem1bdom2s1{backpatch(s1.nextlist,m1.quad);backpatch(b.truelist,m2.quad);s.nextlist:=b.falselist;gencode('goto'm1.quad)}⑹s→beginlend{s.nextlist:=l.nextlist}⑺s→a{s.nextlist:=nil}⑻l→l1;ms{backpa tch(l1.nextlist,m.quad);l.nextlist:=s.nextlist}⑼l→s{l.nextlist:=s.nextlist}5.3for循环语句的译者for循环语句的文法如下所示:s→forid:=e1toe2stepe3dos1for循环语句的翻译模式如下所示:s→forid:=e1toe2stepe3doms1{backpatch(s1.nextlist,m.again,);gencode(‘goto’,-,-,m.again);s.nextlist:=m.again;}m→ε{m.addr:=entry(id);gencode(‘:=’,e1.addr,-,m.addr);t1:=newtemp;gencode(‘:=’,e2.addr,-,t1);t2:=newtemp;gen code(‘:=’,e3.addr,-,t2);q:=nextquad;gencode(‘goto’,-,-,q+2);m.again:=q+1;gencode(‘+’,m.addr,t2,m.addr);m.nextlist:=nextquad;gencod e(‘if’m.addr‘>’t1‘gotoc’);}5.4repeat语句的译者repeat语句的文法如下所示:s→repeats1untilbrepeat语句的翻译模式如下所示:s→repeatms1untilnb{backpatch(b.falselist,m.quad);s.nextlist:=b.truelist}3m→ε{m.quad:=nextquad}n→ε{backpatch(s1.nextlist,nextquad)}6.switch语句的语法制导翻译switch语句的文法为:s→switch(e)clistclist→casev:sclist|default:sswitch语句的翻译模式如下所示:⑴s→s witch(e){i:=0;si.nextlist:=0;pushsi.nextlist;pushe.addr;pushi;q:=0;pushq}clist{popq;popi;pope.addr;popsi.nextlist;s.nextlist:=merge(si.nextlist,q);push s.nextlist}⑵clist→casev:{popq;popi;i:=i+1;pope.addr;ifnextquad≠0thenbackpatch(q,nextquad);q:=ne xtquad;gencode(‘if’e.addr‘≠’vi‘goto’li);pushe.addr;pushi;pushq}s{popq;popi;pope.addr;popsi-1.nextlist;p:=nextquad;gencode(‘goto-’);gencode(li‘:’);si.nextlist:=merge(si.nextlist,p);si.nextlist:=merge(si.nextlist,si-1.nextlist);pushsi.nextlist;pushe.addr;pushi;pushq}clist⑶clist→default:{popq;popi;i:=i+1;pope.addr;ifnextquad≠0thenbackpatch(q,nextquad);q:=nextquad;gencode(‘if’e.addr‘≠’vi‘goto’vi+1);pushe.addr;pushi;pushq}s{popq;popi;pope.addr;popsi-1.nextlist;p:=nextquad;gencode(‘goto-’);gencode(li‘:’);si.nextlist:=merge(si.nextlist,p);si.nextlist:=merge(si.nextlist,si-1.nextlist);pushsi.nextlist;pushe.addr;pushi;pushq}7.过程调用和回到语句的译者过程调用和返回语句的文法如下所示:s→callid(elist)elist→elist,e|es→returne过程调用语句的译者模式如下右图:⑴s→callid(elist){n:=0;repeatn:=n+1;从queue的队首取出一个实参地址p;gencode('param',-,-,p);untilqueue为空;gencode('call',id.addr,n,-)}4⑵elist→elist,e{将e.addr嵌入至queue的队尾}⑶elist→e{初始化queue,然后将e.addr加入到queue的队尾。
赋值语句翻译成四元式
赋值语句翻译成四元式将赋值语句翻译成四元式的语义描述:(1) S-> id:=A(2) A->id(3) A->int(4) A->real(5) A->A1+A2(6) A->A1A2(7) A->-A1(8) A->(A1)句子 y:=5.1x+bS->id:=A{S.code:=A.code||gen(id.place’:='A.place);} S.code(综合属性) 表示S的四元式语句序列;A.code(综合属性)表示A的四元式语句序列;A.place是综合属性,表示存放A的值的存储位置;id.place表示相应的符号名对应的存储位置;|| 是四元式语句序列之间的链接运算;gen是语义函数,用于生成一条四元式语句。
(2) A->id{ A.place:=id.place;A.code:=" ";}(3) A->int{ A.place:=newtemp;A.code:=gen(A.place ‘:=’ int.val);}(4) A->real { A.place:=newtemp;A.code:=gen(A.plac e ‘:=’ real.val);}newtemp是语义函数,用于在符号表中新建一个从未使用过的名字,并返回该名字的存储位置。
(5) A->A1+A2{ A.place:= newtemp;A.code:=A1.code||A2.code||gen(A.place ‘:=’A1.place’+‘A2.place);}(6) A->A1A2{A.place:=newtemp;A.code:=A1.code||A2.code||gen(A.place ‘:=’ A1.place '’ A2.place);}(7) A->-A1{ A.place:=newtemp;A.code:=A1.code||gen(A.place ‘:=’ ‘umins’ A1.place); }(8) A->(A1){ A.place:=A1.place;A.code:=A1.code;}。
算术赋值语句
算术赋值语句
1. 算术赋值语句就像是给数字施魔法,让它们乖乖听话!比如“x = 5”,这就像给 x 这个小盒子装上了数字 5 这个宝贝呀!
2. 你知道吗,算术赋值语句如同给变量穿上合适的衣服!像“y += 3”,不就是给 y 加上一件数字 3 的漂亮外衣嘛!
3. 算术赋值语句啊,那简直是数学世界里的神奇咒语!就好比“z
*= 2”,让 z 瞬间变得强大两倍呢!
4. 嘿,算术赋值语句不就是在数字的舞台上导演一场精彩表演嘛!
像“a /= 4”,就是让 a 在这场表演中扮演特定的角色呀!
5. 算术赋值语句呀,就像给数字搭积木,一层一层堆起来!比如说“b -= 1”,不就是从 b 这个积木塔上拿掉一块嘛!
6. 哇塞,算术赋值语句那可是让数字乖乖排队的指挥棒呢!像“c
^= 2”,这指挥棒一挥,c 就得听令啦!
7. 算术赋值语句,不就是在数字的海洋里引领方向的灯塔嘛!比如“d %= 3”,给 d 指引特别的路径呢!
8. 嘿呀,算术赋值语句简直是数字王国的神秘口令!像“e &= 7”,就是对 e 下达的特殊指令哟!
9. 算术赋值语句,这可是能让数字变魔术的法宝呀!比如说“f |= 5”,让 f 瞬间有了新变化呢!
10. 哇哦,算术赋值语句不就是给数字注入活力的源泉嘛!像“g
<<= 2”,让 g 活力满满地前进呀!。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
赋值语句翻译
一. 任务要求在理解翻译原理的基础上.用C 语言写一个实现赋值语句翻译的程
序。
1定义赋值语句
2分析出翻译中要解决的问题
3明确翻译错误的表达以及处理
4程序设计以及调试
二. 实验目的.
加深对语法制导翻译原理的理解,掌握将语法所识别的语法范畴变换为某种中间代码的语义翻译方法
三. 赋值语句的定义
编译过程的语义分析阶段将要完成两项主要工作.首先分析语言的含义.接着用一种中间代码将这种含义描述出来。
四元式主要由4 部分组成..op,arg1,arg2,result
其中op 是运算符.arg1arg2 分别是第一和第二个运算对象.当op 是一目运算时.常
常将运算对象定义为arg1。
例如.表达式-C 和赋值语句X=a 的四元式可分别表示为
.@C-T
=a-X
四元式之间的联系是通过临时变量或已定义的变量来实现的.这样易于调整和变动四
元式.也为中间代码的优化工作带来很大方便。
例如.下图表示了一个表达式 X = a * b + c / d 的四元式序列。
(1) ( *, a, b, T1 )
(2) ( /, c, d, T2 )
(3) ( +, T1, T2, T3 )
(4) ( =, T3, -, X )
图3.1 表达式的四元式序列
编译系统中.有时将四元式表示成另一种更直观、更易理解的形式――三地址代码。
三地址代码形式定义为.
X a op b
其中X a b 可为变量名或临时变量名.a b 还可为常数.op 是运算符.这种表示法
与赋值语句的区别是每个语句的右边只能有一个运算符。
图3.1 的四元式序列可以表示成如
下三地址代码序列.
(1) T1 = a * b
(2) T2 = c / d
(3) T3 = T1 + T2
(4) X = T3
三地址代码形式突出表现了每一个四元式中参加运算的对象和结果变量.因此有两个地址为
操作对象的地址.第3 个为存放结果的临时变量.或用户自定义变量的地址。
这种表示形式
有利于中间代码的优化和目标代码的生成。
四. 翻译概述
五. 主程序代码段
void change(char a[20],char ch[])
{
int top=-1;//栈指针.初始值为-1
int i=0,n;
int j=0;
char sta[20];//符号栈
while(ch[i]!='#')
{
if(isalnum(ch[i]))//范围在A–Z, a–z, or 0–9
{
while(isalnum(ch[i]))
{a[j]=ch[i];
j++;
i++;
}//while
//a[j]=',';
//j++;
}
else//如果是符号.+,-,*,/,(,),(:=)以=表示
{
switch(ch[i])
{ case '=':
case '+':
case '-': if(sta[top]=='='||top==-1||sta[top]=='(') { top++;
sta[top]=ch[i++];
}//if
else
{a[j]=sta[top];
j++;
top--;
}//else
break;
case '*':
case '/':if(sta[top]=='*'||sta[top]=='/')
{a[j]=sta[top];//出栈
j++;
top--;
}//if
else
{
sta[top]=ch[i];//入栈
i++;
}//else
break ;
case '(': top++;
sta[top]=ch[i];
i++;break;
case ')': if(sta[top]=='(')
{ top--;
i++;
}//if
else
{a[j]=sta[top];
top--;
j++;
}//else
break;
default: cout<<" 你输入的有错误."<<endl;
ch[i]='#';
j=0;
break;
}//switch
}//else
}//while
while(top!=-1)//把sta 中剩余的符号赋到a 中
{
a[j]=sta[top];j++;
top--;
}//while
a[j]='#';
cout<<"四元式为: "<<endl;
n=0;
j=0;
while(a[n]!='#')
{
if(!isalnum(a[n]))
{ if(a[n]=='=')
cout<<setiosflags(ios::left)<<'('<<a[n]<<','<<a[n-1]<<','
<<'-'<<','<<a[n-2]<<')'<<endl;
else {cout<<setiosflags(ios::left)<<'('<<a[n]<<','<<a[n-2]<<',' <<a[n-1]<<','<<temp[j]<<')'<<endl;
move(temp[j],a,n);
j++;
}//if
n++;
}//while
}//change
六. 运行显示
1. 提示输入数据
2. 输入数据
记得以“#”结尾
3. 输出结果
4. 错误处理
七. 小结
完成了这次的任务.这是我的第一个任务.本组第三个任务.在前人基础上.没有走太多弯路.做起来还算顺利.但是初出茅庐还是有一定的挑战.有挑战才有进步。
计算机要学的知识浩瀚.小小成就.小小进步.激励下一个进步。