實驗
一、詞法分析實驗
商業軟體工程專業 姓名:張木貴 學號:201505060365
一.實驗目的
通過設計編制除錯乙個具體的詞法分析程式,加深對詞法分析原理的理解。並掌握在對程式語言源程式進行掃瞄過程中將其分解為各類單詞的詞法分析方法。
二、實驗內容和要求
1. 根據狀態轉換圖直接程式設計
編寫乙個詞法分析程式,它從左到右逐個字元的對源程式進行掃瞄,產生乙個個的單詞的二元式,形成二元式(記號)流檔案輸出。在此,詞法分析程式作為單獨的一遍,如下圖所示。
具體任務有:
(1)組織源程式的輸入
(2)拼出單詞並查詢其類別編號,形成二元式輸出,得到單詞流檔案
(3)刪除注釋、空格和無用符號
(4)發現並定位詞法錯誤,需要輸出錯誤的位置在源程式中的第幾行。將錯誤資訊輸出到螢幕上。
(5)對於普通識別符號和常量,分別建立識別符號表和常量表(使用線性表儲存),當遇到乙個識別符號或常量時,查詢識別符號表或常量表,若存在,則返回位置,否則返回0並且填寫符號表或常量表。
注:詞法分析階段只填寫變數名,其它部分在語法分析、語義分析、**生成等階段逐步填入。
常量表結構:常量名,常量值
2.能對任何s語言源程式進行分析
在執行詞法分析程式時,應該用問答形式輸入要被分析的s源語言程式的檔名,然後對該程式完成詞法分析任務。
3.能檢查並處理某些詞法分析錯誤
詞法分析程式能給出的錯誤資訊包括:總的出錯個數,每個錯誤所在的行號,錯誤的編號及錯誤資訊。
4. 本實驗要求處理以下兩種錯誤(編號分別為1,2):
1:非法字元:單詞表中不存在的字元處理為非法字元,處理方式是刪除該字元,給出錯誤資訊,「某某字元非法」。
2:源程式檔案結束而注釋未結束。注釋格式為:/* …… */
三、實驗方法、步驟及結果測試
1. 原理分析及流程圖
2.源**:
public3.執行結果class
詞法分析 ;
/**
* @param args
* @throws ioexception
*/public
static
void
main(string args) throws ioexception
}while(syn!=0
);
}
//掃瞄程式
private
static
void
scaner() throws ioexception
//3、開始執行掃瞄
//1、是字母
//讀識別符號,查保留字表
//查到,換成屬性字表,寫到輸出流
//沒查到, 查名錶,換成屬性字,寫到輸出流
if(ch>='
a'&&ch<='z'
)
token[m++]='\0'
;
--p;
syn=10;//
單詞符號為letter(letter|digit)*
//判斷是哪個關鍵字
string newstr=new
string(token);
newstr=newstr.trim();
"newstr:"+newstr);
for(n=0;n<6;n++)
}
token[m++]='\0'
;
}
//2、是數字
//取數字,查常量表,換成屬性字表,寫到輸出流
else
if(ch>='
0'&&ch<='9'
)
--p;
syn=11;//
digitdigit*
token[m++]='\0'
;
}
//3、是特殊符號
//查特殊符號表,換成屬性字。寫到輸出流
//4、錯誤error
//4、是否分析結束
//未結束,到2
//結束,到出口
else
switch
(ch)
else
if(ch=='='
)
else
break
;
case
'>
':
token[m++]=ch;
ch=prog.charat(p++);
if(ch=='='
)
else
break
;
case':
':
token[m++]=ch;
ch=prog.charat(p++);
if(ch=='='
)
else
break
;
case'+
':
syn=13;token[0]=ch;token[1]='
\0';break
;
case'-
':
syn=14;token[0]=ch;token[1]='
\0';break
;
case'*
':
syn=15;token[0]=ch;token[1]='
\0';break
;
case'/
':
syn=16;token[0]=ch;token[1]='
\0';break
;
case'=
':
syn=25;token[0]=ch;token[1]='
\0';break
;
case';
':
syn=26;token[0]=ch;token[1]='
\0';break
;
case'(
':
syn=27;token[0]=ch;token[1]='
\0';break
;
case')
':
syn=28;token[0]=ch;token[1]='
\0';break
;
case'#
':
syn=0;token[0]=ch;token[1]='
\0';break
;
default
:
syn=-1
;
}
file txt=new file("
src/nihao.txt
");
if(!txt.exists())
byte bytes=new
byte[token.length];//
定義乙個長度與需要轉換的char陣列相同的byte陣列
for(int i=0;i//
迴圈將char的每個元素轉換並存放在上面定義的byte陣列中
byte b=(byte)token[i];//
將每個char轉換成byte
bytes[i]=b;//
儲存到陣列中
}
fileoutputstream fos;
try
catch
(exception e)
}
}
實驗一 詞法分析器實驗
一 實驗目的 通過詞法分析器,進一步了解詞法之間的關係。二 實驗內容和要求 將輸入的字串通過詞法分析器一一識別出來,同時將該字串或者字元並且和種別碼一起輸出來。三 實驗方法 步驟及結果測試 源程式名 z.c 可執行程式名 z.exe 原理分析及流程圖 採用陣列存放資料,通過字串的比較實現關鍵字的種別...
詞法分析器實驗報告
一 實驗目的 編制乙個詞法分析器,通過該詞法分析程式的設計例項,進一步了解詞法分析程式構造的一些細節。二 實驗內容和要求 實驗內容 對字串表示的源程式,從左到右進行掃瞄和分解。根據詞法規則,識別出乙個乙個具有獨立意義的單詞符號,以供語法分析之用,若發現詞法錯誤,則返回出錯資訊。實驗要求 輸入 源程式...
詞法分析器實驗報告
一 實驗目的 通過設計乙個詞法分析程式,對詞法進行分析,加強對詞法的理解,掌握對程式語言的分解和理解。二 實驗內容和要求 在原程式中輸入源 在源程式中,自動識別單詞,把單詞分為五種,並輸出對應的單詞種別碼。識別關鍵字 main if int for while do return break con...