私人定制-词法分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了私人定制-词法分析相关的知识,希望对你有一定的参考价值。

私人定制词法分析,能够在输入一整段句子时准确地进行词法分析,并提供种别码表。

通过定义数组循环不断读入与分析单词。

先判断单词是否为数字,如是标志符再进一步判断是关键字、界符还是标识符。

每次读完单词执行一次getchar()后重复循环,当输出##时退出循环。

图片、源代码如下:

#include<stdio.h>
#include<string.h>
#define Max 100
int JdujeNumber(char Words[],int i,int N);
int JdujeKeywords(char Words[]);
char *table[Max][1]={"#","begin","if","then","while","do","end","l(l|d)*","dd*","+","-","*","/",":",":=","<","<=","<>",">",">=","=",";","(",")"};
char Words[Max];
main()
{
    int j,i=0,key;
    printf("\\n各种单词符号对应的种别码\\n");
    for(j=0;j<23;j++)
    {
        printf("%s\\t%d\\t\\t",table[j][0],j);
        if(j%2==0)
            printf("\\n");
    }
    printf("请输入:(输入##代表结束)");
    do
    {
        scanf("%s",Words);
        if(strcmp(Words,"##")==0)
        break;
        j=JdugeNumber(Words,i,strlen(Words));
        if(j==1)
            printf("%s\\t是数字\\n",Words);
        else if(j==0)
            {
                key=JdujeKeywords(Words);
                if(key>=0&&key<=7)
                {
                    printf("%s\\t是关键字\\n",Words);
                }
                else if(key>7&&key<=22)
                {
                    printf("%s\\t是界符\\n",Words);
                }
                else
                {
                    printf("%s\\t是标识符\\n",Words);
                }
            }
            getchar();
    }while(1);
    printf("程序结束!");
}
int JdugeNumber(char Words[],int i,int N)
{
    if(i==N)
        return 1;
    if(Words[i]>47&&Words[i]<58)
    {
        JdugeNumber(Words,i+1,N);
    }
    else
        return 0;
}
int JdujeKeywords(char Words[])
{
    int i;
    for(i=0;i<23;i++)
    {
        if(strcmp(Words,table[i][1])==0)
            return i;
    }
    return -1;
}

技术分享

 

以上是关于私人定制-词法分析的主要内容,如果未能解决你的问题,请参考以下文章

编译原理 实验一 java语言实现对C语言词法分析

使用Scala基于词法单元的解析器定制EBNF范式文法解析

ATFX独家私人定制直播,再升级!

ATFX独家私人定制直播,再升级!

UWP TextBox私人定制

微信H5游戏开发私人定制