




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章 属性文法 8.1 简 述属性文法( Attribute Grammar)的概念首先由Knuth在1968年提出。顾名思意属性文法是带属性的一种文法。虽称是文法,但它不是用来描述文法,而是用来描述文法符号的属性关系的。因为其属性规则与产生式紧密相关,称它是面向文法的一种方法。凡是与文法的相关的问题均可试用属性文法这一工具。属性文法的最成功的应用是编译器的自动生成。有过一些成功的系统,如GAGkastens 82,HLPRaiha 78,SDCGpaulson 82;一些现实程序设计语言的编译程序前端,也用属性文法生成出来,其中包括pascalkastens&etal 82和AdaUnl&etal 82。属性文法可用来描述代码生成和优化Ganapthi & Fisher 82 Neal & Amirchachy 74,程序正确性与程序变换Gernert 75,数据流分析Farrow 77Babich & Jazayerl 78。Reps利用AG实现了基于属性文法的语言的程序设计环境Peps 83。为了方便起见,将knuth所提出的属性文法称为简单属性文法并记为AG。在给出AG的形式定义之前, 首先考虑一个文法例(8.1.0),它产生二进制数。二进制数由0,1和小数点“.”组成。 GR: 1. RN 4. NND 2. RN.N 5. D0 (8.1.0) 3. ND 6. D1文法本身并不含什么意义,它只说明什么样的终极符串是合法的。文法GR的合法终极符串(句子)为通常的二进制数, 可带小数点,但至多能带一个小数点。根据定义10.1, 001、111等都是文法GR的合法句子。那么它们究竟代表什么意义,可给出种种不同的定义。假设就定义它们代表的是相应的十进制实数, 比如前面几个二进制表示分别代表实数2.5,1和7。若用R.V表示R串所对应的十进制数, 用D.V表示D串所对应的十进制数,用N.V表示N串所对应的十进制数,用N.L表示N串的二进制长度,则显然其形式描述如图8.1.1所示。上述假设说明语法符号R有一个属性,并且其属性名定为V; 语法符号D有一个属性,并且其名定为V;语法符号N有两个属性, 并且其属性名分别定为V和L。图8.1.1是一种基于语法的属性求值规则式。它们将构成属性文法的核心部分即规则部分。从中可看出属性文法的特点是对每个语法符号确定一些属性, 并给出各属性值的计算规则。 语法规则 语义规则 r1: RN R.v = N.v r2: RN1.N2 R.v = N1.v+N2.v2-N2.L r3: ND N.v = D.v , N.L=1 r4: NN1 D N.v = N1.v2+D.v, N.L=N1.L+1 r5: D0 D.v = 0 r6: D1 D.v= 1 图8.1.1 属性文法例(8.1.1) 从上述语义规则可以看出其含义是非常直观的。但很显然属性文法的表示不是可执行的程序,如何用这些语义规则来求出属性值,是不那么明显的问题,因此需要说明。下面将对此做简单介绍。属性值的求值过程总的问题是这样一种问题,即给了一个合法的终极符串,问其属性值如何求?这里有时间和空间问题,因此很多人对属性求值方法进行了大量的研究.并提出了一些好方法。我们暂不考虑那些特殊的方法,而是考虑最一般而容易理解的方法,因为在此只希望使读者能了解到属性值是可用语义规则来求出的。具体计算过程可分为下面两大部分:STEP1:首先构造所给句子的属性树。属性树如图8.1.2所示,其中虚线部分表示各属性节点之间的关系。在构造树时对于每个内节点标上对应产生式编号。STEP2:利用属性的求值规则( 语义规则 )求属性树各结点的属性值,最终计算出根结点的属性值。 每次寻找一个能计算某属性值的结点, 并用它所依赖的已知属性值求出其属性值。上述结点可能很多, 这时可任选其中的任何一个结点。当求出根结点的所有属性值时终止。对于属性文法(8.1.1),我们有图8.1.2所示的计算图。v2.5R22L vN111L vN21vD11LvN20vD1 1 . 0 1vD图8.1.2 属性树 8.2 简单属性文法1968年knuth提出了属性文法概念,我们称这种属性文法为简单属性文法。简单属性文法的特点之一是,给每个语法符号的每个属性起相应的属性符号。为此引进下面符号: A(X).表示X的属性符号集 AI(X).表示X的继承属性符号集 AS(X).表示X的综合属性符号集其中X是语法符号,它们满足下面条件: AI(X)AS(X)=A(X), AI(X)AS(X)= AI(Z)=(Z为开始符), AI(t)=(t为终极符)属性分为继承属性和综合属性两大类。综合属性的一般特点是其值依赖于儿子的属性,而继承属性的一般特点是其值依赖于父亲或兄弟的属性。但这毕竟不是精确的说法,因此在定义属性时,对每个属性都要指出是继承性还是综合性。假设有产生式AA.A.A,且A有属性a,则由于有四个A,如果只写成A.a,则无法识别它指的是哪个A的属性a值。因此我们将采用带下标的办法, 比如用下产生式: AA1.A2.A3,表示原产生式。为方便计,我们把上述Ai称为A的别名。简单属性文法的重要特点之一是把语法规则和语义规则完全分开写。正是由于这个原因,迫使我们用别名以区分一个符号的不同出现。假设有原始的产生式 p: X0X1X2.Xnp则以后将该产生式写成别名形式,即写成下面形式(别名式产生式): p: X0*X1*X2*.Xnp*其中Xi*表示Xi的相应的别名。实际上如果把p产生式中的第i个符号表示为(p,i),则即可分开相同符号的不同出现,但为了简单起见将采用Xi*的表示法,尽管它没有表示是哪一条产生式的。定义 8.2.1. 属性出现设有产生式 p: X0*X1*X2*.Xnp* 并且 aA(Xi),0inp, 则称 Xi*.a为P产生式的一属性出现,并用AO(P)表示P产生式的属性出现之集: AO(P)= Xi*.a | aA(Xi),0inp .注 可用(a, k)或k.a的形式表示属性出现Xk*.a。例 8.2.1 . 对于属性文法(8.1.1)有 AO( 4 )=N1.V,N1.L,N2.V,N2.L,D.V AO( 2 )=R.V,N1.V,N1.L,N2.V,N2.L定义 8.2.2. 定义型出现 应用型出现设有p:X0*X1*X2*.Xnp * , aA(Xi),0inp, 则(1) 称Xi*.aAO(p)是定义型的, 若 a AI(X0), i=0, 或 a AS(Xi), i0 。(2) 称Xi*.aAO(p)是应用型的, 若 a AS(X0), i=0, 或 a AI(Xi), i0 。(3) 用DEF(p)表示AO(p)中的定义型属性出现之集,用APP(p) 表示AO(p)中所有应用型属性出现之集。它们之间的关系是: AO(p) DEF(p) APP(p)定义 8.2.3. 合法性 称一个语义规则为合法的,若其左部是应用型的属性出现,而右部是由常量和产生式左部的继承属性以及产生式右部的属性组成的合法属性表达式。假设有产生式 AB C D并且 i和s分别是A的继承属性和B的综合属性,则根据定义不能有形如下面的语义规则式: A.i = . ; B.s = .定义属性文法需要有一种专门用来定义属性文法的语言 (称为属性文法定义语言),其中最早出现并应用于编译器自动生成中的属性定义语言为ALDIN。我们不准备涉及语言的细节。定义 8.2.4. 产生式的属性相关图DGp设有产生式p:X0X1.Xn,则产生式p的属性相关图定义为: DGp =( DVp,DEp ) 其中DVp是产生式p的所有属性出现的集合即DVp=AOP(p),而DEp则以上述属性出现作为结点的一些边的集合,具体如下: DEp= (ati,atj) | ati,atjDVp,atj值依赖于ati值 例 8.2.2. 考虑下面所述的属性文法(8.2.1),其中有三个非终极符(F,M,B)和三个终极符(.,0,1)。该文法定义二进制小数。F只有一个综合属性(val),M和 B各有一个继承属性(pos)和一个综合属性(val)。其中pos表示一个二进位的小数点后位数。本属性文法的属性相关图如图8.2.2所示。AI(F) = , AI(M)=pos, AI(B)=pos,AS(F)=val, AS(M)=val , AS(B)= val 产生式 语义规则 1. F.M M.pos=1; F.val =M.val 2. MB B.pos=M.pos; M.val=B.val 3. MBM1 B.pos=M.pos; M1.pos=M.pos+1 M.val=M1.val+B.val 4. B0 B.val=0 5. B1 B.val=2(-B.pos)图8.2.1 属性文法8.2.1定义 8.2.5. 句子的属性相关图DG()(1) 设L是一个给定语言,是L的一句子,则的属性树是这样一棵树, 即在的语法树的每个结点上附上属性域部分而所得到的带属性的语法树,记为AT()。(2) 设是一句子,则把产生式的属性依赖关系DGp应用到的属性树AT()所得到的图,称之为的属性相关图,记为ADG()。DG3DG2DG1MvalposFvalMvalposBvalposMvalposBvalposDG5DG4BvalposBvalpos图8.2.2 产生式的属性相关图DGM1valpos定义 8.2.6. 良性属性文法称属性文法AG是良性的,如果对任一句子AG,其属性相关图ADG()都不包含任何环路。定义 8.2.7. 简单属性文法 AG简单属性文法AG是一个四元组:AG=(D,S,R,F),其中 D: DOMAIN部分。这部分是类型定义部分,它们将用来说明属性的类型。 S: SYMBOL部分。这是定义语法符号和属性符号的部分。对 于每个语法符号指出是终极符还是非终极符(对此还指出是不是开始符?),指出所有属性名,还指出其类别和类型。 R: RULE部分。其中给出语法规则和语义规则。 F: FUNCTION部分。其中自定义必要的函数。例 8.2.3. 下面是(8.2.1)的AG描述 DOMAIN 部分空(因下面只用到了标准类型) SYMBOL 部分: start : F nonterm: F val :REAL M pos: INT val :REAL B pos: INT val :REAL term : 0 , 1 其中 表示继承属性 ,表示综合属性 RULE 部分: 同于图8.2.1 FUNCTION 部分空(因为没用到自定义函数) 例 8.2.4. 属性域部分例。为了书写简单,我们将属性定义语言中的类型表示为论域方程的形式。例如:DOMAINENVIDETYPESTATIDEVALTYPErealT+boolTVALrealV(REAL)+boolV(BOOL)END例 8.2.5. 考虑顺序语句S1;S2的语义描述。假定语句的功能是给环境和状态,则输出一个状态, 因此对语句的语法符号S可定义三个属性,其中有两个输入属性(继承属性符:,),有一个输出属性(综合属性符: )。这三个属性的名字和属性类别可描述如下: S :ENV:STAT :STAT 在产生式 SS;S中,其右部共有四个继承性属性出现, 而左部则有一个综合性属性出现,故语义规则中有五个规则式: RULE: S1S2;S3 S2. S1.;S2. S1.; S3. S1.;S3. S2.; S1. S3.我们也可把属性模式取为如下: S :ENV :STATSTAT这时相应的语义规则可如下: RULE: S1S2;S3 S2.e S1.e; S3. S1.e; S1. (S2.) 。(S3.)例 8.2.6. 考虑说明DD;D | var id:T 的语义问题。 假设说明的功能是给一个环境,则输出一个环境。这样可给语法符号D确定两个属性,其中前者是继承的,而后者是综合的: D :ENV :ENV T :ENV t :TYPE下面是语义规则部分: RULE : D1D2;D3 D2. D1.;D3. D2.; D1. D3.;Dvar id :T T. D.; D. ( D.)id.sT.t 其中s是id的综合属性符,id.s则表示对应id的实际标识符。例 8.2.7. 考虑赋值语句的属性文法。 在赋值语句中用到表达式, 因此也要涉及到表达式的属性文法。对于表达式和赋值语句可有以下两种属性定义(省略了类型部分):1 S Ev2 S E下面是赋值语句id:=E的属性规则式部分: 1 S id:=E E.eS.e; E.s S.s; S.s (S.s)E.v/id.s 2 S id:=E E.eS.e; S.sls.s (E.b)s / id.s 在这里我们假设了环境是标识符到值的映射,并且没考虑语义错误的检查问题。例 8.2.8. 下面是条件语句的属性规则部分: 1 Sif E then S1 else S2 E.e S.e;E.s S.s; S1.e S.e;S1.s S.s; S2.e S.e;S2.s S.s; S.s ( E.v S1.s, S2.s ) 2 Sif E then S1 else S2 E.e S.e ; S1.e S.e ; S2.e S.e ; S. ls.(E.b)s (S1.)s, (S2.)s )例 8.2.9. 考虑循环语句while E do S 的语义描述问题。当用上述第一属性模式时,将会遇到不可抗拒的阻力,读者不妨试一试。下面将给出在第二种属性模式下的语义描述。具体属性规则如下: RULE Swhile E do S E.e S.e; S.e S.e; S. (l.(ls.(E.b)s (S.)s), s )其中是最小不动点算子。从上例可以看出,对于循环语句的动态语义来说,属性文法是不太方便的,因此说属性文法是适合于静态语义的描述,而不适合于动态语义的描述。这一点读者应深刻地领会。 8.3 扩展属性文法 EAG简单属性文法的特点是把语法规则和语义规则区分开,这种规定使得在简单属性文法中出现大量的复写型语义规则,从而使AG的表示显得沉长而烦琐。由Watt & Madsen1977提出的扩展属性文法EAG与AG相反,把要计算的表达式直接附到语法符号上,没有单独的语义规则式,语法符号也没有属性符号。形式上的区别,从下面例子即可看出来: AG表示: DD;D D2.e D1.e; D3.e D2.e; D1.e D3.e EAG表示: ; 从上例可看出,EAG表示比AG表示简短而直接得多。在上例AG表示中,语义规则全是复写型规则, 而在EAG表示中就没了这些复写动作,其次和类符号在AG中是属性符号,而在EAG中则都是变量(属性变量),即EAG没有属性符号概念。在EAG中,同一规则式中的相同属性变量具有相同值。上例中的EAG规则式中D有两个属性,其中前者是继承属性,而后者是综合属性。具体说第一属性为输入环境(继承),第二属性为输出环境(综合)。EAG方法的主要思想是:对每个语法符号确定属性个数(但不起属性名),并指明每个属性是哪类的(继承,综合)和什么类型的(属性域);其次定义必要的属性变量,并把计算的属性表达式直接写在语法符号的相应位上(没有单独语义规则)定义 8.3.1. 属性表达式1) 常量是属性表达式。2) 属性变量是表达式。3) 由常量和属性变量以及函数调用(包括标准中缀操作)组成的合法式子是属性表达式。定义 8.3.2. 扩展属性文法EAG扩展属性文法EAG是六元组:EAG=(D,F,S,Z,V,R),其中 D: 属性域部分 F: 自定义函数部分 S: 语法符号及其属性部分 Z: 文法开始符 V: 属性变量部分 R: 规则部分语法符号及其属性部分,对每个语法符号指出有几个属性, 以及每个属性的类型和类别(继承,综合),如 D ENVENV它表示D有两个属性,其中第一属性的类型是ENV,类别是继承型;而第二属性的类型是ENV,类别是综合型。注意,这里没用到属性符号,这一点和简单属性文法不一样。属性变量部分定义属性变量,相当于变量说明。如: , :STAT , :ENV规则式部分给出EAG规则式,如 ;它表示对应的产生式为DD;D。在规则式中把每个语法符号均用括起来, 其内部首先是语法符号本身,后面是属性类别符(或),接着是属性表达式,重复上述过程。当语法符号没有属性时, 我们将用语法符号本身。同一EAG规则式中的同一变量具有相同的值。对前面规则式来说有三个属性变量、和。其中是规则式左部的继承属性,因此可视为是已知的。第二个D的继承属性值等于第一个D的继承属性值即,而D的功能是只要给出继承属性值,则即可算出其综合属性值部分,因此可假设其综合属性值是什么()。对于第三个D也是类似。例 8.3.1. 语法符号及其属性描述例start : P.开始符 nonterm:P STAT ;.程序 D ENVENV;.说明T TYPE;.类型 E ENVSTATEV;.表达式S ENVSTATSTAT.语句term :id IDE;.标识符n REAL;.常数例 8.3.2. 属性变量及其类型描述例 , :STAT;, :ENV ;t :TYPE; s :IDE;v :REAL;例8.3.3. 表达式语义的EAG规则式例。假设表达式的功能是:给环境和状态则输出一个值。其中环境是IDE到VAL映射。类型只有实型和布尔类型。 E ENVSTATEV n INT id IDE true 例 8.3.4. 语句语义的EAG规则式例(不包括循环语句)。我们假设语句的功能是:给环境和状态,则输出一新的状态。表达式的功能同前。 S ENVSTATSTAT skip := ; if then else 通俗地理解EAG属性规则的办法是,把理解为input参数的标志,把理解为output参数的标志,并把形如的单位理解为函数调用S(e,s;s),其中“;”表示其前面是input参数。比如上述条件语句的规则式可视为如下过程定义:proc S( e,s; s ) E(e,s; v ) ;S(e,s; s); S(e,s ;s ) ; s :=( vs, s ) 例 8.3.5. 循环语句语义的EAG规则式例。 S ENV STATSTATE ENV STATEV e: ENV; s: STAT; b: STATEV ; ,: STATSTAT while do 例 8.3.6. 说明的语义规则例。 说明的产生式部分定义如下: Dec var id: Type | proc id: Modu | Dec;DecDec的功能还是给环境,则产生新的环境, Modu的功能是给环境则产生(STATVAL*STAT)域上的函数,Type的功能是给环境则产生一类型值。根据上述说明,语法符号Dec的属性定义部分可如下: ENV =IDEvar(TYPE) + pro(STATVAL*STAT) STAT =IDEVAL Dec : ENVENVType: ENV TYPEModu: ENV (STATVAL*STAT)id: IDE下面是说明的EAG规则式部分: var : proc : 8.4 属性文法的应用前面介绍了简单属性文法和扩展属性文法,并且用属性文法描述了一些语言成分的动态语义。但读者应清楚地知道,属性文法主要适用于静态语义的描述,而不太适用于动态语义的描述,这一点已从循环语句的语义描述中看到。在构造编译器时,很重要的工作是构造语义分析器和中间代码生成器。比较适用的方法之一就是用属性文法。因此这一节将介绍属性文法在静态语义分析和中间代码生成描述中的应用。这些内容有助于编译器构造的理解,读者应用心地去掌握所述内容。 类型的语义分析描述类型是任何程序设计语言中都是最重要的静态语义部分。类型的语义分析中的主要工作是把类型的源代码表示转换成可操作的数据结构形式。我们考虑的是类型表达式,而不是考虑类型定义部分。假设类型表达式中有自定义的类型标识符,因此当考虑类型表达式时,必须给出标识符的环境。作为例子首先考虑如下类型:T integer | boolean | RT | arrayRT of TRTN.N其内部表示定义为如下:TYPEint+bool+range(RANGE)+array(RANGETYPE)RANGEINT INT下面是类型内部表示的EAG表示部分: 类型部分: ENVIDE typeDV(TYPE)+. 属性部分: T ENVTYPE RT RANGE 属性变量: e: ENV; t: TYPE; n1,n2: INT; rg: RANGE 规则部分: integer boolean array of 下面再考虑带变体的记录类型。 语法定义: Trecord FieldL endFieldLFixPart ; VariPart FixPartField | Field ; FixPartFieldid: TVariPartcase id:T of VPairLVPairLVPair | VPair ;VPairLVpairc:(FieldL) TYPE record(FIELD*)+.FIELD FPVPFP (IDETYPE) *VP IDETYPEVPAIR*VPAIR CONSFIELD* record end ; ; : case : of ; : 表达式内部树的EAG描述 下面考虑在构造表达式内部树的同时求出表达式类型的问题。如果类型有错则产生(error,error),否则产生(type,tree),其中type是类型的内部表示,tree是所构造的内部树。下面是EAG描述,其中给出了内部表示的定义和属性模式以及属性规则式部分 ETREE error+cons(INT)+var(IDE )+ add( ETREE ETREE )+ mul( ETREE ETREE )TYPE error + int +.ENV IDEDV E ENVTYPE ETREE + typeOf(e(s) 表示标识符s的类型 t?t 表示如果t=t,则t,否则是 error。 A(et,et) 表示若et或et为error,则其结果为error,否则其结果为 add(et,et)。 M(et,et)与此类似。注意,在我们所考虑的表达式产生式中并没有标识符和常数部分的产生式。这就表示所考虑的表达式实际上是经词法分析后的内部表示。在内部表示中每个标识符已变成(id,s)的形式,而产生式中的id则实际上是指上述对偶(id,s),其中的s是某具体标识符名(如x1,y1)。语义规则中的ids则表示(id,s)中的s。常数情形也类似。如果考虑的是语义分析后的表达式,则其中标识符已变成(id,s)的形式,但此时s应表示某标识符的属性表地址或变量的地址,而不是变量名本身。相应地ids应表示表地址或存储地址。具体要哪种可由用户来确定。 语句内部树的EAG描述 考虑语句的内部树。其中用到表达式,但表达式的内部树部分在前面已考虑过,因此在此不再给出。语句的内部树结构如下面所述,如果有语义错误,则输出error。因为我们用的是函数式表示,没有指针概念。 S ENVSTREE EENV TYPE ETREE STREE error +skip + ass(IDEETREE) + seq(STREESTREE)+ if(ETREESTREESTREE)+ while(ETREESTREE) skip := wherre ASS(s,t,et)if t?typeOf(e(s)=error then error else ass(s,et) ; wherre SEQ(st,st) error ,若if st或st为error seqst,st),否则 ifthen else wherre IF(et,st,st) 略 while do wherre IF(et,st,st) 略 表达式多元式的EAG描述 我们假设被处理的是语义分析后的表达式的内部表示,其中常数n被表示为(int,n),标识符x则被表示成(id,s),其中s表示原标识符在标识符属性表中的地址。假设在做语义分析时,已进行了语义错误检查,因此, 不需要做这项工作。在这里主要考虑算术表达式。表达式的处理结果要得到两个部分,一是其多(四)元式部分,二是表达式的结果。如果表达式是一个常量或变量,则其四元式部分为空,并且其结果为常量或源变量;否则多元式部分为非空,并且其结果为一临时变量。表达式的多元式由操作码、分量1(operand1)、分量2(operand2) 和结果(result)部分组成,具体可描述如下:TUPLE add(OPEROPERRESULT)+ mul(OPEROPERRESULT) + .OPER cons(INT)+var(ENTER)+tem(TEMP)+.RESULT OPERTEMP ENTER = ADDR 其中ENTER表示标识符属性表的表项地址,TEMP表示临时变量的地址。多元式中分量可以是一个整数或一变量(地址)或一临时变量(地址)。设有表达式2b+c,则其多元式中间代码为如下: mul(2, b, T1) | add(T1,c,T2)而其结果为T2。这是一种简写,实际其中的2表示cons(2);b则表示var(addr),其中addr是变量标识符b的地址;而Ti则表示tem(addr),其中addr为Ti的地址。下面是EAG描述部分。标识符的地址可从环境求得,而临时变量的地址则由转换部分依次生成。对每个表达式要给出可用的初始临时变量地址,作为输出还要给出下一可用临时变量地址。Exp: TEMPEQUAD* RESULT TEMP E tmvar(s)tm E tmcons(n)tm + 因为没用到全程变量,表达式的属性较多。若用newTemp表示产生新临时变量的无参全程函数,且用过程式语句形式写语义规则则可去掉临时变量部分,从而得到较简单的表示。具体如下: Exp: TUPLE* RESULT 1 Eid E.res:=var(id .s); E.code:=2 EN E.res:=cons(N.n); E.code:= 3 EE1+E2 E.res:= newTemp E.code:=|add(res,res,tem(E.res) 4 EE1E2 E.res:= newTemp E.code:=|mul(res,res,tem(E.res) 图8.4.1 表达式多元式 语句多元式的EAG描述 为了描述语句的多元式结构,我们将扩充前面所定义过的多元式TUPLE。具体如下:TUPLE ass(OPEROPER) + fjmp(OPERLABEL) + jmp(LABEL) + lable(LABEL) + add(OPEROPERRESULT) + mul(OPEROPERRESULT)其中OPER和RESULT同前。TUPLE实际上是指令集,其中ass对应赋值指令, fjmp对应“若假则转”指令, jmp对应无条件转指令,label对应标号定义,and和mul同前。为考察语句S所需要的属性,下面将考虑条件语句 if E then S1 else S2的多元式结构。显然,上述条件语句可表示为下面多元式形式 S.codeE.codefjimp( E.res, L )S1.codejmp( L* )label( L )S2.codelabel( L* )从上可知,产生语句S的多元式;需要两个标号L和L*。其中L表示S2的起始标号,而L*则表示S的后继标号。如果用S.inp表示语句S的输入标号,用S.out表示语句S的输出标号,则有L=S.inp,L*=S2.out,因此上面条件语句的多元式可表示为如下: S.codeE.codefjmp(E.res, S.inp)S1.codejmp(S2.out )label(S.inp)S2.codelabel(S2.out )对于while语句Swhile E do S1我们有 S.codelabel(S.inp )E.codefjmp(E.res, S1.out)S1.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 应急安全教育培训感想课件
- 2023年度重庆资源与环境保护职业学院单招《物理》全真模拟模拟题附参考答案详解【完整版】
- 2024施工员题库附答案详解(夺分金卷)
- 计算机四级真题(能力提升)附答案详解
- 2025年咨询工程师高分题库【原创题】附答案详解
- 私人之间供货合同(标准版)
- 授权公司合同(标准版)
- 农业土地租赁合同(标准版)
- 订购门窗合同(标准版)
- 2025年中级软考综合提升测试卷完整附答案详解
- 2025年健康管理师职业技能考试笔试试题(100题)含答案
- 数据安全风险监测和预警管理流程
- 2025-2030中国川式调料行业市场发展分析及前景趋势与投资研究报告
- 2025年大学生英语六级必考词汇表全部汇编(带音标)
- 2025年芜湖鸠兹水务有限公司下属子公司招聘笔试参考题库含答案解析
- 建筑工地消防安全责任制模板
- 小儿哮喘支气管哮喘中医临床诊疗方案
- 医疗器械经营质量管理制度及工作程序-完整版
- 应急药箱清单及检查表
- T-SXPFS 0005-2024 山西省转型贷款企业方案编制手册(试行)
- 办公室年度活动策划方案
评论
0/150
提交评论