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

代碼片段和文件信息
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“?“l(fā)ong“?“short“?“true“?“false“?“case“?“defalt“?“goto“?“l(fā)oop“?“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;
????????}
???????
????}
}
?屬性????????????大小?????日期????時(shí)間???名稱(chēng)
-----------?---------??----------?-----??----
?????文件???????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個(gè)文件信息
- 上一篇:單片機(jī)I2C通信程序
- 下一篇:四路搶答器 c語(yǔ)言
評(píng)論
共有 條評(píng)論