小C語言 詞法分析程式

2021-08-29 01:10:48 字數 2649 閱讀 1165

小c語言–詞法分析程式

time limit: 1000 ms memory limit: 65535 kib

problem description

小c語言文法

《程式》→()

《宣告序列》→《宣告序列》《宣告語句》|《宣告語句》|《空》

《宣告語句》→《識別符號表》;

《識別符號表》→《識別符號》,《識別符號表》|《識別符號》

《語句序列》→《語句序列》《語句》|《語句》

《語句》→< if語句》|< while語句》|< for語句》|《復合語句》|《賦值語句》

< if語句》→< if關鍵字》(《表示式》)《復合語句》|(《表示式》)《復合語句》< else關鍵字》《復合語句》

< while語句》→< while關鍵字》(《表示式》)《復合語句》

< for語句》→< for關鍵字》(《表示式》;《表示式》;《表示式》)《復合語句》

《復合語句》→

《賦值語句》→《表示式》;

《表示式》→《識別符號》=《算數表示式》|《布林表示式》

《布林表示式》→《算數表示式》 |《算數表示式》《關係運算子》《算數表示式》

《關係運算子》→>|<|>=|<=|==|!=

《算數表示式》→《算數表示式》+《項》|《算數表示式》-《項》|《項》

《項》→《項》*《因子》|《項》/《因子》|《因子》

《因子》→《識別符號》|《無符號整數》|(《算數表示式》)

《識別符號》→《字母》|《識別符號》《字母》|《識別符號》《數字》

《無符號整數》→《數字》|《無符號整數》《數字》

《字母》→a|b|…|z|a|b|…|z

《數字》→0|1|2|3|4|5|6|7|8|9

< main關鍵字》→main

< if關鍵字》→if

< else關鍵字》→else

< for關鍵字》→for

< while關鍵字》→while

< int關鍵字》→int

每行單詞數不超過10個

小c語言文法如上,現在我們對小c語言寫的乙個源程式進行詞法分析,分析出關鍵字、自定義識別符號、整數、界符

和運算子。

關鍵字:main if else for while int

自定義識別符號:除關鍵字外的識別符號

整數:無符號整數

界符: ( ) , ;

運算子:= + - * / < <= > >= == !=

input

輸入乙個小c語言源程式,源程式長度不超過2000個字元,保證輸入合法。

output

按照源程式中單詞出現順序輸出,輸出二元組形式的單詞串。

(單詞種類,單詞值)

單詞一共5個種類:

關鍵字:用keyword表示

自定義識別符號:用identifier表示

整數:用integer表示

界符:用boundary表示

運算子:用operator表示

每種單詞值用該單詞的符號串表示。

sample input

main()

}sample output

(keyword,main)

(boundary,()

(boundary,))

(boundary,)

(boundary,})

hint

source

cai++

#include #include int main()

else //遇到的第乙個非字母非數字非下劃線 退出迴圈

}ss[j] = '\0';

//判斷是否是關鍵字

if(strcmp(ss,"main") == 0 || strcmp(ss,"if") == 0 || strcmp(ss,"else") == 0 || strcmp(ss,"for") == 0 || strcmp(ss,"while") == 0 || strcmp(ss,"int") == 0)

else

memset(ss,0,sizeof(ss)); //字元陣列儲存為空串,以免影響下一次的判斷

j = 0;

i = i - 1;

}else if(str[i] == '(' || str[i] == ')' || str[i] == '' || str[i] == ',' || str[i] == ';') //界符直接輸出

else if(str[i] >= '0' && str[i] <= '9')

else

}ss[j] = '\0';

printf("(integer,%s)\n",ss);

memset(ss,0,sizeof(ss));

j = 0;

i = i - 1;

}else if(str[i] == '=' || str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '/' || str[i] == '<' || str[i] == '>' || str[i] == '!') //若是運算子

else

else}}

}memset(str,0,sizeof(str));

}return 0;

}

小C語言 詞法分析程式

time limit 1000ms memory limit 5000kb submit statistic problem description 小c語言文法 1.程式 2.宣告序列 宣告序列 宣告語句 宣告語句 空 3.宣告語句 識別符號表 4.識別符號表 識別符號 識別符號表 識別符號 5....

小C語言 詞法分析程式

time limit 1000ms memory limit 5000kb submit statistic problem description 小c語言文法 1.程式 2.宣告序列 宣告序列 宣告語句 宣告語句 空 3.宣告語句 識別符號表 4.識別符號表 識別符號 識別符號表 識別符號 5....

小C語言 詞法分析程式

time limit 1000ms memory limit 5000kb submit statistic problem description 小c語言文法 1.程式 2.宣告序列 宣告序列 宣告語句 宣告語句 空 3.宣告語句 識別符號表 4.識別符號表 識別符號 識別符號表 識別符號 5....