詞法分析程式

2022-06-04 17:39:08 字數 3467 閱讀 4811

1.詞法分析程式的功能:

詞法分析程式的主要功能是從字元流的程式中識別單詞,他主要從左至右逐個字元地掃瞄源程式,因此他還可以完成其他任務。比如,濾掉源程式中的注釋和空白(由空格/控制符或回車換行字元引起的空白);又如,為了使編譯程式能將發現的錯誤資訊與源程式的出錯位置聯絡起來,詞法分析程式負責記錄新讀入的字元行的行號,以便行號與出錯資訊相關聯;再如,在支援巨集處理功能的源程式中,可以由詞法分析程式完成其預處理等。

2.符號與種別碼對照表:

單詞符號

種別碼單詞符號

種別碼單詞符號

種別碼auto

1short

21<=

41break

2signed

22>=

42case

3sizeof

23==

43char

4static

24:=

44const

5struct

25<> 

45continue

6switch

26< 

46default

7typedef

27=>

47do

8union28=

48double

9unsigned29:

49else

10void33+

50enum

11include34-

51extern

12stdio35*

52float

13string36/

53for

14main37(

54goto

15stdlib38)

55if

16d(number)

4057

long18;

58register19.

59return

203.用文法描述詞法規則:

其中l表示a~z中的任一英文本母,d表示0~9中的任一數字。

4.已完成的**:

}void scaner()/*分別對標示符、數字、符號進行分析*/

if((ch>='a'&&ch<='z')||(ch>='a'&&ch<='z')) /*如果是標示符或者變數名,迴圈尋找*/

token[m]='\0';/*將識別出來的字元和已定義的標示符作比較,輸出其種別碼*/

if(strcmp(token,r1)==0)

else if(strcmp(token,r2)==0)

else if(strcmp(token,r3)==0)

else if(strcmp(token,r4)==0)

else if(strcmp(token,r5)==0)

else if(strcmp(token,r6)==0)

else if(strcmp(token,r7)==0)

else if(strcmp(token,r8)==0)

else if(strcmp(token,r9)==0)

else if(strcmp(token,r10)==0)

else if(strcmp(token,r11)==0)

else if(strcmp(token,r12)==0)

else if(strcmp(token,r13)==0)

else if(strcmp(token,r14)==0)

else if(strcmp(token,r15)==0)

else if(strcmp(token,r16)==0)

else if(strcmp(token,r17)==0)

else if(strcmp(token,r18)==0)

else if(strcmp(token,r19)==0)

else if(strcmp(token,r20)==0)

else if(strcmp(token,r21)==0)

else if(strcmp(token,r22)==0)

else if(strcmp(token,r23)==0)

else if(strcmp(token,r24)==0)

else if(strcmp(token,r25)==0)

else if(strcmp(token,r26)==0)

else if(strcmp(token,r27)==0)

else if(strcmp(token,r28)==0)

else if(strcmp(token,r29)==0)

else if(strcmp(token,r30)==0)

else if(strcmp(token,r31)==0)

else if(strcmp(token,r32)==0)

else if(strcmp(token,r33)==0)

else if(strcmp(token,r34)==0)

else if(strcmp(token,r35)==0)

else if(strcmp(token,r36)==0)

else if(strcmp(token,r37)==0)

else //變數名

}else if((ch>='0'&&ch<='9')) //數字

syn=40;

}else switch(ch) //其他字元

elsebreak;

case'>':m=0;token[m]=ch;m++;

i++;ch=a[i];

if(ch=='=')

elsebreak;

case':':m=0;token[m]=ch;m++;

i++;ch=a[i];

if(ch=='=')

else

break;

case'@':syn=0;token[0]=ch;i++;break;

case'=':syn=48;token[0]=ch;i++;break;

case'#':syn=59;token[0]=ch;i++;break;

case'+':syn=50;token[0]=ch;i++;break;

case'-':syn=51;token[0]=ch;i++;break;

case'*':syn=52;token[0]=ch;i++;break;

case'/':syn=53;token[0]=ch;i++;break;

case'(':syn=54;token[0]=ch;i++;break;

case')':syn=55;token[0]=ch;i++;break;

case'':syn=57;token[0]=ch;i++;break;

case';':syn=58;token[0]=ch;i++;break;

case'.':syn=59;token[0]=ch;i++;break;

case'\'':syn=60;token[0]=ch;i++;break;

default: syn=-1;break;}}

詞法分析程式

上課沒聽啥,一邊看書,一邊做的。基本上,老師的要求是實現了,能把乙個句子 也可以是一整個程式,但還不完善,由於時間急,很多情況來不及考慮了 中的單詞項分析出它是保留字,還是識別符號,運算子等等。開始是在控制台下做得,也比較純正 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 對數字字...