語義分析(輸出四元式)

2021-08-20 22:09:23 字數 2757 閱讀 8444

《編譯原理》課程實驗報告

實驗名稱:語義分析

姓名:學號:

地點:四教302       

教師:院系:

專業:電腦科學與技術15-1

一.  實驗目的

通過上機實習,加深對語法制導翻譯原理的理解,掌握將語法分析所識別的語法成分變換為中間**的語義翻譯方法。

二.  實驗內容

採用遞迴下降語法制導翻譯法,對算術表示式、賦值語句進行語義分析並生成四元式序列。

輸入:begin a:=2+3*4;x:=(a+b)/c  end #

輸出:(1)t1=3*4   (2)t2=2+t1  (3)a=t2

(4)t3=a+b  (5)t4=t3/c     (6) x=t4

三.實驗步驟

語義分析主程式示意圖

**如下:

#include "stdio.h"

#include "string.h"

#include "stdlib.h"

char prog[100],token[8],ch;

char*rwtab[6]=;

int syn,p,m,n,sum,q;

int kk;

struct quad[20];

char *factor();

char *expression();

int yucu();

char *term();

int statement();

int lrparser();

char *newtemp();

scaner();

emit(char *result,char *ag1,char *op,char *ag2);

main()

while(ch!='#');

p=0;

scaner();

lrparser();

if(q>19)printf(" to long sentense!\n");

else for (j=0;j//getch();

int lrparser()

else

{ syn=17;

p--;

break;

case '+': syn=13; break;

case '-': syn=14; break;

case '*': syn=15;break;

case '/': syn=16;break;

case '(': syn=27;break;

case ')': syn=28;break;

case '=': syn=25;break;

case ';': syn=26;break;

case '#': syn=0;break;

default: syn=-1;break;

emit(char *result,char *ag1,char *op,char *ag2)

strcpy(quad[q].result1,result);

strcpy(quad[q].ag11,ag1);

strcpy(quad[q].op1,op);

strcpy(quad[q].ag21,ag2);

q++;

輸出結果為:

四.總結與回顧

實驗報告成績評定表

評定專案

內           容

滿 分評  分

總  分

實驗態度

態度端正、遵守紀律、出勤情況

20實驗過程

按要求完成演算法設計、**書寫、注釋清晰、執行結果正確

40報告撰寫

報告書寫規範、內容條理清楚、表達準確規範、上交及時。

40評語:

指導老師簽字:                     年    月   日

條件語句 四元式

寫出下面條件語句的四元式 if ad then x a b else x a b 1,a and b 如果a為0,就不用 b的結果了 對於當前的if語句而言,若 a b,則直接執行else 2,下面的語句加入是從位址為100開始的 3,語句中ad e2 e1t表示a j a,b,e1t 表示a j,...

四元數與姿態陣間的關係式推導

下文摘自秦永元的 慣性導航 第二版 設有參考座標系r 座標軸x0 y 0 z 0 座標軸方向的單位向量為i0 j0 k0。剛體相對r 系做定點轉動,定點為o 取座標系b 與剛體固聯,b 系的座標軸為x y z 座標軸方向的單位向量為i j k 假設初始時刻b 系與r 系重合。為了便於分析剛體的空間位...

編譯原理 結合例題徹底理解文法四元式與正則文法

這篇部落格起源於一道很有趣的正則文法的題目。題目描述如下 已知l 且x中含有1011子串 構造接收語言l的正則文法。什麼是正則文法呢?首先需要了解什麼是文法。我們知道,編譯原理中的文法g是乙個四元式 g vt是乙個非空有限集,它的每個元素為終結符號。也就是說vt是由文法中的終結符構成的集合。vn是乙...