问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

VS2010环境在一个程序中实现语法分析和词法分析,求代码

发布网友 发布时间:2022-05-13 19:40

我来回答

1个回答

热心网友 时间:2023-10-23 13:33

//一个词法分析程序,输入源程序,输出 二元组(词法记号 , 属性值 / 其在符号表中的位置)构成的序列

#include<iostream>
#include<cstring>
using namespace std;
 
//char * keywords[6] = {"for","if","then","else","while","do" };
 
int zimu(char a)//分析是否为字母
{
    if ((a>='a')&&(a<='z'))
        return 1;
    else
        return 0;
}
 
int shuzi(char a)
{
    if ((a>='0')&&(a<='9'))
        return 1;
    else
        return 0;
}
 
int biaodian(char a)
{
    if(!zimu(a) && !shuzi(a))
        return 1;
    else
        return 0;
}
 
void showstring(char * a)
{
    int count = 0;
    while( a[count]!='\0')
        cout<<a[count++];
}
 
void fenxi()
{
    char * sentence;
    sentence = new char[50];//储存输入的句子
    int i = 0;
    char input;
    while(cin>>input && input!='#' && i<50)
    {
        sentence[i] = input;
        i++;
    }
 
    char ** id;
    id = new char*[20];
    for(int m = 0;m<20;m++)
    { 
        id[m] = new char[10];
    }
    for(int x = 0;x<20;x++)
    {
        for(int y = 0;y<10;y++)
            id[x][y] = '\0';
    }
 
    char ** num;
    num = new char*[20];
    for( m = 0;m<20;m++)
    { 
        num[m] = new char[10];
    }
    for( x = 0;x<20;x++)
    {
        for(int y = 0;y<10;y++)
            num[x][y] = '\0';
    }
 
    int * token;
    token  = new int[30];
    int t = 0;//标记token中的词法记号个数
 
 
    int danci = -1;//记录字母串的单词个数
    int shuzichuan = -1;
    int dancilong = 0;//记录单词中字母个数
 
    int k = 0;//记录sentence 中的遍历数位
    for(k = 0;k<i;)
    {
        if(zimu(sentence[k]))
        {
            danci ++;
            id[danci][dancilong] = sentence[k];
            k++;
            while(!biaodian(sentence[k]) && k<i)
            {
                dancilong++;
                id[danci][dancilong] = sentence[k];
                k++;
            }
            dancilong = 0;
            if(strcmp("for",id[danci]) ==0)
            {
                token[t] = 1;
            }
            if(strcmp("if",id[danci]) ==0)
            {
                token[t] = 2;
            }
            if(strcmp("then",id[danci]) ==0)
            {
                token[t] = 3;
            }
            if(strcmp("else",id[danci]) ==0)
            {
                token[t] = 4;
            }
            if(strcmp("while",id[danci]) ==0)
            {
                token[t] = 5;
            }
            if(strcmp("do",id[danci]) ==0)
            {
                token[t] = 6;
            }
            else
                token[t] = 10;
            t++;
        }
 
        if(biaodian(sentence[k]))
        {
            danci ++;
            id[danci][dancilong] = sentence[k];
            k++;
            while(biaodian(sentence[k]) && k<i)
            {
                dancilong++;
                id[danci][dancilong] = sentence[k];
                k++;
            }
            dancilong = 0;
            if(strcmp("+",id[danci]) ==0)
            {
                token[t] = 13;
            }
            if(strcmp("-",id[danci]) ==0)
            {
                token[t] = 14;
            }
            if(strcmp("*",id[danci]) ==0)
            {
                token[t] = 15;
            }
            if(strcmp("/",id[danci]) ==0)
            {
                token[t] = 16;
            }
            if(strcmp(":",id[danci]) ==0)
            {
                token[t] = 17;
            }
            if(strcmp(":=",id[danci]) ==0)
            {
                token[t] = 18;
            }
            if(strcmp("<",id[danci]) ==0)
            {
                token[t] = 20;
            }
            if(strcmp("<>",id[danci]) ==0)
            {
                token[t] = 21;
            }
            if(strcmp("<=",id[danci]) ==0)
            {
                token[t] = 22;
            }
            if(strcmp(">",id[danci]) ==0)
            {
                token[t] = 23;
            }
            if(strcmp(">=",id[danci]) ==0)
            {
                token[t] = 24;
            }
            if(strcmp("=",id[danci]) ==0)
            {
                token[t] = 25;
            }
            if(strcmp(";",id[danci]) ==0)
            {
                token[t] = 26;
            }
            if(strcmp("(",id[danci]) ==0)
            {
                token[t] = 27;
            }
            if(strcmp(")",id[danci]) ==0)
            {
                token[t] = 28;
            }
            if(strcmp("#",id[danci]) ==0)
            {
                token[t] = 0;
            }
            t++;
        }
 
        if(shuzi(sentence[k]))
        {
            shuzichuan++;
            num[shuzichuan][dancilong] = sentence[k];
            k++;
            while(shuzi(sentence[k]) && k<i)
            {
                dancilong++;
                num[shuzichuan][dancilong] = sentence[k];
                k++;
            }
            dancilong = 0;
            token[t++] = 11;
        }
    }
 
    int n = 0;
     x = 0;//id计数
     int y = 0;//num计数
    while(n < t)
    {
        if(token[n] == 11)
        {
            cout<<"("<<token[n]<<",";
            showstring(num[y++]);
            cout<<")";
            //y++;
        }
        else
        {
            cout<<"("<<token[n]<<",";
            showstring(id[x++]);
            cout<<")";
        }
        n++;
    }
     
     
}
 
