資源簡介
詞法分析
一、實驗目的:
通過設計編制調試一個具體的詞法分析程序,加深對詞法分析原理的理解。并掌握在對程序設計語言源程序進行掃描過程中將其分解為各類單詞的詞法分析方法。
編制一個讀單詞過程,從輸入的源程序中,識別出各個具有獨立意義的單詞,即基本保留字、標識符、常數、運算符、分隔符五大類。并依次輸出各個單詞的內部編碼及單詞符號自身值。(遇到錯誤時可顯示“Error”,然后跳過錯誤部分繼續顯示)
二、實驗說明
1、 詞法分析器的功能和輸出格式
詞法分析器的功能是輸入源程序,輸出單詞符號。詞法分析器的單詞符號常常表示成以下的二元式(單詞種別碼,單詞符號的屬性值)。本實驗中,采用的是一類符號一種別碼的方式。
2、 單詞的BNF表示
->
->||
|ε
->
-> |ε
-> +
-> -
-> >
-> >=
三、實驗要求
(一)準備:
1.閱讀課本有關章節,明確語言的語法,寫出基本保留字、標識符、常數、運算符、分隔符和程序例。
2.初步編制好程序。
3.準備好多組測試數據。
(二)上課上機:
將源代碼拷貝到機上調試,發現錯誤,再修改完善。
第二次上機調試通過。
(三)程序要求:
程序輸入/輸出示例:
如源程序為C語言。輸入如下一段:
main()
{
int a,b;
a = 10;
b = a + 20;
}
要求輸出如下:
(2,”main”)
(5,”(“)
(5,”)“)
(5,”{“)
(1,”int”)
(2,”a”)
(5,”,”)
(2,”b”)
(5,”;”)
(2,”a”)
(4,”=”)
(3,”10”)
(5,”;”)
(2,”b”)
(4,”=”)
(2,”a”)
(4,”+”)
(3,”20”)
(5,”;”)
(5,”}“)
要求:
識別保留字:if、int、for、while、do、return、break、continue;
單詞種別碼為1。
其他的都識別為標識符;單詞種別碼為2。
常數為無符號整形數;單詞種別碼為3。
運算符包括:+、-、*、/、=、>、=、<=、!= ;
單詞種別碼為4。
分隔符包括:,、;、{、}、(、); 單詞種別碼為5。
以上為參考,具體可自行增刪。
(四)程序思路
這里以開始定義的C語言子集的源程序作為詞法分析程序的輸入數據。在詞法分析中,自文件頭開始掃描源程序字符,一旦發現符合“單詞”定義的源程序字符串時,將它翻譯成固定長度的單詞內部表示,并查填適當的信息表。經過詞法分析后,源程序字符串(源程序的外部表示)被翻譯成具有等長信息的單詞串(源程序的內部表示),并產生兩個表格:常數表和標識符表,它們分別包含了源程序中的所有常數和所有標識符。
0.定義部分:定義常量、變量、數據結構。
1.初始化:從文件將源程序全部輸入到字符緩沖區中。
2.取單詞前:去掉多余空白。
3.取單詞后:去掉多余空白(可選,看著辦)。
4.取單詞:利用實驗一的成果讀出單詞的每一個字符,組成單詞,分析類型。(關鍵是如何判斷取單詞結束?取到的單詞是什么類型的單詞?)

