首页 > 其他分享 >实验 5 语义分析和中间代码生成器 (Price 600)

实验 5 语义分析和中间代码生成器 (Price 600)

时间:2024-06-02 20:32:16浏览次数:25  
标签:600 生成器 Price t2 else while 数组 jnz t1

WX: help-assignment
code price 600

实验 5 语义分析和中间代码生成器

语义分析器分两部分,第一部分为赋值表达式,第二部分为数组、布尔表达式和控制语句。
要求
参考课本 6.4.2、6.4.3 和 7.3、7.4、7.5,实现递归下降翻译器。
注意
数据结构:
四元式:结构体
四元式序列:结构体数组
跳转语句的四元式的第 4 个域需回填。
测试
while(a<b)
if©
while(d>e)
x1=y1; else
x2=y2;
x3[k]=y3[i,j];

翻译模式与步骤
按以下顺序完成语义分析

  1. 赋值语句的翻译说明:
    设文法符号为 X,其属性如下:
     X.place:存放 X 值的变量的名字;
     X.inArray:指向符号表中相应标识符表项的指针,若不使用符号表,则 X.inArray 即为标识符。
     函数 emit( ):生成四元式语句;
     函数 newtemp( ): 生成一个临时变量的名字,如 t1。
    测试:
    输入: a=6/b+5*c-d; 输出:
    0: /, 6, b, t1
    1: *, 5, c, t2
    2: +, t1, t2, t3
    3: -, t3, d, t4
    4: =, t4, -, a
  2. 数组的翻译说明:
    设文法符号为 X,其属性如下:
    X.inNdim:下标表达式的个数,及维数
    X.inPlace:存放由 Elist 中的下标表达式计算出来的值
    X.array:指向符号表中相应数组名字表项的指针
    X.place:若 X 为简单名字,X.place 为指向符号表中相应此名字表项的指针;若 X 为数组名字,X.place 为 数组地址中常量部分
    X.offset:若 X 为简单名字,X.offset 为 null;若 X 为数组名字,X.offset 为数组地址中变量部分
    limit(array, j):返回 nj,即 array 数组的第 j 维长度,如 10、20 等。本实验中,就用字符串 nj 表示,如 n1、n2、n3 等
    测试 1: 输入:
    x=A[i];
    输出:
    0: -, A, C, t1
    1: *, i, w, t2
    2: =[], t1[t2], -, t3
    3: =, t3, -, x
    测试 2:输入: x=A[i, j];
    输出:
    0: *, i, n2, t1
    1: +, t1, j, t1
    2: -, A, C, t2
    3: *, t1, w, t3
    4: =[], t2[t3], -, t4
    5: =, t4, -, x
  3. 布尔表达式的翻译测试 1: 输入: while(a
    1: 输入:
    while(a<b)
    if©
    x=y+z;
    else
    x=y-z; a=y;
    输出:
    0: j<,a,b,-
    1: j,-,-,-
    2: jnz,c,-,-
    3: j,-,-,-
    4: +,y,z,t1
    5: =,t1,-,x
    6: -,y,z,t2
    7: =,t2,-,x
    8: =,y,-,a
    测试2:
    输入:
    if(a<b)
    while©
    if(d)
    x=y+z; else
    m=n;
    else
    s=t;
    u=v;
    输出:
    0: j<, a, b, -
    1: j,-,-,-
    2: jnz, c, -,-
    3: j,-,-,-
    4: jnz, d, -,-
    5: j, -,-,-
    6: +, y, z, t1
    7: =, t1,-,x
    8: =, n,-, m
    9: =, t,-, s
    10: =, v,-, u
    4.控制语句的翻译说明:
    merge(p1,p2):把以p1和p2为链首的两条链合并为一,将p2的链尾的第4区段改为p1,合并后的链首为p2,回送合并后的链首测试1:
    输入:
    while(a<b)
    if©
    x=y+z;
    else x=y-Z; a=y;
    输出:
    0: j<,a,b,2
    1: j,-,-,10
    2: jnz, c,-,4
    3: j,-, -, 7
    4: +, y, z, t1
    5: =, t1,-, x
    6: j, -, -, 0
    7: -, y, z, t2
    8: =, t2,-, x
    9: j,-,-,0
    10: =, y,-, a
    测试 2:
    输入: if(a<b)
    while©
    if(d)
    x=y+z; else
    m=n;
    else
    s=t; u=V;
    输出:
    0: j<, a, b, 2
    1: j,-,-,12
    2: jnz, c,-, 4
    3: j,-,-,13
    4: jnz, d, -, 6
    5: j,-,-,9
    6: +, y, z, t1
    7: =,t1,-,x
    8: j,-,-,2
    9: =, n,-,m
    10: j,-,-,2
    11 j,-,-,13
    12: =,t,-,s
    13: =,v,-,u

标签:600,生成器,Price,t2,else,while,数组,jnz,t1
From: https://blog.csdn.net/telnet3000/article/details/139225152

相关文章

  • 红米AX6000 Openwrt FIP 没权限 Can't open device for writing!
     ......
  • 二维码生成器 ZXing.Net 组件应用
    c#二维码生成器(ZXing.Net)实现安装组件CodeusingSunny.UI;usingSystem;usingSystem.Collections.Generic;usingSystem.Drawing;usingSystem.Drawing.Imaging;usingSystem.Windows.Forms;usingZXing;usingZXing.Common;usingZXing.QrCode.Internal;namespace......
  • EG2106 原装正品 贴片SOP-8 大功率MOS管栅极驱动芯片耐压600V
    EG2106在电机控制中的应用非常广泛,下面是一些典型的应用案例: 1.无刷直流电机(BLDC)控制:EG2106可以用于驱动无刷直流电机的功率MOSFET或IGBT。在无刷电机控制器中,通常会用到H桥电路来控制电机的正反转和转速,EG2106的高电压和大电流能力使其非常适合这种应用。 2.步进电......
  • 在Python中使用生成器:高效处理大型数据集
    生成器是Python中强大且高效的概念,它能够帮助我们处理大型数据集,同时节省内存空间。本文将深入讨论生成器的概念、用法和优势,通过代码案例帮助读者更容易理解和掌握这一高级知识点。生成器的介绍生成器是一种特殊的迭代器,它能够在需要时生成值,而无需在内存中同时存储所有......
  • ORA-600 2131故障处理---惜分飞
    联系:手机/微信(+8617813235971)QQ(107644445)标题:ORA-6002131故障处理作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]数据库启动报ORA-6002131错误,查看alert日志发现是在mount过程报错FriMay1720:58:282024Startin......
  • 数据库open报ORA-600 kcratr_scan_lastbwr故障处理---惜分飞
    联系:手机/微信(+8617813235971)QQ(107644445)标题:数据库open报ORA-600kcratr_scan_lastbwr故障处理作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]由于断电,导致数据库正常open报ORA-600kcratr_scan_lastbwr错误WedJan1......
  • Multi-Target ADS-B Signal Simulator ADSB-SIM600
    目录IntroductionSpecificationsSystemArchitectureUsagePrecautionsConfigurationSoftwareIntroductionADSB-SIM600isamulti-targetADS-BsignalsimulatorthattransmitsADS-Bsignalsat1090MHz,capableofsimulatingthetransmissionofADS-Bsigna......
  • geotrust通配符证书600元且赠送一个月
    GeoTrust作为国际知名的数字证书颁发机构,旗下有RapidSSL、QuickSSL等子品牌经营着各种类型的SSL数字证书,其中RapidSSL旗下的SSL数字证书都是入门级的,性价比高。审核速度也比较快,证书的适用范围也比较广泛。今天就随SSL盾小编了解GeotrustRapidSSL旗下的通配符SSL证书。1.Geot......
  • echarts渐变内置生成器echarts.graphic.LinearGradient
    在使用echarts绘制图表时,如果需要使用渐变色,则应使用echarts内置的渐变色生成器echarts.graphic.LinearGradientseries:[{name:'',type:'bar',barMaxWidth:20,label:{show:true,color:'#fff',},......
  • FMC子卡设计原理图:FMC150-两路250Msps AD、两路600Msps DA FMC子卡
    FMC150-两路250MspsAD、两路600MspsDAFMC子卡   一、板卡概述·  ADC采用TI的ADS62P49,2通道250M,14bit,共1片;·  DAC采用ADI的AD9122,2通道,16bit,可达1.2G,共1片;·  时钟采用AD9516,支持板上时钟和外接时钟;·  共6个SSMB接口,1个FMC/LPC接口 ......