void main()
{
    fenxi();
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
word绘制施工进度横道图!表格好了,中间的横道杂往上打!!!急急急_百 ... 如何用 SWOT 模型进行自我分析? 求朋友圈、公众号文案排版工具? 写文案用什么软件 回复文案的软件推荐 学习挖掘机需要什么条件 学挖机新手从哪里学 挖掘机学习都学什么 新手学开挖掘机先学哪些 手工麦芽糖怎么做? 麦芽糖怎么做小零食 如何开发一门编程语言 词法,语法解析器 程序设计语言的词法规则常用什么文法描述 编译原理 词法分析程序的设计与实现实验题 词法分析和语法分析都是对字符串进行识别,二者区别 怎样做土豆牛肉 D2236,南昌到成都东的动车,南昌上车是在哪个站?南昌火车站还是南昌西站? d2236到重庆北站北广场吗 南昌到重庆北的动车D2236经过庐山吗,可以在庐山上车吗 请问武汉到沙市的动车时刻表? D2236在南昌哪个站上车?知道在哪上车的朋友请告诉一下,谢谢! d2236次动车停靠潼南吗? 南昌到成都火车途径那些站 南昌到成都D2236次经过合川不 8点40南昌至成都东动车d2236途经哪些站 南昌到成都d2336动车途经站点? 动车D2236五月三十日十一点三十二分到达重庆北站是多少时间? 幼儿教师的烦恼有多少 d2236动车途经各站时刻表 为何老师总是教我们爱党?烦不烦呀!这只会有反效果 我给老师打电话,老师很烦我,批评我说烦不烦,不要今天打电话,周一再打,导师是对我不满意吗? 二代身份证办理必须要采集指纹吗? 现在办身份证要验血和印指纹吗, 高龄老人办理二代身份证需要指纹吗? 领取新版身份证时需要按指纹吗 办身份证要采集十个手指头的指纹吗 身份证准备到期,现在的办身份证需要指纹吗 办身份证要指纹吗 Excel的VBA代码解释? 关于Excel中VBA代码理解? 求excel VBA代码。 EXCEL中VBA代码 Excel表格VBA代码的修改 怀孕期间来大姨妈怎么回事? 怀孕其间,月经来是怎么回事 逆天邪神云澈在吟雪界跟几个女的有关系 云澈灭了凤凰神宗吗 逆天邪神云澈入魔第几章 有云澈的现代小说名字 漫画逆天邪神云澈展现杀气是哪一话 云澈什么时候再见神曦