資源簡介
需要實現的語法分析程序的功能是,接受一個表達式,分析該表達式,并根據輸入正確與否給出相應信息。測試時,如果輸入的表達式分析正確,則輸出表示分析正確的信息;否則,輸出表示分析錯誤的信息。
代碼片段和文件信息
#include
#include??//用于exit的頭文件
#include??
#include??
#include?
void?expr();//E對應的遞歸子程序的聲明
void?exprrest();//E1對應的遞歸子程序的聲明
void?term();//T對應的遞歸子程序的聲明
void?termrest();//T1對應的遞歸子程序的聲明
void?factor();//F對應的遞歸子程序的聲明
void?Error();//出錯處理函數的聲明
void?gettoken();//詞法分析函數gettoken()的聲明
char?ch?=?‘?‘;//用來裝當前輸入對應的字符
int?i=0;//數組位置變量置0
char?strToken[30]={“?“};//用來裝數字串的數組
FILE?*in=fopen(?“input.txt“?“r“?);//建立文件指針并打開文件
//將字符串置成空串函數
void?Retract(char?str[30])
{
for(int?j=0;j<30;j++)
{
str[j]=0;//將數組內的數值全部重置
}
}
//詞法分析函數
void?gettoken()
{??
????ch=fgetc(in);//讀入一個字符
if(isspace(ch))//判斷是否為空格
{
while(1)
{
if(isspace(ch)){ch=fgetc(in);}//如果是空格則指針一直下移
else?break;//直到第一個不為空格的為止,跳出本次循環
}
}
if(isdigit(ch))//判斷是否是數字
{
while(1)
{
if(isdigit(ch))
{
??????strToken[i]=ch;//將后個數字放入前一下數字之后
??i++;//數組中空位置后移?
??ch=fgetc(in);//讀入下一個字符
????}
else?
{
printf(“%s“strToken);//輸出數字串
????????i=0;//將空位置重新計數
????????Retract(strToken);//將數組重新開始置起
????????fseek(in-21);//將指針的位置在當前位置的基礎上向前移2個字符
????????ch=fgetc(in);//讀入當前字符
????break;//跳出循環
}?
}
}
????else
{?
?????????if(ch==‘+‘){printf(“+“);}//當前是符號+的處理
?????else?if(ch==‘-‘){printf(“-“);}//當前是符號-的處理
?????else?if(ch==‘*‘){printf(“*“);}//當前是符號*的處理
?????else?if(ch==‘
- 上一篇:LL(1)分析表的構造以及語句分析
- 下一篇:C語言及其在工業控制系統中的應用
評論
共有 條評論