zoukankan      html  css  js  c++  java
  • 软件构造实验三-递归下降分析分析法

    【实验目的】 

    (1)掌握自上而下语法分析的要求与特点。 

    (2)掌握递归下降语法分析的基本原理和方法。 

    (3)掌握相应数据结构的设计方法。  

    【实验内容】 

    用递归下降法编写一个语法分析程序,使之与词法分析器结合,能够根据语言的上下文无关文法,识别输入的单词序列是否文法的句子。

    【实验要求】 

    对下列文法,用递归下降分析法对任意输入的符号串进行分析:

    E->TG    G->+TG|-TG   G->ε

    T->FS    S->*FS|/FS    S->ε

    F->(E)     F->i

    代码精髓:

    根据上述分析法进行建立

    void E();

    1 void E()
    2 {
    3     cout << "S->TG		";
    4     Fen();
    5     Sheng();
    6     T();
    7     G();
    8     
    9 }
    void E()

    void T();

    1 void T()
    2 {
    3     cout << "T->FS		";
    4     Fen();
    5     Sheng();
    6     F();
    7     S();
    8     Leaf = 0;
    9 }
    Void T()

    void G();

     1 void G()
     2 {
     3     if (str[lookahead] == '+')
     4     {
     5         cout << "G->+TG	";
     6         match('+');
     7         T();
     8         G();
     9         Leaf = 1;
    10     }
    11     else if (str[lookahead] == '-')
    12     {
    13         cout << "G->-TG	";
    14         match('-');
    15         T();
    16         G();
    17         Leaf = 1;
    18     }
    19     cout << "G->ε		";
    20     Fen();
    21     Sheng();
    22     Leaf = 1;
    23 
    24 }
    void G()

    void F();

     1 void F()
     2 {
     3 
     4     if (str[lookahead] == 'i')
     5     {
     6         cout << "F->i	";
     7         match('i');
     8         Leaf = 1;
     9     }
    10 
    11     else if (str[lookahead] == '(')
    12     {
    13         cout << "F->(E)	";
    14         match('(');
    15         E();
    16         if (str[lookahead] == ')')
    17             match(')');
    18         else Error();
    19         Leaf = 0;
    20     }
    21     else
    22     {
    23         Leaf = 0;
    24         Error();
    25         
    26     }
    27 
    28 }
    void F()

    void S();

    void S()

     运行结果:

  • 相关阅读:
    ArcMap+ArcCatalog手工新建点层及添加数据
    zedGraph 图表控件总结(一)
    Android 开发学习笔记(五)—— 最简单的注册界面
    repeater实现删除按钮
    repeater分页实例
    FCKeditor的使用说明
    javascript:void(0)是什么意思
    为asp.net控件点击事件添加Confirm()
    LINQ判断素数
    U盘文件不能删除,怎么处理
  • 原文地址:https://www.cnblogs.com/smartisn/p/11775773.html
Copyright © 2011-2022 走看看