`
woxiaoe
  • 浏览: 283699 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

递归下降 方法 1126 3295

阅读更多

http://acm.pku.edu.cn/JudgeOnline/problem?id=1126

http://acm.pku.edu.cn/JudgeOnline/problem?id=3295

两道题目很相似,都是对一个字符串进行分析,并得出结果,核心思想使用递归下降的方法

code 1126

  1. #include<iostream>
  2. #include<string>
  3. usingnamespacestd;
  4. intj(0);
  5. stringtemp;
  6. intcheck();
  7. intmain()
  8. {
  9. freopen("in.txt","r",stdin);
  10. intf;
  11. while(cin>>temp)
  12. {
  13. f=check();
  14. if(j<temp.size())//如果调用完后,j<temp.size()那么就为错
  15. f=0;
  16. j=0;
  17. if(f)
  18. cout<<"YES"<<endl;
  19. else
  20. cout<<"NO"<<endl;
  21. }
  22. return0;
  23. }
  24. intcheck()
  25. {
  26. intch=temp[j++];
  27. switch(ch)
  28. {
  29. case'p':case'q':case'r':case's':case't':case'u':case'v':case'w':case'x':case'y':case'z':return1;break;
  30. case'I':case'E':case'D':case'C':returncheck()&check();break;
  31. case'N':returncheck();break;
  32. default:return0;
  33. }
  34. }

code 3295

  1. #include<iostream>
  2. usingnamespacestd;
  3. intcheck();
  4. intj(0);
  5. chartemp[201];
  6. shortv[200]={0};
  7. intmain()
  8. {
  9. freopen("in.txt","r",stdin);
  10. intp,q,r,s,t,f(1);
  11. while(cin>>temp&&temp[0]!='0')
  12. {
  13. f=1;
  14. j=0;
  15. //对32 种情况的枚举
  16. for(p=0;p<=1&&f;p++)
  17. for(q=0;q<=1&&f;q++)
  18. for(r=0;r<=1&&f;r++)
  19. for(s=0;s<=1&&f;s++)
  20. for(t=0;t<=1&&f;t++)
  21. {
  22. v['p'-'0']=p;
  23. v['q'-'0']=q;
  24. v['r'-'0']=r;
  25. v['s'-'0']=s;
  26. v['t'-'0']=t;
  27. j=0;
  28. f=check();
  29. if(f==0)
  30. {
  31. cout<<"not"<<endl;
  32. break;
  33. }
  34. }
  35. if(f)
  36. cout<<"tautology"<<endl;
  37. }
  38. return0;
  39. }
  40. intcheck(){
  41. intch=temp[j++];
  42. switch(ch){
  43. case'p':case'q':case'r':case's':case't':returnv[ch-'0'];break;
  44. case'K':returncheck()&check();break;
  45. case'A':returncheck()|check();break;
  46. case'N':return!check();break;
  47. case'C':return!check()|check();break;
  48. case'E':return!check()^check();break;
  49. }
  50. }
分享到:
评论

相关推荐

    对于任意给定的输入串(词法记号流)进行语法分析,递归下降方法和非递归预测分析方法可以任选其一来实现。

    2. 对于任意给定的输入串(词法记号流)进行语法分析,递归下降方法和非递归预测分析方法可以任选其一来实现。 3. 要有一定的错误处理功能。即对错误能提示,并且能在一定程度上忽略尽量少的记号来进行接下来的分析...

    递归下降分析子程序方法实验

    递归下降分析子程序方法实验旨在让学生深入理解这一概念,并通过实践来掌握其应用。 EBNF是一种用于表示上下文无关文法的符号系统,它比传统的巴科斯范式(BNF)更为灵活,可以更直观地表达重复、选择和可选结构。...

    算术表达式文法的递归下降语法分析程序

    本文对算术表达式文法的递归下降语法分析程序进行了详细的知识点总结,包括算术表达式文法、递归下降语法分析、LL(1)文法、设计原理、实验内容、数据结构设计、递归函数设计、语法分析步骤、测试用例和实现方法等...

    for语句递归下降法

    其中,"递归下降法"是一种常用的解析技术,特别是对于构造词法分析器(lexer)和语法分析器(parser)。在本案例中,我们将深入探讨“for语句”的递归下降法解析,这是C++编程语言中的一种控制流程结构。 首先,让...

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

    我们将深入探讨递归下降分析的原理、实现方法以及它在C++中的应用。 递归下降分析是一种自顶向下的语法分析方法,其核心思想是利用函数的递归调用来对应文法的非终结符,通过这种方式,解析器可以逐步分解输入的...

    编译原理实验-递归下降的方法实现语法分析器

    (使用Python实现,注释详尽)在词法分析器的基础上,采用递归下降的方法实现算术表达式的语法分析器,以加深对自上而下语法分析过程的理解。 1、对算术表达式文法: E→TE' E'→+TE'| -TE' |ε T→FT' T'→*FT'| /...

    递归下降法实现语法分析器(java)

    递归下降法是一种常用的自顶向下语法分析方法,它利用函数的递归调用来对应文法规则的结构。在Java中实现递归下降法可以创建出高效且易于理解的解析器。下面将详细探讨递归下降法的原理以及如何在Java中实现。 递归...

    C++ 递归下降布尔表达式

    使用C++ 实现的布尔表达式的递归下降 得到推导过程 词法分析 以及逆波兰式

    递归下降分析法模拟c++

    其中,递归下降分析法是一种常用的解析技术,尤其在构造简单到中等复杂度的语法时非常有效。本实验旨在通过C++编程语言,让学生深入理解和应用递归下降分析法来解析和计算表达式。 递归下降分析法,也称为递归下降...

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

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

    递归下降语法分析

    总之,递归下降语法分析是一种直观且易于实现的解析方法,适合于理解简单的上下文无关文法。通过阅读和理解给出的代码和测试用例,初学者可以更好地掌握这一概念,并应用于实际的编译器或解释器开发中。

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

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

    递归下降语法

    递归下降语法分析是一种常用的语法分析方法,它的核心思想是将文法中的每个非终结符编写一个函数,每个函数的功能是识别由该终结符所表示的语法成分。这种分析法要求文法是LL(1)的,意味着对于每个非终结符,存在一...

    SNL递归下降语法分析 C++实现

    本文将深入探讨“SNL递归下降语法分析”这一主题,结合C++语言来阐述其原理和实现过程。 首先,我们需要了解什么是SNL。在上下文中,SNL可能指的是某种特定的语法规范或者符号表(Symbol Table)的设计,但具体含义...

    递归下降分析法

    递归下降分析法是编译原理中的一种解析技术,主要用于将源程序的语法结构转换为抽象语法树(AST),它是基于上下文无关文法(Context-Free Grammar, CFG)的一种自顶向下(Top-Down)的解析方法。在编译器设计领域,...

    递归下降子程序的编写

    递归下降子程序是编译原理中的一种语法分析方法,它通过自顶向下预测分析来判断输入串是否符合某种文法。下面我们将详细分析递归下降子程序的编写。 一、实验目的 通过本实验,我们将了解递归下降预测分析的原理和...

    递归下降语法分析器

    递归下降语法分析器是编译原理中的一个重要概念,它是一种自顶向下的解析方法,主要用于解析源代码,将源程序转化为抽象语法树(AST)。这种方法依赖于一系列互相递归的函数来匹配输入的词法符号,从而实现对源代码...

    递归下降分析器设计与实现.pdf

    递归下降分析器设计与实现 递归下降分析器是编译原理中的一种重要的语法分析技术,用于分析和解析源代码中的语法结构。该技术的设计和实现是编译原理的核心内容,本文将详细介绍递归下降分析器的设计和实现。 1. ...

    递归下降语法分析器的实现

    在计算机科学领域,语法分析是编译器设计的关键部分,其中递归下降语法分析器是一种常用的解析技术。本文将深入探讨递归下降语法分析器的原理、实现方式以及其在编程语言处理中的应用。 首先,我们需要理解什么是...

Global site tag (gtag.js) - Google Analytics