• 大小: 845B
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-08-04
  • 语言: C/C++
  • 标签:

资源简介

一个用C语言写的语法分析程序:通过设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供 的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析方法。

资源截图

代码片段和文件信息

#include
#include
#include
int change(char n)
{
    return n-48;
}
int find(char nchar m[])
{
    int i=0;
    while(m[i]!=n)i++;
    return i;
}
int main()
{
    char in[20]sign[30]avt[]={‘+‘‘*‘‘(‘‘)‘‘#‘};
    int f[5][5]={{1-1-111}{11-111}{-1-1-102}{11211}{-1-1-120}};
    int num[30]intop=-1tp=-1bsum;
    sign[++top]=‘#‘;
l3:
system(“cls“);
    printf(“请输入算式:(退出请按q键)\n“);
    for(i=0;i<20;i++)
    in[i]=‘\0‘;
    scanf(“%s“in);
    if(strcmp(in“q“)==0)exit(0);
    strcat(in“#“);
    for(i=0;i    {
        a=in[i];
        if(a>=‘0‘&&a<=‘9‘)
        {
            b=change(a);
            num[++tp]=b;
        }
        else if(a==‘+‘||a==‘*‘||a==‘(‘||a==‘)‘||a==‘#‘)
        {
l1:
            if(f[find(sign[top]vt)][find(avt)]==-1)
            {
                sign[++top]=a;
            }
            else if(f[find(sign[top]vt)][find(avt)]==2)
            {
              printf(“有错误的算式!\n“);
                 system(“pause“);
                 exit(0);
            }
            else
            {
                if(a==‘)‘)
                {
                 if(sign[top]==‘(‘)
{
top--;
continue;
}
                }
                if(sign[top]==‘*‘)
                {
                    sum=num[tp--];
                    sum*=num[tp--];
                    top--;
                    num[++tp]=sum;
                    if(a!=‘#‘&&a!=‘)‘)sign[++top]=a;
                    else goto l1;
                }
                else if(sign[top]==‘+‘)
                {
                    sum=num[tp--];
                    sum+=num[tp--];
                    top--;
                    num[++tp]=sum;
                    if(a!=‘#‘&&a!=‘)‘)sign[++top]=a;
                    else goto l1;
                }
                else if(a==‘#‘)
                {
                    sum=num[tp--];
                }
            }
        }
        else
        {
            printf(“错误的字符或符号!\n位置:%d错误的符号:%c\n“i+1a);
            system(“pause“);
           goto  l1;
        }
}
   printf(“sum=%d\n“sum);
   system(“pause“);
   goto l3;
 }



 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2293  2010-01-19 12:30  语法分析.cpp

----------- ---------  ---------- -----  ----

                 2293                    1


评论

共有 条评论

相关资源