詞法分析程式的功能:
提示使用者輸入一段需分析的源程式,然後程式讀入該源程式的字串進行詞法分析,最後輸出詞法分析的結果顯示在螢幕上。
符號與種別碼對照表:
單詞符號 種別碼 單詞符號 種別碼
begin 1 : 17
if 2 := 18
then 3 < 20
while 4 <= 22
do 5
end 6 > 23
l(l|d)* 10 >= 24
dd* 11 = 25
+ 13 ; 26
- 14 ( 27
* 15 ) 28
/ 16 # 0
《字母》
s->a|b|c||d|.....y|z|
《數字》
d->1|2|3|...|8|9|
s->d|sd|s0|
《識別符號》
a->1|2|3|...|8|9|
b->a|b|c|...|y|z|
s->ab
《關鍵字》
b->a|b|c|...|y|z|
s->b|ab|
《運算子》s
a->+|-|*|/|
《界符》
d->:|;|...|<|=|
s->d|sd|
1 #include2#define max 100
3char ch,zifu[max],linshi[15];4
int zhongbie,p;/*
zhongbie代表字元種別,p代表陣列zifi的下標位置*/5
void
cwh();
6main()
7while(zhongbie!=-1
);17}18
void
cwh()
19;/*
char*陣列每個元素指向乙個char型的變數,關鍵字陣列記得zhongbie+1
*/22
char shuangfuhao[2]=;/*
字元=1
*/23 zhongbie=-1;24
for(i=0;i<15;i++)
25 /*
定義乙個臨時存放字串的陣列用作比較
*/26
do27
35/*
識別關鍵字或者識別符號
*/36
if((ch>='
a'&&ch<='
z')||(ch>='
a'&&ch<='z'
))37
43 zhongbie=10;/*
p=p+1下次識別就是p+1
*/44
for(i=0;i<6;i++) /*
將識別出來的字元和已定義的關鍵字作比較
*/4551}
52break;53
}54/*識別數字
*/55
else
if((ch>='
0'&&ch<='9'
))56
62 zhongbie=11;63
break;64
}65else
6677
else
78
79break;80
case
'<':
81 linshi[m++]=ch;
82 ch=zifu[p++];
83if(ch=='='
)8488else
if(ch=='
>')
8993
else
94
95break;96
case
'>':
97 linshi[m++]=ch;
98 ch=zifu[p++];
99if(ch=='='
)100
104else
105
106break
;107
case'+
':zhongbie=13;linshi[0]=ch;break
;108
case'-
':zhongbie=14;linshi[0]=ch;break
;109
case'*
':zhongbie=15;linshi[0]=ch;break
;110
case'/
':zhongbie=16;linshi[0]=ch;break
;111
case'=
':zhongbie=25;linshi[0]=ch;break
;112
case';
':zhongbie=26;linshi[0]=ch;break
;113
case'(
':zhongbie=27;linshi[0]=ch;break
;114
case')
':zhongbie=28;linshi[0]=ch;break
;115
case'#
':zhongbie=0;linshi[0]=ch;break
;116
}117
break
;118
}119 }while(zhongbie!=-1
);120 }
詞法分析程式
上課沒聽啥,一邊看書,一邊做的。基本上,老師的要求是實現了,能把乙個句子 也可以是一整個程式,但還不完善,由於時間急,很多情況來不及考慮了 中的單詞項分析出它是保留字,還是識別符號,運算子等等。開始是在控制台下做得,也比較純正 lex.h ifndef lex h define lex h incl...
詞法分析程式
include include char scanin 300 scanout 300 extern int testscan char scanin 300 scanout 300 file fin,fout 指向輸入輸出檔案的指標 int main include include include...
詞法分析程式
include include void fenxi char c,char b void word char a void number char a int i 定義全域性變數i int s 1 用來記錄是否存在非法字元 main printf n void number char a 對數字字...