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