编译原理实验报告

精品文档

编译方法实验报告

实验1:扫描器的设计

一、 实验目的

熟悉并实现一个扫描器(词法分析程序)。

1欢迎下载

精品文档

二、 实验要求

(1) 设计扫描器的有限自动机(识别器);

(2) 设计翻译、生成Token的算法(翻译器); (3) 编写代码并上机调试运行通过。

·输入——源程序文件或源程序字符串; ·输出——相应的Token序列;

关键字表和界符表; 符号表和常数表;

三、 实验步骤

流程:

初始化;

打开用户源程序文件;

while (文件未结束)

{ 读入一行到w[i],i=0;

do //处理一行,每次处理一个单词

{ 滤空格,直到第一个非空的w[i]; i--;

s=1; //处理一个单词开始

while (s!=0) //拼单词并生成相应Token {

act(s); //执行qs

if (s>=11 && s<=14) //一个单词处理结束 break;

i++; //getchar() s=find(s, w[i]); }

if (s==0) 词法错误;

}while (w[i]!=换行符); }

关闭用户源程序文件; 生成Token文件; 输出关键字表; 输出Token序列; 输出符号表; 输出常数表;

有限自动机的状态转换图:

e

。 2欢迎下载

精品文档

d d d +|- -1/+/- +① d ② . ③ d ④ e ⑤ ⑥ d ⑦ 11 d - -1/+/- l/d -1/+/- -1 12 l ⑧ - -1 13 b ⑨ b ⑩ - -1 14 - -1 15 - 其中:d为数字,l为字母,b为界符,-1代表其它符号(如在状态8处遇到了非字母或数字的其它符号,会变换到状态12)。

关键字表和界符表:

Program Begin End Var While Do Repeat Until For To If Then Else

; : ( ) , := + - * / > >= == < &

>>闂傚倸鍊搁崐鎼佸磹閹间礁纾圭€瑰嫭鍣磋ぐ鎺戠倞妞ゆ帒顦伴弲顏堟偡濠婂啰绠绘鐐村灴婵偓闁靛牆鎳愰濠傗攽鎺抽崐鎰板磻閹惧墎妫柟顖嗗瞼鍚嬮梺鍝勭焿缂嶄線鐛崶顒夋晬闁挎繂妫岄幐鍛節閻㈤潧浠滄俊顖氾攻缁傚秴饪伴崼婵堫槰闂侀€炲苯澧い顏勫暣婵″爼宕卞Δ鈧〖缂傚倸鍊哥粔鏉懳涘Δ鈧悳濠氬锤濡や礁浜滈梺绋跨箰閻ㄧ兘骞忛搹鍦<缂備降鍨归獮鏍煙閸愯尙绠洪柕鍥ㄥ姌椤﹀绱掓潏銊ユ诞闁诡喒鏅犲畷姗€鎳犻鎸庡亝缂傚倸鍊风欢锟犲窗閺嶎厽鍋嬮柟鎯х-閺嗭箓鏌熼悜姗嗘畷闁稿﹦鍏橀幃妤呮偨閻ц婀遍弫顕€骞嗚閺€浠嬫煟濡櫣浠涢柡鍡忔櫅閳规垿顢欑喊鍗炴闂佺懓绠嶉崹纭呯亽婵炴挻鍑归崹鎶藉焵椤掑啫鐓愰柕鍥у瀵潙螖閳ь剚绂嶆ィ鍐┾拺闁告繂瀚悞璺ㄧ磼閺屻儳鐣烘鐐叉瀵噣宕奸锝嗘珫婵犵數鍋為崹鍫曟晝閳哄倸顕遍柨鐕傛嫹<<
12@gma联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4