203-陈冠权
词法分析的功能:在录入一串符号串后,通过与程序中以存在的数组,或者用switch语句进行分析,通过这样来分析词法
符号与种别码对照表:
单词符号 |
种别码 |
单词符号 |
种别码 |
begin |
1 |
: |
17 |
if |
2 |
:= |
18 |
then |
3 |
< |
20 |
while |
4 |
<= |
21 |
do |
5 |
<> |
22 |
end |
6 |
> |
23 |
l(l|d)* |
10 |
>= |
24 |
dd* |
11 |
= |
25 |
+ |
13 |
; |
26 |
- |
14 |
( |
27 |
* |
15 |
) |
28 |
/ |
16 |
# |
0 |
文法描述词法规则:
<标识符>:L|L<字母数字>
<数字>: L|d|L<数字>|<数字>
程序如下:
#include<stdio.h>
#define MAX 100
void cifa(char a[MAX]);
main()
{
char ch;
int i=0;
int *b[6]={"begin","if","then","while","do","end"};
char a[MAX];
printf("请输入一个字符串(以@为结束符):");
do{
scanf("%c",&ch);
a[i++]=ch;
}while(ch!='@');
cifa(a);
}
void cifa(char a[MAX])
{
char ch;
int data[MAX];
ch=a[MAX];
switch(ch)
{
case '+':
data[0]=13;
printf("(%d,%c)",data[0],ch);
break;
case '-':
data[1]=14;
printf("(%d,%c)",data[1],ch);
break;
case '*':
data[2]=15;
printf("(%d,%c)",data[2],ch);
break;
case '/':
data[3]=16;
printf("(%d,%c)",data[3],ch);
break;
case ':':
data[4]=17;
printf("(%d,%c)",data[4],ch);
break;
case ':=':
data[5]=18;
printf("(%d,%c)",data[5],ch);
break;
case '<':
data[6]=20;
printf("(%d,%c)",data[6],ch);
break;
case '<=':
data[7]=21;
printf("(%d,%c)",data[7],ch);
break;
case '<>':
data[8]=22;
printf("(%d,%c)",data[8],ch);
break;
case '>':
data[9]=23;
printf("(%d,%c)",data[9],ch);
break;
case '>=':
data[10]=24;
printf("(%d,%c)",data[10],ch);
break;
case '=':
data[11]=25;
printf("(%d,%c)",data[11],ch);
break;
case ';':
data[12]=26;
printf("(%d,%c)",data[12],ch);
break;
case '(':
data[13]=27;
printf("(%d,%c)",data[13],ch);
break;
case ')':
data[14]=28;
printf("(%d,%c)",data[14],ch);
break;
case '#':
data[15]=0;
printf("(%d,%c)",data[15],ch);
break;
default:
break;
}
}