實驗一詞法分析器

2023-01-06 08:27:02 字數 1785 閱讀 6938

一.實驗目的

1.掌握詞法分析的原理

2.設計乙個詞法分析程式,掌握程式語言中的各類單詞的詞法分析方法,加深對詞法分析原理的理解。

3.熟悉保留字表等相關的資料結構與單詞的分類方法。

4.掌握詞法分析器的設計與除錯。

二.實驗要求

2.1根據編譯中的分詞原理,編寫乙個詞法分析程式:

(1)輸入:所給文法的源程式字串。

(2)處理:對輸入的內容進行分析,分離出保留字、識別符號、常量、算符和界符。

(3)輸出:對應的二元式(類別編碼由自己定,乙個單詞符號對應乙個類別碼)

2.2需要分析的簡單的詞法

(1)關鍵字:begin if then while do end

所有的關鍵字都是小寫。

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

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

id = letter (letter | digit)*

num = digit digit*

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

2.3各種單詞符號對應的類別碼

各種單詞符號對應的類別碼如下表:

三.演算法描述

1.演算法的基本任務是從字串表示的源程式中識別出具有獨立意義的單詞符號,詞法分析基本思想是從左向右掃瞄每行源程式的符號,拼成單詞,換成統一的二元式 (單詞種別碼,單詞符號的屬性值)表示。對給定的程式通過詞法分析器識別乙個個單詞符號,並以二元式(單詞種別碼,單詞符號的屬性值)顯示。

(1)主程式示意圖

主程式的初始包括以下兩個方面:

1 關鍵字表的初值。

關鍵字作為特殊識別符號處理,把它們預先放在一張表中(稱為關鍵字表),當掃瞄程式識別出識別符號時,查關鍵字表。如能查到匹配的單詞,則該單詞為關鍵字,否則為一般識別符號。關鍵字表為乙個字串陣列,其描述如下:

char *key[6]=;

否是掃瞄子程式的演算法思想:

首先設定3個變數:

(1)token用來存放構成單詞符號的字串;

(2)sum用來存放整型單詞

(3)syn用來存放單詞符號的類別碼。

演算法流程圖

字母數字其他符號

運算子界符是4.實驗原理

1.文法的概念,dfa的表示方法。

2.詞法分析程式的輸出和輸入:詞法分析程式的功能是輸入源程式,輸出單詞符號。

程式語言的單詞符號一般分為如下幾種:關鍵字,標示符,常數,運算子,界符,單詞的輸出是二元式的形式。

轉化圖如下:

3.熟悉單詞的描述工具,如正規文法,正規式,以及知道正規文法和正規式的等價性以及他們之間的互相轉化。熟悉把正規文法轉化為正規式,把正規式轉化為nfa以及把nfa轉為相應的dfa,最後再把dfa簡化,dfa的狀態轉化為相應的子程式,最後得到詞法分析器:

狀態轉換圖:

識別符號及保留字:

letter or digit

startletter

使用環境:

windows 7下的visual c++6.0

5.除錯情況及執行結果

除錯:1.編譯

2.鏈結:

執行結果:

結果1:

結果2:

結果3:

6.實驗心得體會

通過本次實驗,我基本上了解了詞法分析器的工作原理和功能以及實現方法。我了解到如何設計並除錯詞法分析程式,同時加深了我對詞法分析器原理的理解;我熟悉了直接構造詞法分析器的方法和相關原理,並學會使用c++語言直接編寫詞法分析器。

實驗一詞法分析器

一實驗目的 1 通過本實驗加深對詞法分析程式的功能及實現方法的理解 2 使用flex實現詞法分析程式。二實驗內容 下面是簡單c語言的詞法 1.關鍵字 else if int return void while 所有的關鍵字都是保留字,並且必須是小寫。2.下面是專用符號 3.其他標記是id 和num ...

詞法分析器實驗

姓名 孫曉龍 學號 220800320 日期 2011 5 10 實驗目的 詞法分析的目的是將輸入的源程式進行劃分,給出基本符號 token 的序列,並掠過註解和空格等分隔符號。基本符號是與輸入的語言定義的詞法所規定的終結符。設計 編制 除錯乙個詞法分析子程式 識別單詞,加深對詞法分析原理的理解。功...

詞法分析器

為給定程式語言設計詞法分析器 1 單詞結構 注釋 以 開頭到該行尾部為注釋 關鍵字 共6個 int real if then else while 識別符號 以字母開頭,後跟字母或數字的符號串,最長為64個字元。注意 關鍵字不是識別符號 操作符 共11個 分隔符 共5個 數字 用正規式描述 digi...