代碼片段和文件信息
using?System;
using?System.Collections.Generic;
using?System.ComponentModel;
using?System.Data;
using?System.Drawing;
using?System.Linq;
using?System.Text;
using?System.Windows.Forms;
namespace?Analysis
{
????public?partial?class?Form1?:?Form
????{
????????public?Form1()
????????{
????????????InitializeComponent();
????????}
????????private?void?button3_Click(object?sender?EventArgs?e)
????????{
????????????textBox2.Text?=?““;
????????}
????????private?void?button2_Click(object?sender?EventArgs?e)
????????{
????????????textBox1.Text?=?““;
????????}
????????private?void?button1_Click(object?sender?EventArgs?e)
????????{
????????????textBox2.Text?=?Analysis(textBox1.Text);
????????}
????????public?string?Analysis(string?pro)
????????{
????????????string[]?chars?=?{?“;“?“:“?“[“?“]“?“+“?“-“?“*“?“/“?“%“?“?“?“&“?“{“?“}“?“>“?“<“?“=“?“^“?“!“?“(“?“)“?“.“?“?“?“\n“?“\r“?““?“int“?“float“?“const“?“for“?“switch“?“while“?“bool“?“long“?“short“?“true“?“false“?“case“?“defalt“?“goto“?“loop“?“main“?};
????????????pro?=?pro.Trim();
????????????int?i;
????????????string?num=“0“;
????????????//string[]?end={“0““1““2““3““4““5““6““7““8““9“};
????????????string?print_out?=?““;
????????????for?(i?=?0;?i?????????????{
????????????????pro?=?pro.Replace(chars[i]“?“+chars[i]+“?“);
????????????}
????????????string[]?Str?=?pro.Split(‘?‘);
????????????for?(i?=?0;?i?????????????{
????????????????if?(Str[i]?!=?““?&&?Str[i]?!=?“\n“?&&?Str[i]?!=?“\r“)
????????????????{
????????????????????if?(Str[i]?==?“if“?||?Str[i]?==?“int“?||?Str[i]?==?“for“?||?Str[i]?==?“while“?||?Str[i]?==?“do“?||?Str[i]?==?“return“?||?Str[i]?==?“break“?||?Str[i]?==?“continue“)
????????????????????????num?=?“1“;
????????????????????else?if?(Str[i]?==?“+“?||?Str[i]?==?“-“?||?Str[i]?==?“*“?||?Str[i]?==?“/“?||?Str[i]?==?“=“?||?Str[i]?==?“>“?||?Str[i]?==?“>=“?||?Str[i]?==?“<“?||?Str[i]?==?“<=“?||?Str[i]?==?“!=“)
????????????????????????num?=?“4“;
????????????????????else?if?(Str[i]?==?“;“?||?Str[i]?==?““?||?Str[i]?==?“{“?||?Str[i]?==?“}“?||?Str[i]?==?“(“?||?Str[i]?==?“)“)
????????????????????????num?=?“5“;
????????????????????else?if?(Str[i].EndsWith(“1“)||Str[i].EndsWith(“2“)||Str[i].EndsWith(“3“)||Str[i].EndsWith(“4“)||Str[i].EndsWith(“5“)||Str[i].EndsWith(“6“)||Str[i].EndsWith(“7“)||Str[i].EndsWith(“8“)||Str[i].EndsWith(“9“)||Str[i].EndsWith(“0“))
????????????????????????num?=?“3“;
????????????????????else?num?=?“2“;
????????????????????print_out?=?print_out?+?“[“?+?num?+?““?+?Str[i]?+?“]“?+?“\r\n“;
????????????????}
????????????}
????????????return?print_out;
????????}
???????
????}
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3762??2010-03-09?18:27??Analysis\Analysis\Analysis.csproj
?????文件??????78848??2010-03-23?17:24??Analysis\Analysis\bin\Debug\Analysis.exe
?????文件??????24064??2010-03-23?17:24??Analysis\Analysis\bin\Debug\Analysis.pdb
?????文件??????14328??2010-04-14?18:20??Analysis\Analysis\bin\Debug\Analysis.vshost.exe
?????文件????????490??2009-06-11?05:14??Analysis\Analysis\bin\Debug\Analysis.vshost.exe.manifest
????....SH.????????67??2010-03-21?19:54??Analysis\Analysis\bin\Debug\desktop.ini
?????文件???????2738??2010-03-23?17:24??Analysis\Analysis\Form1.cs
?????文件???????4762??2010-03-23?17:24??Analysis\Analysis\Form1.Designer.cs
?????文件?????106989??2010-03-23?17:24??Analysis\Analysis\Form1.resx
?????文件????????595??2010-04-14?18:20??Analysis\Analysis\obj\Debug\Analysis.csproj.FileListAbsolute.txt
?????文件????????847??2010-03-23?17:24??Analysis\Analysis\obj\Debug\Analysis.csproj.GenerateResource.Cache
?????文件??????78848??2010-03-23?17:24??Analysis\Analysis\obj\Debug\Analysis.exe
?????文件??????67702??2010-03-23?17:24??Analysis\Analysis\obj\Debug\Analysis.Form1.resources
?????文件??????24064??2010-03-23?17:24??Analysis\Analysis\obj\Debug\Analysis.pdb
?????文件????????180??2010-03-09?18:27??Analysis\Analysis\obj\Debug\Analysis.Properties.Resources.resources
?????文件????????489??2010-03-09?18:15??Analysis\Analysis\Program.cs
?????文件???????1366??2010-03-09?18:15??Analysis\Analysis\Properties\AssemblyInfo.cs
?????文件???????2866??2010-03-09?18:15??Analysis\Analysis\Properties\Resources.Designer.cs
?????文件???????5612??2010-03-09?18:15??Analysis\Analysis\Properties\Resources.resx
?????文件???????1093??2010-03-09?18:15??Analysis\Analysis\Properties\Settings.Designer.cs
?????文件????????249??2010-03-09?18:15??Analysis\Analysis\Properties\Settings.settings
?????文件????????914??2010-03-09?18:15??Analysis\Analysis.sln
????..A..H.?????13312??2010-04-14?18:20??Analysis\Analysis.suo
?????目錄??????????0??2010-03-10?13:29??Analysis\Analysis\obj\Debug\Refactor
?????目錄??????????0??2010-03-09?18:15??Analysis\Analysis\obj\Debug\TempPE
????...D..R?????????0??2010-03-21?19:54??Analysis\Analysis\bin\Debug
?????目錄??????????0??2010-03-23?17:24??Analysis\Analysis\obj\Debug
?????目錄??????????0??2010-03-09?18:15??Analysis\Analysis\bin
?????目錄??????????0??2010-03-09?18:15??Analysis\Analysis\obj
?????目錄??????????0??2010-03-09?18:15??Analysis\Analysis\Properties
............此處省略5個文件信息
- 上一篇:單片機I2C通信程序
- 下一篇:四路搶答器 c語言
評論
共有 條評論