词法分析的功能:在录入一串符号串后,通过与程序中以存在的数组,或者用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 100void 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; }}