《編譯原理》課程實驗報告
實驗名稱:語義分析
姓名:學號:
地點:四教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是乙...