實驗三、 遞歸下降分析程序實驗
專業 計算機科學與技術 姓名 王曉峰 學號 201506110163
一、 實驗目的
通過設計,編制,調試一個遞歸下降語法分析程序,實現對詞法分析程序所提供的單詞序列進行語法檢查和結構的分析。
二、 實驗內容和要求
輸入:源程序字符串
輸出:正確或者錯誤
三、 實驗方法、步驟及結果測試
1. 源程序名: 遞歸下降語法分析程序.c
2. 原理分析及流程圖
這里的存儲結構主要是用數組來存儲字符串。
采用遞歸子程序方法進行語法分析,對文法中的每個非終結符號按其產生式結構產生相應的語法分析子程序,完成相應的識別任務。其中終結符產生匹配命令,非終結符則產生調用命令。每次進入子程序之前都預先讀入一個單詞。簡單地說就是識別程序由一組子程序組成,每個子程序對應於一個非終結符號。
代碼如下:
#include<stdlib.h> #include<stdio.h> #include<string.h> char str[10]; //記錄要分析的字符串 int x=0; //記錄第一個字符 void E(); void X(); void T(); void Y(); void F(); int main() { int len; printf("請輸入算數表達式:(以#為結束)"); scanf("%s",str); len=strlen(str); str[len]='#'; str[len+1]='\0'; E(); printf("\nTrue!\n"); strcpy(str,""); x=0; return 0; } void E() { T(); X(); } void X() { if(str[x]=='+'||str[x]=='-') { x++; T(); X(); } } void T() { F(); Y(); } void Y() { if(str[x]=='*'||str[x]=='/') { x++; F(); Y(); } } void F() { if(str[x]>='a'&&str[x]<='z') { x++; } else if(str[x]>=0&&str[x]<=9) { x++; } else if (str[x]=='(') { x++; E(); if(str[x]==')') { x++; } else { printf("\nError!\n"); exit(0); } } else { printf("\nError!\n"); exit(0); } }
E(),X(),T(),Y(),F()
上面幾個函數只適用於有括號,字母,加減乘除的算式表達式分析,像其他符號的由於時間問題還有沒有添加進去。
結果測試