关闭

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

标签: 测试任务
6482人阅读 评论(3) 收藏 举报
分类:

[实验任务]
完成以下描述算术表达式的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;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:137255次
    • 积分:1892
    • 等级:
    • 排名:千里之外
    • 原创:46篇
    • 转载:9篇
    • 译文:0篇
    • 评论:48条
    文章分类