`
asd51731
  • 浏览: 9544 次
  • 性别: Icon_minigender_1
  • 来自: 威海
文章分类
社区版块
存档分类
最新评论

关于编译原理 递归下将分析程序

F# 
阅读更多
   编译原理实验要求构造一个地跪下将分析器,目标是能够对表达式进行自上而下语法分析,主要是识别i+i*i,我编的程序感觉是能实现分析,但不能判断是否符合语法
识别语法为:
E->T|E+T
T->F|T*F
F->i|(E)
程序的源代码为:
#include<iostream>
#include<string>
using namespace std;

bool F(string &str,char* &ip);
bool T(string &str,char* &ip);
bool E(string &str,char* &ip);
bool ADVANCE(string &str,char* &ip);


bool ADVANCE(string &str,char* &ip)
{
ip++;
return true;
}

bool F(string &str,char* &ip)
{
if(* ip=='i')
{
ADVANCE(str,ip);
cout<<"step F"<<endl;
}

else{
if(*ip=='(')
{
ADVANCE(str,ip);
E(str,ip);
if(*ip==')')
{
ADVANCE(str,ip);
cout<<"step F"<<endl;

}
else return false;
}
else return false;
}
return true;
}


bool T(string &str,char* &ip)
{
F(str,ip);
while(*ip=='*')
{
ADVANCE(str,ip);
cout<<"step T"<<endl;
F(str,ip);
}
return true;
}


bool E(string &str,char* &ip)
{
T(str,ip);
while(*ip=='+')
{
ADVANCE(str,ip);
cout<<"step E"<<endl;
T(str,ip);
}
return true;
}
int main()
{
string string1;
char* IP;
cout<<"请输入要分析的表达式:";
cin>>string1;
cout<<endl;
IP=&string1[0];

if(E(string1,IP))
{
cout<<"输入表达式符合已知文法!"<<endl;
}
else cout<<"输入表达式不符合已知文法!"<<endl;
return 0;
}
程序不管怎样多承认符合语法,因为E函数返回的是TRUE,不能反悔FALSE,我想了好长时间也不知干怎样改,才能对给出的表达式进行分析是否符合语法,感觉应该是E函数的循环那地方的问题,希望哪位能指点一下,帮我解决这个问题。
0
0
分享到:
评论

相关推荐

    编译原理 递归下降语法分析程序(代码+说明文档)

    在编译原理中,递归下降语法分析程序是一种基于自顶向下分析方法的解析技术,它主要用于理解程序源代码的结构并将其转化为抽象语法树(AST)。本资源包含了一个递归下降语法分析程序的实现,以及相关的说明文档,...

    编译原理-递归子程序 c++源码

    本资源摘要信息主要介绍了编译原理中的递归子程序设计,通过实验掌握将非 LL(1) 文法改写为 LL(1) 文法的方法,了解递归下降预测分析的原理和过程,以及可能存在的回溯问题。 一、实验目的 通过本实验,掌握将非 ...

    编译原理--递归下降分析程序(C++)

    在编程领域,编译原理是理解计算机语言处理过程的关键部分,它涉及到如何将高级语言转换为机器可执行的指令。本项目重点探讨了编译器中的一个重要组件——递归下降分析程序,它是编译器前端解析语法的重要工具,特别...

    编译原理_递归下降分析语法分析_C语言版

    《编译原理_递归下降分析语法分析_C语言版》是一个深入探讨编译器构造的实践项目,主要涉及编译原理中的语法分析阶段,特别是递归下降分析方法,并使用C语言进行实现。该项目旨在帮助学习者理解如何通过编程对输入的...

    编译原理非递归预测分析

    编译原理是计算机科学中的一个重要领域,主要研究如何将高级编程语言转换为机器可以理解的低级语言。在编译器的设计与实现过程中,解析器是核心组件之一,负责理解程序的语法结构。非递归预测分析(Non-Recursive ...

    编译原理递归方法语法分析器

    根据给定的文件信息,我们可以深入探讨“编译原理中的递归下降语法分析器”的相关知识点,这在编译器设计与实现中占有极其重要的地位。 ### 编译原理概览 编译原理是计算机科学的一个核心领域,涉及到将源代码...

    杭电编译原理实验——递归下降分析子程序

    4. **上机实践**:“杭电编译原理实验”中的上机部分,学生将实际编写递归下降分析子程序,这有助于加深对理论知识的理解,提高编程技巧,同时也能够暴露潜在的问题,如处理复杂文法和优化解析效率。 5. **文件`exp...

    编译原理递归下降分析法实验.doc

    编译原理递归下降分析法实验报告 编译原理是计算机科学的重要组成部分,递归下降分析法是编译原理中的一种常用的语法分析方法。该实验的目的是掌握自上而下语法分析的要求与特点,掌握递归下降语法分析的基本原理和...

    编译原理递归下降分析器的构造

    **编译原理递归下降分析器的构造** 在编译原理中,递归下降分析器是一种自顶向下的语法分析方法,它主要用于构建上下文无关文法的解析过程。递归下降分析器的设计核心在于将文法的每个非终结符映射到一个递归的函数...

    编译原理之递归下降分析程序

    这是一个编译原理的语法分析中关于递归下降分析程序。该程序能够简单的实现对语法的分析。

    递归子程序法和预测分析法程序

    通过这些材料,学习者可以实际操作,观察递归子程序法和预测分析法如何解析不同类型的源代码,理解它们的工作原理,并进一步掌握编译原理的相关知识。 总的来说,递归子程序法和预测分析法是编译器设计的关键组成...

    递归下降分析程序 编译原理实习

    ### 递归下降分析程序:编译原理实习 #### 一、引言 在计算机科学领域,编译器设计是一项非常重要的技术。编译器是将高级语言转换为机器语言的关键工具之一。编译器的设计涉及到词法分析、语法分析、语义分析等多...

    编译原理语法分析—递归下降分析法

    总之,递归下降分析法是编译原理中的重要概念,它提供了一种直观的方式来解析上下文无关文法。通过在C语言中实现,我们可以更深入地了解编译器如何理解并转换程序代码,这对于深入学习编译原理和进行实际的编译器...

    JAVA 自上而下的语法分析程序 递归下降

    编制语法分析程序,要求能将词法分析输出的单词文件用给定的语法规则书写的源程序进行语法分析,输出相应的语法分析结果和错误信息。 关于错误信息:不要求错误种类,只需给出出错位置. 简单的表达式文法如下: E...

    编译原理实验三-递归下降分析程序

    参考C语言版本,用Java写的递归下降分析程序,能对词法分析程序所提供的单词序列进行语法检查和结构分析。被分析的语言应该是PL/0,语法表示如下: (1)&lt;程序&gt;::=begin&lt;语句串&gt;end (2)&lt;语句串&gt;::=&lt;语句&gt;{;...

    编译原理 递归子程序方法 代码

    1.定义部分:定义常量、变量、数据结构。 2.初始化:从文件将输入符号串输入到字符缓冲区中。 3.利用递归下降分析法分析,对每个非终结符编写函数,在主函数中调用文法开始符号的函数。

Global site tag (gtag.js) - Google Analytics