編譯原理簡單語法分析

2021-08-16 02:53:08 字數 3768 閱讀 3118

一、實驗目的:

了解掌握算符優先分析的基本方法、內容;

學會科學思考並解決問題,提高程式設計能力。

二、實驗內容與要求:

用算符優先分析方法設計乙個分析解釋程式,對輸入的賦值語句、輸出語句、清除語句進行詞法分析、語法分析、表示式求值並儲存於指定變數中;若存在錯誤,提示錯誤相關資訊。

三、文法表示:

s→v=e|e?|clear

e→e+t|e-t|t

t→t*f|t/f|f

f→ (e)|v|c

四、設計思路

(1)       設計儲存資料結構

char *vn=0,*vt=0;//非終結符和終結符陣列

char firstvt[n][n],lastvt[n][n],table[n][n];

typedef struct   //符號對(p,a)

vn_vt;

typedef struct  //棧

stack;

(2)  根據文法求firstvt集和lastvt集

(3)       構造算符優先分析表

(4)       構造總控程式

五、程式**:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define

max507

#define

_crt_secure_no_warningscode

using

namespace

std;

class

wfvoid

insert

(char

str)

void

print

()};

char

relation

[max

][max

];vector

<

char

>vt;

vector

<

wf>

vn_set

;map

<

string

,int

>

vn_dic

;set

<

char

>

first

[max

];set

<

char

>

last

[max

];int

used

[max

];int

vis[

max];

void

dfs(

intx

)else

first[x

].insert

(str[0

]);}

}void

make_first

()#endif

}void

dfs1

(intx)

else

last[x

].insert

(str[n

]);}

}void

make_last

()#endif

}void

make_table

()if

(isupper

(str[k

])&&

!isupper

(str[k

+1]))if(k

>

str.

length()-

2)continue;if

(!isupper

(str[k

])&&

!isupper

(str[k

+2])&&

isupper

(str[k

+1]))relation

[str[k

]][str[k

+2]]=

'=';}}

#define

debug

#ifdef

debug

for(

inti=0

;isize()*

5;i++)

printf

("-"

);printf("

算符優先關係表"

);for

(inti=

0;isize()*

5;i++)

printf

("-"

);puts(""

);printf

("|%8s|",""

);for

(inti=

0;isize

();i

++)printf

("%5c%5s",vt

[i],"|"

);puts(""

);for

(inti=

0;i<(vt

.size()+

1)*10

;i++)printf

("-"

);puts(""

);for

(inti=

0;isize

();i

++)#endif

}int

main

()intx=

vn_dic[s

]-1;

vn_set[x

].insert(s

+j+2

);for

(intk=

0;kk++)

if(!

isupper(s

[k]))for

(intk=

j+2;

k<

len;

k++)

if(!

isupper(s

[k]))}

#define

debug

#ifdef

debug

puts

("************vt

集*******************"

);for

(inti=

0;isize

();i

++)printf

("%c ",vt

[i]);puts(""

);puts

("*************

產生式*****************"

);for

(inti=

0;i<

vn_set

.size

();i

++)vn_set[i

].print

();puts

("************************************"

);#endif

make_first

();make_last

();make_table

();}

}

語法分析 編譯原理

實驗目的 對迴圈語句和條件判斷語句編寫詞法分析編譯程式,只能通過一遍掃瞄完成。用c 實現 實驗要求 1 關鍵字 for if then else while do 所有關鍵字都是小寫。2 運算子和分隔符 3 其他識別符號 id 和整型常數 num 通過以下正規式定義 id letter letter...

編譯原理 語法分析

根據上課內容順序寫的部落格,並不是按照書的目錄來的 使用龍書以及編譯程式設計原理 第二版 金成植 金英編著 老師的ppt是英文的,我自己隨便翻的,不一定對 上下文無關文法 語法分析書和抽象語法樹 二義性簡單語言的語法 知識圖譜 語法分析器的功能輸入 詞法單元 詞法單元序列 輸出 語法結構的內在表示式...

編譯原理 語法分析(二)

在第一篇文章中,我們介紹了如何用上下文無關文法描述一種語言的語法,和如何使用推導和規約構造一棵語法分析樹,以及如何對文法進行轉換使之能夠更適用於語法分析。在本篇文章中,我們將介紹如何使用自頂向下的方法進行語法分析,進一步的,我們將介紹一種更高效的 分析方法。為了下文需要和減少重複,我們先給出在下文中...