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 對數字字...