递归下降语义分析

#include<stdio.h>
#include<string.h>
char str[10];
int index=0;
void E();            //E->TX;
void X();            //X->+TX|-TX| e
void T();            //T->FY
void Y();            //Y->*FY |/fy| e
void F();            //F->(E) | id
int id();           //id
int main()
{
    int len;
    int m;

        printf("请输入算数表达式:");
        scanf("%s",str);
        len=strlen(str);
        str[len]=‘#‘;
        str[len+1]=‘\0‘;
        E();
        printf("正确语句!\n");
        strcpy(str,"");
        index=0;

    return 0;
}
void E()
{
    T();
    X();
}
void X()
{
    if(str[index]==‘+‘)
    {
        index++;
        T();
        X();
    }
    else if(str[index]==‘-‘)
    {
        index++;
        T();
        X();
    }
}
void T()
{
    F();
    Y();
}
void Y()
{
    if(str[index]==‘*‘)
    {
        index++;
        F();
        Y();
    }
    else if(str[index]==‘/‘)
    {
        index++;
        F();
        Y();
    }
}
void F()
{
    if(id())
    {
        index++;
    }
    else if (str[index]==‘(‘)
    {
        index++;
        E();
        if(str[index]==‘)‘)
        {
            index++;
        }else{
            printf("\n分析失败!\n");
            exit (0);
        }
    }
    else{
        printf("分析失败!\n");
        exit(0);
    }
 }
int id()
{
     if(str[index]>=‘0‘&&str[index]<=‘9‘)
    {
        while( str[index+1]>=‘0‘&&str[index+1]<=‘9‘ )
        {
            index++;
        }
        if(str[index+1]>=‘a‘&&str[index+1]<=‘z‘ )
            return 0;

        return 1;
    }
     else if(str[index]>=‘a‘&&str[index]<=‘z‘ )
     {
         return 1;
     }
     else
         return 0;

}
时间: 2024-07-30 20:32:24

递归下降语义分析的相关文章

递归下降分析实验报告

                                                                      实验四:语法分析实验 一.        实验目的   编写递归下降分析语法分析程序. 二.        实验内容和要求 输入:输入算术表达式以"#"结束 输出:是否分析成功 三.        实验方法.步骤及结果测试  1.      源程序名:压缩包文件(rar或zip)中源程序名 语法分析.c 可执行程序名:语法分析.exe 2.    

Atitit 表达式原理 语法分析&#160;原理与实践 解析java的dsl &#160;递归下降是现阶段主流的语法分析方法

Atitit 表达式原理 语法分析 原理与实践 解析java的dsl  递归下降是现阶段主流的语法分析方法 于是我们可以把上面的语法改写成如下形式:1 合并前缀1 语法分析有自上而下和自下而上两种分析方法2 递归下降是现阶段主流的语法分析方法,2 于是我们可以把上面的语法改写成如下形式: 1)       Operator="+" | "-" | "*" | "/" 2)       Expression=<数字>

递归下降分析程序

一.      实验目的 编制一个递归下降分析程序 LL(1)文法: E->TE1 E1->+TE1|-TE1|∑ T->FT1; T1->*FT1|/FT1|∑ F->(E)|i|1 二.      实验内容和要求 输入:LL(1)文法 判断:每遇到一个终结符,则判断当前读入的单词符号是否与该终结符相匹配,若匹配,则继续读取下一个单词符号,若不匹配,则进行错误处理. 每遇到一个非终结符,则调用相应的分析子程序 一.      实验方法.步骤及结果测试   1.   源程序名

实验三、 递归下降分析程序实验

一.        实验目的     练习构造递归下降语法分析程序的方法,熟悉上下文无关文法的使用,加深对课堂教学的理解:提高语法分析方法的实践能力 二.        实验内容和要求 对于给定的文法G[E]               E->TE'              E'->+TE' | ε             T->FT'             T'->*F T'| ε             F->(E) | i 采用递归下降语法分析法编写语法分析程序,该

用递归下降分析求表达式的值

<数据结构>中表达式求值的经典算法是用两个栈,一个存数字,一个存运算符.依次读入表达式中的每个字符,若是数字则进数字栈,若是运算符则和运算符栈的栈顶运算符比较优先权作相应操作,直至整个表达式求值完毕.运算符的优先级表如下   + - * / ( ) # + > > < < < > > - > > < < < > > * > > > > < > > / > >

实验三 递归下降分析法

实验三递归下降分析程序实验 专业 商软2班   姓名 蓝海鹏  学号 201506110171 一.        实验目的      编制一个使用递归下降分析法实现的语法分析程序. 二.        实验内容和要求 输入:正规式 输出:判断该正规式是否正确. 三.        实验方法.步骤及结果测试 1.      源程序名:171-蓝海鹏.c 可执行程序名:171蓝海鹏.exe 2.      原理分析及流程图 3.      主要程序段: 1 #include<stdio.h> 2

203-陈冠权-递归下降分析

递归下降分析: 对于给定的文法G[E] : E→E+T|E-T|T T→T*F| T/F|F F→(E)|i 消除左递归后的文法是: E→TE' E'→+TE'|-TE'|∑ T→FT' T'→*FT'|/FT'|∑ F→(E)|i 是否是LL(1)文法? select(E→TE')=first(TE')={(,i} select(E'→+TE')=first(+TE')={+} select(E'→-TE')=first(-TE')={-} select(E'→∑)=follow(E')={)

递归下降分析程序报告

实验一.递归下降分析程序实验 专业 商业软件工程   姓名 姓名 学号 201506110148 一.        实验目的   编译递归下降分析程序识别c语言文法 二.        实验内容和要求 简单写出c语言文法 分析c语言文法是否为LL1文法,若不是,修改成LL1文法. 编写程序实现对c语言LL1文法判断是否有语法错误 三.        实验方法.步骤及结果测试  1.      源程序名:递归下降分析程序 源程序名递归下降分析程序.c 可执行程序名:递归下降分析程序.exe 2.

递归下降分析-实验报告

实验四:语法分析实验 一.    实验目的 编制一个递归下降分析程序. 二.    实验内容和要求 输入:算术表达式: 输出:判断结果(输入正确/错误). 三.实验方法.步骤及结果测试 1.源程序名:递归下降分析.c    可执行程序名:递归下降分析.exe 2. 原理分析及流程图 3. 主要程序段及其解释: #include<stdio.h> #include<string.h> char str[10]; int index=0; void E(); //E->TX; v