• 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;
        }
    }

  • 相关阅读:
    WebService如何抛出干净的异常
    添加引用方式抛出和捕获干净的WebService异常
    Linq 分组(group by)求和(sum)并且按照分隔符(join)分割列数据
    API & HTTP 请求调试:Postman
    .NET Transactional File Manager
    IIS发布站点错误收集
    zk删除node模式
    zk watch机制及创建node机制
    zk client获取数据
    Zookeeper CLI
  • 原文地址:https://www.cnblogs.com/cgq520/p/5924663.html
Copyright © 2020-2023  润新知