词法分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include<stdio.h>
#include<string.h>
char prog[800],token[20];
char ch;
int syn,p,m,sum;
char *rwtab[6]={"begin","if","then","while","do","end"};
 
scaner()
{
    int n;
    for(n=0;n<20;n++)
    m=0;
    sum=0;
    ch=prog[p++];
    while(ch>='a'&&ch<='z')
    {
        ch=prog[p++];
    }
    if(ch>='a'&&ch<='z'||ch>='0'&&ch<='9')
    {
        token[m++]=ch;
        ch=prog[p++];
    }
    syn=10;
    p--;
    for(n=0;n<6;n++)//标识符是否为关键词
    {
        if(strcmp(token,rwtab[n])==0)
        {
            syn=n+1;
            break;
        }
        else if
        {
            if(ch>='0'&&ch<='9')
            {
                sum=sum*10+(ch-'0');
                ch=prog[p++];
            }
            syn=11;
            p--;      
        }
        else
        {
            switch(ch)
        {
            case '<':
                token[m++]=ch;
                ch=prog[p++];
                if(ch='>')
                {
                    syn=21;
                    token[m++]=ch;
                }
                else if(ch=='=')
                {
                    syn=22;
                    token[m++]=ch;
                }
                else
                {syn=20;
                p--;
                }break;
            case '>':m=0;
                token[m++]=ch;
                ch=prog[p++];
                if(ch=='=')
                {
                    syn=24;token[m++]=ch;
                }
                else
                {
                    syn=23;p--;
                }
                break;
            case ':':
                m=0;token[m++]=ch;
                ch=prog[p++];
                if(ch=='=')
                {
                    syn=18;
                    token[m++]=ch;
                }
                else
                {
                    syn=17;
                    p--;
                }
                break;
            case '+':syn=13;token[0]=ch;break;
            case '-':syn=14;token[0]=ch;break;
            case '*':syn=15;token[0]=ch;break;
            case '/':syn=16;token[0]=ch;break;
            case '=':syn=25;token[0]=ch;break;
            case ';':syn=26;token[0]=ch;break;
            case '(':syn=27;token[0]=ch;break;
            case ')':syn=28;token[0]=ch;break;
            case '#':syn=0; token[0]=ch;break;
            default: syn=-1;token[0]=ch;
        }
    }
 
main()
{
    p=0;
    printf("\n请输入源程序段");
    do{
        ch=getchar();
        prog[p++]=ch;
    }while(ch!='#');
    p=0;
    do{
        scaner();//读取一个单词符号,类型syn,单词token或sum
        switch(syn)
        {
        case 11:printf("\n(%d,%d)",syn,sum);
            break;
        case -1:printf("\n(%s,出错!)",token);
            break;
        default:printf("\n(%d,%s)",syn,token);
        }
    }while(syn!=0);
    System("pause");
}
 
 
 
                     
                

  

posted @   248黄迎迎  阅读(132)  评论(0编辑  收藏  举报
编辑推荐:
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
阅读排行:
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· .NET 8.0 + Linux 香橙派,实现高效的 IoT 数据采集与控制解决方案
· .NET中 泛型 + 依赖注入 的实现与应用
点击右上角即可分享
微信分享提示