實驗一、詞法分析實驗
商業軟體工程3班 李華秋 201506110205
一、實驗目的
編制乙個詞法分析程式。通過設計乙個編譯詞法分析程式,實現對詞法分析轉換的理解,加深對轉換過程的認識,通過這個軟體把理論知識運用到實際之中。
二、實驗內容和要求
輸入:源程式字串
輸出:二元組(種別,單詞本身)
三、實驗方法、步驟及結果測試
源程式名:
原理分析及流程圖
#include
#include char prog[80],token[8],ch;int syn,p,m,n,sum;char *key[6]=;//關鍵字scaner();
main()
while(ch!='#');
p=0;do
}while(syn!=0);
getch();
}scaner()
p--;
syn=10;for(n=0;n<6;n++)if(strcmp(token,key[n])==0)
}else if((ch>='0')&&(ch<='9'))
p--;
syn=11;
}else switch(ch)
else
break;case '>':token[m++]=ch;
ch=prog[p++];if(ch=='=')
else
break;case '+': token[m++]=ch;
ch=prog[p++];if(ch=='+')
else
break;case '-':token[m++]=ch;
ch=prog[p++];if(ch=='-')
else
break;case '!':ch=prog[p++];if(ch=='=')
else
break;case '=':token[m++]=ch;
ch=prog[p++];if(ch=='=')
else
break;case '*': syn=15;
token[m++]=ch;break;case '/': syn=16;
token[m++]=ch;break;case '(': syn=27;
token[m++]=ch;break;case ')': syn=28;
token[m++]=ch;break;case '': syn=6;
token[m++]=ch;break;case ';': syn=26;
token[m++]=ch;break;case '\"': syn=30;
token[m++]=ch;break;case '#': syn=0;
token[m++]=ch;break;case ':':syn=17;
token[m++]=ch;break;default: syn=-1;break;
}token[m++]='\0';
}主要程式段及其解釋:
for(m=0;m<8;m++)token[m++]=null;
ch=prog[p++];
m=0;
while((ch==' ')||(ch=='\n'))ch=prog[p++];
if(((ch<='z')&&(ch>='a'))||((ch<='z')&&(ch>='a')))
p--;
執行結果及分析
四、實驗總結
對詞法轉換過程認識不夠,沒能獨立完成本次試驗,對課本的知識還一知半解,剛接觸邏輯上有些跟不上,課堂上的東西也沒全掌握,很多問題都是靠查閱資料和問同學才解決。
詞法分析1
詞法記號的屬性,屬性用來對記號裡面的屬性加以進一步區分。成為n元式 a1成為第一元,a2稱為第二元,類推。比如 position initial rate 60 的記號和屬性 賦值號 單獨作為記號,不需要第二元作為屬性加以區分 單獨作為記號,不需要第二元作為屬性加以區分 單獨作為記號,不需要第二元作...
自製程式語言 1 詞法分析
本次編寫詞法分析器,形式為 講解。詞法分析我了解的有兩種,一類是狀態機,根據遇到不同的字元轉換到不同的狀態來決定下乙個字元應該是什麼,另一種就是直接寫詞法分析,簡單的if判斷。前者實現的 很少 可參見本人部落格編譯原理欄目下 但是需要乙個狀態轉換表,隨著詞法分析的內容變多,這個 也會很大,比較難維護...
編譯原理(二)詞法分析 1 詞法分析中的若干問題
2.詞法分析器的作用與工作方式 編譯原理部落格列表 概念 模擬程式中的變數 關係 記號 記號的類別 記號的屬性 值 記號的類別 單詞舉例 模式的非形式化描述 const 01 const const if 03 ifif relation 81 或 或 id 82 pi,count,d2 字母打頭的...