zoukankan      html  css  js  c++  java
  • 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;
        }
    }

  • 相关阅读:
    【BZOJ2006】[NOI2010] 超级钢琴(堆+RMQ)
    【洛谷1120】小木棍(一道有技巧的dfs)
    【BZOJ1857】传送带(分治经典:三分套三分)
    【BZOJ1045】糖果传递(基于贪心的数学题)
    【CF1000C】Covered Points Count(离散化+差分)
    【洛谷1486】[NOI2004] 郁闷的出纳员(Splay的小运用)
    【洛谷1156】垃圾陷阱(动态规划)
    严格次小生成树学习笔记
    高斯消元入门
    【洛谷4011】孤岛营救问题(状压SPFA)
  • 原文地址:https://www.cnblogs.com/cgq520/p/5924663.html
Copyright © 2011-2022 走看看