编译原理实验三——语法分析(递归下降法)

原创 2006年05月31日 22:18:00

[实验任务]
完成以下描述算术表达式的LL(1)文法的递归下降分析程序
G[E]:
        E→TE′
        E′→ATE′|ε
        T→FT′
        T′→MFT′|ε
        F→ (E)|i
        A→+|-
        M→*|/
     说明:终结符号i为用户定义的简单变量,即标识符的定义。
[设计要求]
1、 输入串应是词法分析的输出二元式序列,即某算术表达式“实验项目一”的输出结果。输出为输入串是否为该文法定义的算术表达式的判断结果。
2、 递归下降分析程序应能发现输入串出错。
3、 设计两个测试用例(尽可能完备,正确和出错),并给出测试结果。

demo.cpp

bool E() {
 if (T()) {
  if (E_prime()) {
   return true;
  }
 }

 return false;
}

bool E_prime() {
 if (A()) {
  if (T()) {
   if (E_prime()) {
    return true;
   }
   else return false;
  }
  else return false;
 }

 return true;
}

bool T() {
 if (F()) {
  if (T_prime()) {
   return true;
  }
 }
 
 return false;
}

bool T_prime() {
 if (M()) {
  if (F()) {
   if (T_prime()) {
    return true;
   }
   else return false;
  }
  else return false;
 }

 return true;
}

bool F() {
 if (a == '(') {
  advance();
  if (E()) {
   if (a == ')') {
    advance();
    return true;
   }
  }
 }
 else if (a == 'i') {
  advance();
  return true;
 }

 return false;
}

bool A() {
 if (a == '+') {
  advance();
  return true;
 }
 else if (a == '-') {
  advance();
  return true;
 }

 return false;
}

bool M() {
 if (a == '*') {
  advance();
  return true;
 }
 else if (a == '/') {
  advance();
  return true;
 }

 return false;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

哈工大软件学院编译原理实验2——语法分析

这次实验让人煞费苦心啊,话说我已经写了一天的C语言文法了,囧。   总结一下,可以说:程序编写很帅很顺利,文法编写很挫很纠结。我用的是LL(1)分析法(又叫预测分析法),开始的时候花了一段时间来理解...

哈工大编译原理实验2——语法分析

此次试验由于指导书的文法比较简单,且没有消除左递归(我懒),因此使用学长的文法,并加上了数组判断。 S -> func funcs funcs -> func funcs funcs -> $ fun...

递归下降语法分析实验

  • 2007-11-20 14:22
  • 78KB
  • 下载

跟vczh看实例学编译原理——三:Tinymoe与无歧义语法分析

文章中引用的代码均来自https://github.com/vczh/tinymoe。   看了前面的三篇文章,大家应该基本对Tinymoe的代码有一个初步的感觉了。在正确分析"print sum...

编译原理实验之语法分析(算符优先分析算法(C语言))

#include #include #include #include #include #include #include #include #include #include ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)