版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、天津理工大學(xué)實(shí)驗(yàn)報(bào)告學(xué)院(系)名稱:計(jì)算機(jī)與通信工程學(xué)院姓名學(xué)號(hào)專業(yè)班級(jí)實(shí)驗(yàn)項(xiàng)目實(shí)驗(yàn)一:詞法分析器課程名稱編譯原理課程代碼實(shí)驗(yàn)時(shí)間實(shí)驗(yàn)地點(diǎn)批改意見(jiàn)成績(jī)教師簽字: 1、 實(shí)驗(yàn)內(nèi)容:實(shí)現(xiàn)標(biāo)準(zhǔn)C語(yǔ)言詞法分析器。2、 實(shí)驗(yàn)要求:(1)單詞種別編碼要求基本字、運(yùn)算符、界符:一符一種標(biāo)識(shí)符:統(tǒng)一為一種;常量:按類型編碼;(2)詞法分析工作過(guò)程中建立符號(hào)表、常量表。 并以文本文件形式輸出。(3) 詞法分析的最后結(jié)果以文本文件形式輸出。三、實(shí)驗(yàn)代碼:輸入的程序:package com.example;public class WordList private int row;private int type;
2、private int number;private String str;public WordList() super();/ TODO Auto-generated constructor stubpublic WordList(int row, int type, int number, String str) super();this.row = row;this.type = type;this.number = number;this.str = str;public int getRow() return row;public void setRow(int row) this
3、.row = row;public int getType() return type;public void setType(int type) this.type = type;public int getNumber() return number;public void setNumber(int number) this.number = number;public String getStr() return str;public void setStr(String str) this.str = str;Overridepublic String toString() retu
4、rn "WorList row=" + row + ", type=" + type + ", number=" + number+ ", str=" + str + ""package com.example;public class Word private int row;private String string;public Word() super();/ TODO Auto-generated constructor stubpublic Word(int row, String
5、string) super();this.row = row;this.string = string;public int getRow() return row;public void setRow(int row) this.row = row;public String getString() return string;public void setString(String string) this.string = string;Overridepublic String toString() return "Word row=" + row + "
6、, string=" + string + ""package com.example;import java.io.File;import java.io.FileReader;import java.io.Reader;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class HanShu /定義符號(hào)表數(shù)組,常量表數(shù)組,關(guān)鍵字?jǐn)?shù)組List<String> guanjianzi = Arrays.asList("double&q
7、uot;,"long","char","int","if","else","for","while","return","break","continue","switch","case","default","void","struct","static","do&q
8、uot;,"short");List<String> caozuofu = Arrays.asList("+","-","*","/","%","=",">","<","!","=","!=",">=","<=","+","-","&
9、amp;","&&","|","","");List<String> fengefu = Arrays.asList(",","","(",")","","","'",""",":","#");ArrayList<String> fuhaobiao =
10、 new ArrayList<>();ArrayList<String> changLiangBiao = new ArrayList<>();/將字符加入到符號(hào)表中public ArrayList<String> addToFuHaoBiao(String s)fuhaobiao.add(s);return fuhaobiao;/將字符串加入到常量表中public ArrayList<String> addToChangLiangBiao(String s)changLiangBiao.add(s);return changLian
11、gBiao;/判斷一個(gè)字符是否是字母public boolean isLetter(char ch) if(ch>='a'&&ch<='z')|(ch>='A'&&ch<='Z')return true;elsereturn false;/判斷一個(gè)字符是否是數(shù)字public boolean isDigit(char ch) if(ch>='0'&&ch<='9')return true;elsereturn fals
12、e;/讀入一個(gè)文件,將其內(nèi)容轉(zhuǎn)換成一個(gè)字符串public String getFile(String fileName)File file = new File(fileName);String str = null;try Reader reader = new FileReader(file);char c = new char1024;int len = reader.read(c);str = new String(c, 0, len);reader.close(); catch (Exception e) e.printStackTrace();return str;/處理字符串中的
13、換行和空格public String yuChuLi(String str)String ts = ""int i;char ch,nc;for(i=0;i<str.length()-1;i+)ch = str.charAt(i);nc = str.charAt(i+1);if(ch='n')ch = '$'ts = ts+ch;else if(ch=' '|ch='t'|ch='r')if(nc=' '|nc='t'|nc='r')cont
14、inue;elsech=' 'ts = ts + ch;elsets = ts+ch;ch = str.charAt(str.length()-1);if(ch!=' '&&ch!='r'&&ch!='t'&&ch!='n')ts = ts + ch;return ts;/將一個(gè)長(zhǎng)字符串按照分割規(guī)則,分割成一個(gè)個(gè)的短的字符串public ArrayList<Word> fenGe(String str)ArrayList<Word> list
15、= new ArrayList<>();String s = ""char ch;int i;int row = 1;for(i=0;i<str.length();i+) ch=str.charAt(i); if(i=0&&ch=' ')continue;if(ch=' ')if(s!="")list.add(new Word(row,s);s = ""elsecontinue;else if(isDigit(ch)|isLetter(ch)if(s="&qu
16、ot;|isDigit(s.charAt(s.length()-1)|isLetter(s.charAt(s.length()-1)s = s + ch;elselist.add(new Word(row,s);s = ""s = s + ch;elseif(isTwoOperator(s,ch)s = s + ch;elseif(s=""&&ch!='$')s = s + ch;else if(s=""&&ch='$')row +;elselist.add(new Wo
17、rd(row, s);s = ""if(ch!='$')s = s + ch;elserow +;if(s!="")list.add(new Word(row, s);return list;/判斷一個(gè)字符串是否符合規(guī)范public boolean isIdent(String str)char ch;int i;for(i=0;i<str.length();i+)ch=str.charAt(i);if(i=0&&!isLetter(ch)|(!isDigit(ch)&&!isLetter(ch)br
18、eak;if(i<str.length()return false;elsereturn true;public boolean isTwoOperator(String str, char ch) if(str.length()>1|str.length()=0)return false; elsereturn true;/將一個(gè)集合中的數(shù)據(jù)分類,判斷他們是否是關(guān)鍵字或者是常量,亦或是標(biāo)識(shí)符public ArrayList<WordList> fenlei(ArrayList<Word> arr)ArrayList<WordList> word
19、List = new ArrayList<>();for(int i = 0; i<arr.size(); i+)String str = arr.get(i).getString();int row = arr.get(i).getRow();if(isGuanJianZi(str)!=0)WordList wList = new WordList(row, isGuanJianZi(str)+1, isGuanJianZi(str), str);wordList.add(wList);else if(isFenGeFu(str)!=0)WordList list = ne
20、w WordList(row, guanjianzi.size()+isFenGeFu(str)+2, isFenGeFu(str), str);wordList.add(list);else if(isCaoZuoFu(str)!=0)WordList list = new WordList(row, guanjianzi.size()+fengefu.size()+isCaoZuoFu(str)+1, isCaoZuoFu(str), str);wordList.add(list);else if(isGuanJianZi(str)=0&&isIdent(str)WordL
21、ist list = new WordList(row, guanjianzi.size()+fengefu.size()+caozuofu.size()+1, isbiaozhifu(str), str);wordList.add(list);else if(isIdent(str)&&ischangliang(str)WordList list = new WordList(row, guanjianzi.size()+fengefu.size()+caozuofu.size()+2, isInChangLiangBiao(str), str);wordList.add(l
22、ist);return wordList;/判斷一個(gè)字符串是否是操作符,若是,則返回其在編碼;否則返回0public int isCaoZuoFu(String str)int i;for(i = 0; i < caozuofu.size();i+)if(caozuofu.get(i).equals(str)break;if(i<caozuofu.size()return i;elsereturn 0;/判斷一個(gè)字符串是否是分割符,若是,則返回其在編碼;否則返回0public int isFenGeFu(String str)int i;for(i = 0; i < feng
23、efu.size();i+)if(fengefu.get(i).equals(str)break;if(i<fengefu.size()return i;elsereturn 0;/判斷一個(gè)字符串是否是關(guān)鍵字public int isGuanJianZi(String string) int i;for(i = 0; i < guanjianzi.size();i+)if(string.equals(guanjianzi.get(i)break;if(i<guanjianzi.size()return i+1;elsereturn 0;/判斷該字符是否在常量表中存在publi
24、c int isInChangLiangBiao(String string)int i;for(i = 0; i < changLiangBiao.size();i+)if(changLiangBiao.get(i).equals(string)break;if(i<changLiangBiao.size()return i;elseaddToChangLiangBiao(string);return i+1;/判斷一個(gè)字符串是否是數(shù)字或者是雙引號(hào)引起來(lái)的字符常量public boolean ischangliang(String string) char a = '&q
25、uot;'String str = a+""char num = string.toCharArray();StringBuffer hire = new StringBuffer();/for(int i=0;i<string.length();i+)if(Character.isDigit(numi)hire.append(numi);if(string.endsWith(str)&&string.startsWith(str)return true;if(hire.length()=string.length()return true;e
26、lsereturn false;/判斷一個(gè)字符串是否已經(jīng)在字符表中存在,若不存在,則添加到字符表中public int isbiaozhifu(String string) int i;for(i = 0;i<fuhaobiao.size();i+)if(fuhaobiao.get(i).equals(string)break;if (i<fuhaobiao.size() return i;elseaddToFuHaoBiao(string);return i+1;package com.example;import java.io.FileWriter;import java.i
27、o.IOException;import java.util.ArrayList;import java.util.List;public class Main public static void outPut(ArrayList<WordList> arrayList)FileWriter writer;try writer = new FileWriter("E:/1.txt");writer.write("row:字符在其原來(lái)文件中的行數(shù)"); writer.write("rn");writer.write(&qu
28、ot;type:字符串類型(1-19表示關(guān)鍵字)(20-29表示分隔符)(30-49表示操作符)"+ "(50表示標(biāo)識(shí)符)(51表示常量符)"); writer.write("rn"); writer.write("number:字符在其所屬類型中的排列表位置"); writer.write("rn"); writer.write("str:表示該字符串"); writer.write("rn"); writer.write("rn"); for(int i=0;i<arrayList.size();i+) writer.write(arrayList.get(i).toString(); writer.write("rn"); writer.close(); catch (IOException e) e.printStackTrace(); public static void outPut(List<String> list,String fileName,int a)FileWriter writer;try writ
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二手房買賣合同無(wú)效?揭秘背后真相
- 個(gè)人理財(cái)賬戶監(jiān)管合同協(xié)議
- 專業(yè)公司借款投資合同范本
- 二手車買賣正式合同范本
- 個(gè)人長(zhǎng)期借款合同范本專業(yè)版
- 不銹鋼工程安裝承包合同范本
- 個(gè)人商鋪?zhàn)赓U改造合同示例
- 二手房產(chǎn)合同附加條款協(xié)議
- 買賣合同法全文txt正規(guī)范本
- 中外合資生產(chǎn)合同范本(新能源)
- 長(zhǎng)榮股份:投資性房地產(chǎn)公允價(jià)值評(píng)估報(bào)告
- 2022年菏澤醫(yī)學(xué)??茖W(xué)校單招綜合素質(zhì)試題及答案解析
- 銀行內(nèi)部舉報(bào)管理規(guī)定
- 平面幾何強(qiáng)化訓(xùn)練題集:初中分冊(cè)數(shù)學(xué)練習(xí)題
- 項(xiàng)目獎(jiǎng)金分配獎(jiǎng)勵(lì)制度和方案完整版
- 支氣管鏡試題
- 陰道鏡幻燈課件
- 現(xiàn)代漢語(yǔ)詞匯學(xué)精選課件
- PCB行業(yè)安全生產(chǎn)常見(jiàn)隱患及防范措施課件
- 上海音樂(lè)學(xué)院 樂(lè)理試題
- SAP中國(guó)客戶名單
評(píng)論
0/150
提交評(píng)論