版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、設(shè)計(jì)界面如上圖所示:代碼如下:namespace WindowsApplication1 public partial class Form1 : Form public Form1() InitializeComponent(); string Str = , text2 = ; private void 打開ToolStripMenuItem_Click(object sender, EventArgs e) string Fname = ; openFileDialog1.Filter = 文本文件(*.txt)|*.txt; openFileDialog1.Title = 打開文件;
2、openFileDialog1.RestoreDirectory = true; if (openFileDialog1.ShowDialog() = DialogResult.OK) Fname = openFileDialog1.FileName; richTextBox1.LoadFile(Fname, RichTextBoxStreamType.PlainText); Str = richTextBox1.Text; private void 保存ToolStripMenuItem_Click(object sender, EventArgs e) string Fname = ope
3、nFileDialog1.FileName; richTextBox1.SaveFile(Fname, RichTextBoxStreamType.PlainText); private void 另存為ToolStripMenuItem_Click(object sender, EventArgs e) string Fname; saveFileDialog1.Filter = 文本文件(*.txt)|*.txt; saveFileDialog1.Title = 保存文件 ; saveFileDialog1.RestoreDirectory = true; saveFileDialog1.
4、ShowDialog(); Fname = saveFileDialog1.FileName; if (Fname != ) richTextBox1.SaveFile(Fname, RichTextBoxStreamType.PlainText); private void 關(guān)閉ToolStripMenuItem_Click(object sender, EventArgs e) Application.Exit(); private void 字體ToolStripMenuItem_Click(object sender, EventArgs e) fontDialog1.ShowEffe
5、cts = true; fontDialog1.Font = richTextBox1.SelectionFont; if (fontDialog1.ShowDialog() = DialogResult.OK) richTextBox1.SelectionFont = fontDialog1.Font; private void 詞法分析ToolStripMenuItem_Click(object sender, EventArgs e) Gets.LineNo = 1; /初始化行號(hào) Gets.errors = 0; /初始化錯(cuò)誤個(gè)數(shù) Gets.text5 = ; string text1
6、 = richTextBox1.Text + 0; Gets getstring = new Gets(); text2 = getstring.GetString(text1); richTextBox2.Text = *Token串生成表如下* + rn + text2; textBox2.Text = getstring.ErrorN0(); private void Form1_Load(object sender, EventArgs e) private void 符號(hào)表ToolStripMenuItem_Click(object sender, EventArgs e) text
7、Box2.Text = *符號(hào)表信息*+rn; textBox2.Text += Gets.text4; private void 錯(cuò)誤詳細(xì)信息ToolStripMenuItem_Click(object sender, EventArgs e) textBox2.Text = Gets.text5; 主要實(shí)現(xiàn)功能的代碼如下:創(chuàng)建一個(gè)Gets類用來對輸入的字符串進(jìn)行掃描 class Gets int i = 0, j = 0; /記錄字符位置,token數(shù)組的位置 public static int LineNo = 1; /行號(hào) string token = ; /記錄識(shí)別出的單詞 stri
8、ng text2 = ; string text3 = ; /用來記錄錯(cuò)誤信息 string wrong = ; /記錄異常信息 public static int errors = 0; /錯(cuò)誤字段的個(gè)數(shù) public static string text5 = ; / 記錄錯(cuò)誤的詳細(xì)信息 int flag1=0, flag2=0,flag3,flag4,flag5,flag6 = 0; /標(biāo)記成對出現(xiàn)的界符 public static string text4 = 入口:單詞名稱 長度 類型 種屬 值 內(nèi)存地址+rn; /用來記錄符號(hào)表 string m_KeyWords =new str
9、ing 32auto, double, int,struct, break, else,long,switch,case,enum, register,typedef,char,extern,return,union,const,float,short,unsigned,continue,for,signed,void,default, goto,sizeof,volatile,do,if,while,static ; string m_operator =new string 28+,-,*,/,%,=,=,=, -=,+=,*=,/=, /運(yùn)算符 !=,=,%=,&,&,|,|,!,+,-
10、,?:; string m_bound = new string15 , , , , ;, , ., (, ), :, , #, , ,; /界符 public string GetString(string str) /讀入字符串 string space = ; /空格數(shù) if (str.Length = 0) /判斷字符串是否為空 return ; try while (stri!= 0) /讀入字符判斷,空格、字母、數(shù)字、界符 if (stri = | stri = t | stri = r) i+; /跳過無意義的字符 else if (stri = n)/如果是換行符,則行號(hào)加1
11、LineNo+; i+; else if (isalpha(stri)/如果是字母 i = recog_id(str, i); for (j = 0; j = m_KeyWords.Length)/不是保留字 for (int m = 0; m 12 - token.Length; m+) space = space + ; text2 = text2 + LineNo.ToString() + : + token + space+標(biāo)識(shí)符 Token碼 75 + rn; ; text4 = text4 + LineNo.ToString() + : + token + + token.Leng
12、th + space + 標(biāo)識(shí)符 + + 簡單變量 + + 未知 + + 未知 + rn; token = ; space=; if (j m_KeyWords.Length)/是保留字 for (int m = 0; m 12- token.Length; m+) space = space + ; text2 = text2 + LineNo.ToString() + : + m_KeyWordsj +space+ 保留字 Token碼 + Convert.ToString(gettoken(token, 1) + rn; ; token = ; space = ; else if (is
13、digit(stri)/如果是數(shù)字 i = recog_dig(str, i); for (int m = 0; m 12 - token.Length; m+) space = space + ; text2 = text2 + LineNo.ToString() + : + token + space+常量 Token碼 76 + rn; text4 = text4 + LineNo.ToString() + : + token + + token.Length + space + 整數(shù) + + 簡單變量 + + 未知 + + 未知 + rn; token = ; space=; else
14、 if (isbound(stri) /識(shí)別界符 i = recog_bound(str, i); for (int m = 0; m 12 - token.Length; m+) space = space + ; text2 = text2 + LineNo.ToString() + : + token + space+界符 Token碼 + Convert.ToString(gettoken(token, 3) + rn; ; token = ; space=; else if (isoperator(stri) i = recog_Operator(str, i); for (int
15、m = 0; m= a & ch = A & ch = 0 & ch = 9) return true; else return false; public bool issign(char ch) /識(shí)別下劃線 if (ch = _) return true; else return false; public bool isbound(char ch) /判斷是否為界符 for(int j=0;jm_bound.Length;j+) if (ch.CompareTo(m_boundj0)=0) return true; return false; public bool isoperato
16、r(char ch) for (int i = 0; i m_operator.Length; i+) if (ch = m_operatori0) return true; return false; private int recog_Operator(string str, int i) char state = 0; string sstr = ; while (state != 2) switch (state) case 0: sstr += stri; i+; state = 1; break; case 1: /判斷為雙個(gè)運(yùn)算符 if (str.Substring(i - 1,
17、 2) = + | str.Substring(i - 1, 2) = - | str.Substring(i - 1, 2) = | str.Substring(i - 1, 2) = += | str.Substring(i - 1, 2) = -= | str.Substring(i - 1, 2) = *= | str.Substring(i - 1, 2) = /= | str.Substring(i - 1, 2) = != | str.Substring(i - 1, 2) = %=) sstr += stri; i+; state = 2; if (stri - 1 = ? &
18、 stri = :) /三目運(yùn)算符 sstr += stri; i+; state = 2; else state = 2; /運(yùn)算符 break; token=sstr; return i; public int recog_id(string str, int i) /識(shí)別單詞 char state = 0; string sstr=; /記錄單詞 while (state != 2) switch (state) case 0: if (isalpha(stri) state = 1; sstr = sstr + stri; i+; / else error(1); break; cas
19、e 1: if (isalpha(stri) | isdigit(stri) | issign(stri) state = 1; sstr = sstr + stri; i+; else state = 2; break; token = sstr; /記錄識(shí)別的字符串 return i; public int recog_dig(string str, int i) /識(shí)別常數(shù) char state = 0; string sstr = ; while (state != 2) switch (state) case 0: if (isdigit(stri) sstr += stri; st
20、ate = 1; i+; break; case 1: if (isdigit(stri) sstr += stri; state = 1; i+; else if (stri = . & isdigit(stri + 1) /實(shí)數(shù) sstr += stri; state = 1; i+; else state = 2; break; token = sstr; return i; public int recog_bound(string str, int i) string sstr = ; for (int k = 0; k m_bound.Length; k+) /判斷為界符 if (
21、stri.CompareTo(m_boundk0) = 0) sstr += stri; i+; break; else continue; token = sstr; if (token = |token=) flag1+; else if (token = | token = ) flag2+; else if (token = ( | token = ) flag3+; else if (token = ) flag4+; else if (token = ) flag5+; else if (token = ) flag6+; return i; public int gettoken(string str,int k) /獲得單詞的token值 switch(k) case 1: for (int i = 0; i m_KeyWords.Length; i+) /關(guān)鍵字 if (str = m_KeyWordsi) return i; break; case 2: for (int i = 0; i m_operator.Length; i+) /運(yùn)算符 if (str =
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年滄州醫(yī)學(xué)高等專科學(xué)校高職單招職業(yè)適應(yīng)性考試備考題庫有答案解析
- 2026年湖南藝術(shù)職業(yè)學(xué)院單招綜合素質(zhì)考試備考題庫帶答案解析
- 2026年撫州職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試備考試題帶答案解析
- 2026年貴陽幼兒師范高等??茖W(xué)校高職單招職業(yè)適應(yīng)性測試參考題庫帶答案解析
- 2026年黑龍江信息技術(shù)職業(yè)學(xué)院單招職業(yè)技能筆試備考題庫帶答案解析
- 2026年河源職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試模擬試題有答案解析
- 投資融資合作協(xié)議2025年規(guī)范
- 2026年哈爾濱傳媒職業(yè)學(xué)院單招職業(yè)技能考試模擬試題帶答案解析
- 停車場租賃補(bǔ)充合同協(xié)議2025年標(biāo)準(zhǔn)版
- 2026年湖北生態(tài)工程職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)筆試模擬試題帶答案解析
- 靜配中心潔凈管理及設(shè)備維護(hù)
- 大學(xué)生職業(yè)素養(yǎng)訓(xùn)練(第六版)課件全套 宋賢鈞 第1-14單元 選擇職業(yè)目標(biāo)- 堅(jiān)守安全底線
- 俄烏戰(zhàn)爭啟示錄(一):安東諾夫機(jī)場爭奪戰(zhàn)
- 工程造價(jià)咨詢服務(wù)投標(biāo)方案(技術(shù)方案)
- 建筑幕墻用陶板標(biāo)準(zhǔn)
- 向世界講述中國 知到智慧樹網(wǎng)課答案
- 《跟上兔子》繪本三年級(jí)第1季One-Day教學(xué)課件
- 認(rèn)識(shí)“千古第一才女”:李清照 課件
- 五年級(jí)上冊1-8單元語文園地復(fù)習(xí)知識(shí)點(diǎn)
- 概率論與數(shù)理統(tǒng)計(jì)練習(xí)題-概率論與數(shù)理統(tǒng)計(jì)試題及答案
- 娛樂場所安全風(fēng)險(xiǎn)分級(jí)管控表
評(píng)論
0/150
提交評(píng)論