日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

编译原理中词法分析的递归下降分析法实例--能被5整除的二进制数---c语言实现

發布時間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编译原理中词法分析的递归下降分析法实例--能被5整除的二进制数---c语言实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.前言

又到了一周一度的編譯原理實驗課,一次實驗課上完了,又是大學生必備技能—寫實驗報告。行了,廢話不多說,我直接展現,如何實現編譯原理中詞法分析的遞歸下降分析法實例–能被5整除的二進制數的思路。作為信奉“less is more”的人來說,說明能簡單就簡單啦!!大家湊合著看看。

二.實驗要求/題目說明

一、授課內容:
(一) 授課科目:編譯原理
(二) 授課內容:實驗二 遞歸下降分析程序設計
(三) 授課類型:實 驗
二、教學目的要求:
1.目的:通過設計、編制、調試一個典型的語法分析程序,實現對詞法分析程序所提供的單詞序列進行語法檢查和結構分析,進一步掌握常用的語法分析方法。
2.要求:
(1) 選擇最有代表性的語法分析方法,算符優先法、遞歸子程序法和狀態矩陣法之一進行實驗。
(2) 選擇對各種常見的程序語言都通用的語法結構,如賦值語句(尤其指表達式)作為分析對象,并且與所選語法分析方法要比較貼切。
三、教學設想:
1.教學方法設想:先以例子講解,然后學生動手實驗,實驗為主。
2.教具運用設想:多媒體。
四、教學過程:

題目

編寫一個遞歸下降子程序,實現能被5整除的二進制數的判斷。若能整除則輸出yes,否則輸出no。 試采用具有遞歸功能的高級語言編制遞歸下降法的語法分析程序。分析過程不嵌入任何語義動作。

三.理論分析

為了省事,我直接附圖。展現DFA和文法。((> <)有點小糊,大家湊合著看吧)

四.用代碼實現

功能列表:
(1)輸入二進制數,能判斷是或否二進制數。是,輸出YES; 否,輸出NO。
(2)當輸入不是0或1或#結束標志位的話,報錯,并表明出錯位置,由于哪一個字符產生的錯誤。
(3)#結束程序

效果圖:

代碼:

#include <stdio.h> #include<string.h> int p,tz,i;//tz標志位,1表示YES,O表示NO char st[80];//字符串 char ch;//每次取的字符char sym()//取下一個字符 {return st[p]; }void error(int n)//報錯 {printf("輸入非法字符!!\n",n); }void S(); void A(); void B(); void C(); void D();void S(){if(ch=='0'){p++;ch=sym();S();}else if(ch=='1'){p++;ch=sym();A();}else if(ch=='#'){//出口tz=1;return ;}else{return ;//直接返回,到時候報錯} }void A(){if(ch=='0'){p++;ch=sym();B();}else if(ch=='1'){p++; ch=sym();C();}else {//非法字符return ;} }void B(){if(ch=='0'){p++;ch=sym();D();}else if(ch=='1'){p++;ch=sym();S();}else {//非法字符return ;} }void C(){if(ch=='0'){p++;ch=sym();A();}else if(ch=='1'){p++;ch=sym();B();}else {//非法字符return ;} }void D(){if(ch=='0'){p++;ch=sym();C();}else if(ch=='1'){p++;ch=sym();D();}else {//非法字符return ;} }void main() {printf("please input expression(end with #):");gets(st);strcat(st,"#");p=0; ch=sym();/* if(ch=='#'){printf("finished\n");//exit();return ;}*/while(ch!='#')//循環,以#結束程序{S();if(ch!='#'||tz==1){if(ch!='#'){printf("%d號位錯誤 ,被%c字符引起錯誤!!,again\n",p+1,ch);}else{printf("YES!!\n");}tz=0;}else{printf("NO!!\n");}printf("please input expression (end with #):");fflush(stdin);gets(st);strcat(st,"#");p=0;ch=sym();}printf("finished\n");}

總結

以上是生活随笔為你收集整理的编译原理中词法分析的递归下降分析法实例--能被5整除的二进制数---c语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。