• 词法分析程序


    词法分析程序的功能:
    提示用户输入一段需分析的源程序,然后程序读入该源程序的字符串进行词法分析,最后输出词法分析的结果显示在屏幕上。
    符号与种别码对照表:
    单词符号 种别码 单词符号 种别码
    begin     1        :          17
    if           2        :=        18
    then      3        <          20
    while      4       <=        22
    do         5 
    end       6         >         23
    l(l|d)*   10       >=       24
    dd*      11       =         25
    +         13         ;        26
    -          14        (         27
    *          15        )        28
    /          16        #         0

    <字母>
    S->a|b|c||d|.....y|z|
    <数字>
    D->1|2|3|...|8|9|
    S->D|SD|S0|
    <标识符>
    A->1|2|3|...|8|9|
    B->a|b|c|...|y|z|
    S->AB
    <关键字>
    B->a|b|c|...|y|z|
    S->B|AB|
    <运算符>s
    A->+|-|*|/|
    <界符>
    D->:|;|...|<|=|
    S->D|SD|

     1 #include<stdio.h>
     2 #define MAX 100
     3 char ch,zifu[MAX];
     4 int zhongbie,p;/*zhongbie代表字符种别,p代表数组zifi的下标位置*/
     5 void cwh();
     6 main()
     7 {
     8     p=0;
     9     gets(zifu);
    10     
    11         cwh();
    12         printf("%d",zhongbie);
    13     /*如何输出数字*/
    14 
    15 }
    16 void cwh()
    17 {
    18     int i,m;/*m用于记录linshi的下标*/
    19     char *guanjianzi[6]={"begin","if","then","while","do","end"};/*char*[]数组每个元素指向一个char型的变量,关键字数组记得zhongbie+1*/
    20     char shuangfuhao[2]={'1','1'};/*字符=1*/
    21     char linshi[8];
    22     for(i=0;i<8;i++)
    23         linshi[i]=NULL;/*定义一个临时存放字符串的数组用作比较*/
    24     m=0;
    25     ch=zifu[p++];
    26     /*开始识别字符种别*/
    27     while(ch==' ')
    28     {
    29         p++;
    30         ch=zifu[p];   
    31     }
    32     /*识别关键字或者标志符*/
    33     if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
    34     {
    35          while((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
    36         {
    37             linshi[m++]=ch;
    38             ch=zifu[p++];
    39         }
    40         p--;
    41         zhongbie=10;
    42         for(i=0;i<6;i++)  /*将识别出来的字符和已定义的标示符作比较 */
    43         {
    44             if(strcmp(linshi,guanjianzi[i])==0)
    45             {
    46                 zhongbie=i+1;
    47                 break;
    48             }
    49         }
    50     }
    51     /*识别数字*/
    52     else if((ch>='0'&&ch<='9'))
    53     {
    54         while((ch>='0'&&ch<='9'))
    55         {
    56             ch=zifu[++p];
    57         }
    58         zhongbie=11;
    59     }
    60 
    61 }

    程序还没完成,只写到了识别关键字和数字的部分

  • 相关阅读:
    LeetCode Subarrays with K Different Integers
    LeetCode Repeated DNA Sequences
    为什么要使用静态方法
    String,StringBuilder,StringBuffer
    汉诺塔递归算法
    设计模式之代理模式
    设计模式之单例设计模式
    设计模式之工厂方法和抽象工厂
    设计模式之模板方法
    并发技巧清单(1)
  • 原文地址:https://www.cnblogs.com/lsq141205/p/5924822.html
Copyright © 2020-2023  润新知