實驗1 詞法分析實驗報告

2021-08-13 17:01:53 字數 2959 閱讀 1493

軟體學院

《編譯原理》實驗報告

題目詞法、語法分析

專業軟體工程

班級rb軟體w101

學號201007104141

學生姓名田博

指導教師陸筱霞

日期2013-6-21

除錯並完成乙個詞法分析程式,加深對詞法分析原理的理解。

1、 待分析的簡單語言的詞法

(1) 關鍵字:

begin if then while do end

所有關鍵字都是小寫。

(2) 運算子和界符< <= <> > >

(3) 其他單詞是識別符號(id)和整型常數(num),通過以下正規式定義:

id=letter(letter| digit)*

num=digit digit *

(4) 空格由空白、製表符和換行符組成。空格一般用來分隔id、num,運算子、界符和關鍵字,詞法分析階段通常被忽略。

2、 各種單詞符號對應的別碼

3、 詞法分析程式的輸入

所給文法的源程式字串。輸出:二元組(syn,token或sum)構成的序列。其中:syn為單詞種別碼;

token為存放的單詞自身字串;

sum為整型常數。

#include#include#includechar prog[80],token[8];char ch;int syn,p,m=0,n,row,sum=0;char *rwtab[6]=;

void scaner()

if((ch>='a'&&ch<='z')||(ch>='a'&&ch<='z'))

token[m++]='\0';

p--;

syn=10;

for(n=0;n<6;n++)

if(strcmp(token,rwtab[n])==0)

syn=n+1;

break;

}else if((ch>='0'&&ch<='9'))

p--;

syn=11;

if(sum>32767)

syn=-1;

}else switch(ch)

else if(ch=='=')

else

break;case'>':m=0;token[m++]=ch;

ch=prog[p++];

if(ch=='=')

else

break;case':':m=0;token[m++]=ch;

ch=prog[p++];

if(ch=='=')

else

break;case'*':syn=13;token[0]=ch;break;case'/':syn=14;token[0]=ch;break;case'+':

syn=15;token[0]=ch;break;case'-':syn=16;token[0]=ch;break;case'=':syn=25;token[0]=ch;break;case';':

syn=26;token[0]=ch;break;case'(':syn=27;token[0]=ch;break;case')':syn=28;token[0]=ch;break;case'#':

syn=0;token[0]=ch;break;case'\n':syn=-2;break;default: syn=-1;break;

}}void main()

while(ch!='#');

p=0;

do}while (syn!=0);}

4、 給定源程式

begin x:=9; if x>0 then x:=2*x+1/3; end#

輸出結果

5、 源程式(包括上式未有的while、do以及判斷錯誤語句):beginx<=$;whilea<0dob<>9-x;end#輸出結果

通過此次實驗,讓我了解到如何設計、編制並除錯詞法分析程式,加深對詞法分析原理的理解;熟悉了構造詞法分析程式的手工方式的相關原理,根據識別語言單詞的狀態轉換圖,使用某種高階語言(例如c++語言)直接編寫此法分析程式。另外,也讓我重新熟悉了c++語言的相關內容,加深了對c++語言的用途的理解。比如:

main()函式中,用cin>>ch;語句得到ch值的話,給定源程式的結果第一行得到的是(10,beginx),因為得到的字串中省略了空格,改用cin.get(ch);問題便解決了。另外,我在程式中加入了row變數,以便能夠準確得到錯誤所在。

編譯原理語法分析器實驗報告

1、實驗目的:

結合課堂上學習的理論知識,通過c++實現語法分析器,更加深入的掌握語法分析;同時也可以更加了解語法分析的原理。

2、實驗過程:

1、設計思路:

首先判斷輸入文法是否為算符文法,若是算符文法則構造它的firstvt和lastvt集,然後構造它的算符優先表,判斷是否為算符優先文法;最後進行歸約。

2、實驗過程中的問題:

一開始實驗很生疏,很難把理論知識融匯到程式設計上,後來通過多次看ppt和書本內容,漸漸把握到訣竅; 不明確輸入輸出;這個也是通過ppt解決;和以前編其他東西很不一樣,一開始不知道如何下手;通過網上的成熟**學習了下。實驗**:#include#include#includetypedef structarray;

typedef struct charlode;

typedef structcharstack;

char str[80][80],arr[80][80],brr[80][80];array f[20];int m,kk,p,ppp,ff=1;char r[10];int crr[20][20],flag=0;char ccrr1[1][20],ccrr2[20][1];

void initstack(charstack &s)//定義棧

int isletter(char ch) //判斷是不是大寫字母(非終結符)

//judge1是判斷是否是算符文法:若產生式中含有兩個相繼的非終結符則不是算符文法int judge1(int n){

詞法分析實驗報告

實驗報告 課程名稱編譯原理 實驗名稱詞法分析實驗 班級學號姓名指導教師 實驗日期 一 實驗目的 1.了解詞法分析的主要任務。2.熟悉編譯程式的編制 通過設計 除錯詞法分析程式,實現從源程式中分出各種單詞的方法 熟悉詞法分析程式所用的工具自動機,進一步理解自動機理論 掌握文法轉換成自動機的技術及有窮自...

編譯原理詞法分析實驗報告

實驗1 詞法分析實驗報告 一 實驗目的 除錯並完成乙個詞法分析程式,加深對詞法分析原理的理解。二 實驗要求 1 待分析的簡單語言的詞法 1 關鍵字 begin if then while do end 所有關鍵字都是小寫。2 運算子和界符 3 其他單詞是識別符號 id 和整型常數 num 通過以下正...

編譯原理詞法分析實驗報告

實驗一詞法分析器設計 實驗目的 1 熟悉詞法分析的基本原理,詞法分析的過程和詞法分析中要注意的問題。2 複習高階語言,進一步加強用高階語言來解決實際問題的能力。3 通過完成詞法分析程式,了解詞法分析的過程。實驗內容 用c語言編寫乙個pl 0詞法分析器,為語法語義分析提供單詞,使之能把輸入的字串形式的...