




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、天津理工大學(xué)實驗報告學(xué)院(系)名稱:計算機與通信工程學(xué)院姓名學(xué)號專業(yè)班級實驗項目實驗一:詞法分析器課程名稱編譯原理課程代碼實驗時間實驗地點批改意見成績教師簽字: 1、 實驗內(nèi)容:實現(xiàn)標準C語言詞法分析器。2、 實驗要求:(1)單詞種別編碼要求基本字、運算符、界符:一符一種標識符:統(tǒng)一為一種;常量:按類型編碼;(2)詞法分析工作過程中建立符號表、常量表。 并以文本文件形式輸出。(3) 詞法分析的最后結(jié)果以文本文件形式輸出。三、實驗代碼:輸入的程序: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 /定義符號表數(shù)組,常量表數(shù)組,關(guā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<>();/將字符加入到符號表中public ArrayList<String> addToFuHaoBiao(String s)fuhaobiao.add(s);return fuhaobiao;/將字符串加入到常量表中public ArrayList<String> addToChangLiangBiao(String s)changLiangBiao.add(s);return changLian
11、gBiao;/判斷一個字符是否是字母public boolean isLetter(char ch) if(ch>='a'&&ch<='z')|(ch>='A'&&ch<='Z')return true;elsereturn false;/判斷一個字符是否是數(shù)字public boolean isDigit(char ch) if(ch>='0'&&ch<='9')return true;elsereturn fals
12、e;/讀入一個文件,將其內(nèi)容轉(zhuǎn)換成一個字符串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;/將一個長字符串按照分割規(guī)則,分割成一個個的短的字符串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;/判斷一個字符串是否符合規(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;/將一個集合中的數(shù)據(jù)分類,判斷他們是否是關(guān)鍵字或者是常量,亦或是標識符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;/判斷一個字符串是否是操作符,若是,則返回其在編碼;否則返回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;/判斷一個字符串是否是分割符,若是,則返回其在編碼;否則返回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;/判斷一個字符串是否是關(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;/判斷一個字符串是否是數(shù)字或者是雙引號引起來的字符常量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;/判斷一個字符串是否已經(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:字符在其原來文件中的行數(shù)"); writer.write("rn");writer.write(&qu
28、ot;type:字符串類型(1-19表示關(guān)鍵字)(20-29表示分隔符)(30-49表示操作符)"+ "(50表示標識符)(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生態(tài)保護與書畫藝術(shù)創(chuàng)作考核試卷
- 藝術(shù)品市場規(guī)范考核試卷
- 航班機組人員溝通技巧考核試卷
- 花卉畫法的分類與特點考核試卷
- 一次函數(shù)應(yīng)用舉例教學(xué)課件
- 共建文明社區(qū)共享和諧生活:課件教程
- 中國古代教育長善救失
- 2019-2025年咨詢工程師之工程項目組織與管理能力提升試卷B卷附答案
- 2025年投資項目管理師之投資建設(shè)項目決策真題練習(xí)試卷A卷附答案
- 扈中平現(xiàn)代教育改革理論與實踐
- 項目部臨時動火作業(yè)審批表
- 飲料生產(chǎn)公司應(yīng)急預(yù)案匯編參考范本
- 高效水泥助磨劑PPT課件(PPT 66頁)
- 生物防治第三講
- 旁站監(jiān)理實施細則(完整版)
- 學(xué)業(yè)水平考試復(fù)習(xí)高中語文文言文課本翻譯
- 蘇教版二年級(下冊)科學(xué)全冊單元測試卷含期中期末(有答案)
- 常用原料凈料率參照表
- 高低溫試驗報告
- 第一章 混凝土拌合站組織機構(gòu)框圖及崗位職責(zé)
- 指南預(yù)應(yīng)力簡支t形梁橋
評論
0/150
提交評論