zoukankan      html  css  js  c++  java
  • 词法分析程序

    词法分析程序的功能:
    提示用户输入一段需分析的源程序,然后程序读入该源程序的字符串进行词法分析,最后输出词法分析的结果显示在屏幕上。
    符号与种别码对照表:
    单词符号 种别码 单词符号 种别码
    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 }

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

  • 相关阅读:
    Importing csv data file in SQLite3
    【北京】【高级爬虫开发工程师、高级网页分析工程师】知名上市互联网公司招聘【猎头】
    介绍一个C++的ORM工具ODB(一)
    基础c练习
    virtualenv中文文档放出,请雅正
    navicat sqlite使用了一种wine的方式来支持linux平台,
    之前 传闻已经的djblets竟是reviewboard团队整的
    在HTML5 Web SQL中使用ORM工具 前端开发 e800
    本来想注册个51cto的blog
    Portable way to get file size (in bytes) in shell?
  • 原文地址:https://www.cnblogs.com/lsq141205/p/5924822.html
Copyright © 2011-2022 走看看