編譯原理實驗一 TINY語言的詞法分析

2021-10-07 17:52:01 字數 1465 閱讀 1219

實驗一 tiny語言的詞法分析

一、實驗目的

(評價依據,描述是否準確到位)

構造tiny語言的詞法分析器(掃瞄器),要求利用第三方的lex工具進行構造。實驗結果:構造出的掃瞄器,能夠讀入教材樣例中給出的tiny語言的示例**,分解成token輸出。

二、實驗設計

(評價依據實驗方案設計是否合理)

一. tiny語言記號

reserved words special symbols other

if +

then -

else * number(1 or more digits)

end <

repeat =

until /

read (

write ) identifier(1 or more letters)::=

二、構造tiny語言dfa

id:letter(letter)*

number:digit(digit)*

三、內容和步驟

1**:

下面是tiny語言的**如書上:

read x;

if x < 0 then

fact := 1;

repeat

fact := fact * x;

x := x - 1

until x = 0;

write fact

end2.下面是demo.l檔案**

%digit [0-9]+

keyword read|if|then|repeat|until|write|end

letter [a-za-z]+

comment ]}

operator 「:=」|"="|"+"|"-"|""|"/"|">"|"<"

ignore [","|";"|" 「|\t|\n]+%%

%%int yywrap()

void main()

通過flex demo.l命令將demo.l檔案編譯為乙個c檔案,將這個c檔案編譯執行,得到乙個exe檔案,用這個程式來解析tiny語言即可。

2、結果:

四、實驗結論:

1 理論基礎(評價依據 理論知識非常清楚)

我們採用flex進行詞法分析。flex是乙個用來生成掃瞄器(scanners)的工具,其中掃瞄器就是可以識別文字中詞法模式的程式。具體流程為:flex讀取給定的輸入檔案,或標準輸入(當沒有給定檔名時)讀取資訊來生成乙個掃瞄器。資訊以正規表示式和c**組成,這種形式稱為規則(rule)。flex生成c源**檔案lex.yy.c,其中定義了乙個函式yylex()。這個檔案通過編譯,並用-lfl 鏈結生成可執行檔案。當可執行檔案被執行時,它分析輸入中可能存在的符合正則表達的內容。當找到任何乙個與正規表示式相匹配內容時,相應的c **將被執行。

flex輸入檔案由三段組成:定義(definitions),規則(rules),使用者**(user code)

tiny 的編譯原理實踐

首先將tm.c的執行得到tiny虛擬機器 globals.h main.c util.h util.c scan.h scan.c parse.h parse.c symtab.h symtab.c analyze.h analyze.c code.h code.c cgen.h cgen.c 拷貝...

編譯原理 TINY編譯器學習(一)

編譯原理及實踐 中附帶的tiny編譯器,僅有幾千行,這點 就實現了乙個完整的編譯器,及對應的目標 執行程式,接下來會用一段時間研究下這個 1.源 2.原始碼結構 globals.h main.c util.h util.c scan.h scan.c parse.h parse.c symtab.h...

編譯原理實驗一 DFA的程式設計實現

初步認識編譯器系統和目標機,體會系統程式設計,了解條件編譯和增量程式設計。獲取tiny語言編譯器相關源 了解tiny語言定義,可參見文件 tiny語言及其編譯器實現 第一次實驗時對tiny語言有大致了解即可,後續實驗中會陸續閱讀更多tiny語言及其編譯器的文件,詳細了解其詞法 語法 語義 執行時環境...