⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 此为C语言的词法分析器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                    conacat();
                    getachar();
                }
                if(!isdigit())
                {
                    conacat();
                    getachar();
                    printf("\nerror'%s'",strtoken);
                    reflesh();
                }
                continue;
            }
            retur();
            writo();
            printf("\n'%s':digit",strtoken);
            //getch();
            reflesh();
        }
        else
            switch (ch)              /*否则,若是下面的符号,就直接把它输出*/
            {
            case ',':
            case ';':
            case '(':
            case ')':
            case '{':
            case '}':
            case '[':
            case ']':
            case '~':
            case '#':
            case ':':
            case '^':
            //case '"':
            case '.':
                {
                    conacat();
                    writo();
                    printf("\n'%s':bound",strtoken);
                    //getch();
                    reflesh();
                    break;
                }
            case '"':
            {
                    //conacat();
                    getachar();
                while(ch!='"')
                {
                    conacat();
                    getachar();
                }
                writo();
                printf("\n'%s':string",strtoken);
                    reflesh();
                    break;
            }
            default:
                {
                    if (ch==' ') break;
                    else if (ch=='&' || ch=='|' )  /*如果是这些符号,继续读取下一个*/
                    {
                        conacat();                     /*判断是否为&&,||的情况*/
                        getachar();
                        if (ch==strtoken[0])
                            conacat();
                        else
                            retur();
                        writo();
                        printf("\n'%s':op",strtoken);
                        //getch();
                        reflesh();
                        break;
                    }
                    else if ( ch=='*' || ch=='%' || ch=='/')   /*如果是这些符号,继续读取下一个*/
                    {
                        conacat();                    /*判断是否为/=,*=,%=的情况*/
                        getachar();
                        if (ch=='=')
                            conacat();
                        else
                            retur();
                        writo();
                        printf("\n'%s:op2",strtoken);
                        //getch();
                        reflesh();
                        break;
                    }
                    else if (ch=='+' )            /*如果是这些符号,继续读取下一个*/
                    {
                        conacat();                /*判断是否为+=,++,+的情况*/
                        getachar();
                        switch (ch)
                        {
                        case '=':
                            {
                                conacat();
                                writo();
                                printf("\n'%s:op2",strtoken);
                                //getch();
                                reflesh();
                                break;
                            }
                        case '+':
                            {
                                conacat();
                                writo();
                                printf("\n'%s:op2",strtoken);
                                //getch();
                                reflesh();
                                break;
                            }
                        default:
                            {
                                retur();
                                writo();
                                printf("\n'%s':op",strtoken);
                                //getch();
                                reflesh();
                                break;
                            }
                        }
                        break;

                    }
                    else if (ch=='-')             /*如果是这些符号,继续读取下一个*/
                    {
                        conacat();
                        getachar();
                        switch (ch)                  /*判断是否为-=,--,-的情况*/
                        {
                        case '=':
                            {
                                conacat();
                                writo();
                                printf("\n'%s:op2",strtoken);
                                //getch();
                                reflesh();
                                break;
                            }
                        case '-':
                            {
                                conacat();
                                writo();
                                printf("\n'%s:op2",strtoken);
                                //getch();
                                reflesh();
                                break;
                            }
                        default:
                            {
                                retur();
                                writo();
                                printf("\n'%s':op",strtoken);
                                //getch();
                                reflesh();
                                break;
                            }
                        }
                        break;
                    }
                    else if (ch=='<')    /*如果是这些符号,继续读取下一个*/
                    {
                        conacat();
                        getachar();
                        switch (ch)       /*判断是否为<<,<=,<的情况*/
                        {
                        case '=':
                            {
                                conacat();
                                writo();
                                printf("\n'%s:reop2",strtoken);
                                //getch();
                                reflesh();
                                break;
                            }
                        case '<':
                            {
                                conacat();
                                writo();
                                printf("\n'%s:op2",strtoken);
                                //getch();
                                reflesh();
                                break;
                            }
                        default:
                            {
                                retur();
                                writo();
                                printf("\n'%s':reop",strtoken);
                                //getch();
                                reflesh();
                                break;
                            }
                        }
                        break;
                    }
                    else if (ch=='>')    /*如果是这些符号,继续读取下一个*/
                    {
                        conacat();
                        getachar();
                        switch (ch)         /*判断是否为>>,>=,>的情况*/
                        {
                        case '=':
                            {
                                conacat();
                                writo();
                                printf("\n'%s':reop",strtoken);
                                //getch();
                                reflesh();
                                break;
                            }
                        case '>':
                            {
                                conacat();
                                writo();
                                printf("\n'%s':op",strtoken);
                                //getch();
                                reflesh();
                                break;
                            }
                        default:
                            {
                                retur();
                                writo();
                                printf("\n'%s:reop2",strtoken);
                                //getch();
                                reflesh();
                                break;
                            }
                        }
                        break;

                    }
                    else if (ch=='=' || ch=='!' )  /*如果是这些符号,继续读取下一个*/
                    {
                        conacat();                    /*判断是否为==,!=的情况*/
                        getachar();
                        if (ch==strtoken[0])
                            conacat();
                        else
                            retur();
                        writo();
                        printf("\n'%s':op",strtoken);
                        //getch();
                        reflesh();
                        break;
                    }
                    else
                    {
                        break;
                    }
                }
            }
        getachar();
        getbc();
    }
}
main()
{
    buildfile();
    openfile();
    analysis();
    printf("\n词法分析完毕 !");
    printf("\n词法分析结果已保存在analysis.txt中\n");
//getch();
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -