递归下降子程序的编写

简介: 该内容是关于一个递归下降解析器的实现,用于判断给定的算术表达式是否符合特定的文法。文法定义如下:

1.针对算术表达式文法:

         E→TE’

         E’ → +TE’|ε

         T→FT’

         T’ →*FT’ |ε

         F→(E) |i

为其编写递归下降子程序,判定某个算术表达式是否正确:如j+k*m,j*k+m

输入:其输入数据应该为词法分析器输出的记号形式:i+i*i,i*i+i

输出:分析结果:算术表达式结构正确或结构错误。

[评论可见]隐藏内容 - 管理员可见

#include <iostream>

using namespace std;

char token[100];

int localhead = 0;

void E();

void E_();

void T();

void T_();

void F();

void match(char local);

void error();

int main() {

   char ch;

   int i = 0;

   cout << "请输入:";

   cin >> token;

   E();

   if(localhead!=strlen(token)){

       error();

   }

   return 0;

}

void match(char local) {

   if (token[localhead] == local) {

       localhead++;

   } else {

       error();

   }

}

void E() {

   cout << "E->TE'" << endl;

   T();

   E_();

}

void E_() {

   if (token[localhead] == '+') {

       cout << "E'->+TE'" << endl;

       match('+');

       T();

       E_();

   } else {

       cout << "E'->ε" << endl;

   }

}

void T() {

   cout << "T->FT'" << endl;

   F();

   T_();

}

void T_() {

   if (token[localhead] == '*') {

       match('*');

       cout << "T'->*FT'" << endl;

       F();

       T_();

   } else {

       cout << "T'->ε" << endl;

   }

}

void F() {

   if (token[localhead] == 'i') {

       match('i');

       cout << "F->i" << endl;

   } else if (token[localhead] == '(') {

       match('(');

       E();

       if (token[localhead] == ')') {

           cout << "F->(E)" << endl;

           match(')');

       } else {

           error();

       }

   }

}

void error() {

   cout << "产生错误";

}

目录
相关文章
|
前端开发 数据可视化 JavaScript
前端图形学实战: 从零开发一款轻量级滑动验证码组件(vue3 + vite版)
前端图形学实战: 从零开发一款轻量级滑动验证码组件(vue3 + vite版)
1582 0
|
SQL 存储 关系型数据库
轻松入门MySQL:数据库关联与多表查询,构建高效的业务决策引擎(6)
轻松入门MySQL:数据库关联与多表查询,构建高效的业务决策引擎(6)
404 0
|
1月前
|
人工智能 弹性计算 数据可视化
手把手教程!阿里云官方推出五种OpenClaw快速部署方案
阿里云官方现已提供五种可视化快速部署方案,无需编写复杂脚本,即可在云上快速搭建专属AI助理。本文将带大家逐一了解各方案的适用场景、操作步骤及选择建议。
582 4
“燕缘 · 滴水湖”大学生AI+国际创业大赛 ——算力资源领取说明
本次大赛为每位参赛学生提供300元阿里云算力资源,通过赛事官网链接领取。领取流程包括:点击专属页面、扫码登录阿里云、完成代金券领取,并在“我的权益-可用券”中查看领取状态。注意代金券使用期限和额度,避免超额使用产生欠费。若已领取过,可直接使用。
|
12月前
|
存储 人工智能 自然语言处理
知识库管理:全流程智能化中枢,驱动企业信息资产高效流转
智能系统的知识库管理技术可以深度融合AI技术与精细化流程控制,提供从内容创建到版本追溯的全生命周期管理。支持多模态数据统一存储(文本、语音、图像等),实现自动化审核、智能分类与语义检索,确保企业知识资产的安全存储与高效利用,助力业务持续优化。核心功能包括多角色协作编辑、动态标签管理、历史版本追溯及毫秒级语义检索,大幅提升信息管理效率与准确性。
583 9
|
人工智能 算法 Serverless
《主动式智能导购AI助手构建》解决方案用户评测
在部署体验过程中,官方提供的详尽文档和图表帮助新手轻松上手,但环境变量设置等问题仍需改进。解决方案采用Multi-Agent架构,百炼大模型实现精准推荐,函数计算优化响应速度。生产环境部署指导全面,但仍需加强异常处理和面向新手的教学资源。整体架构清晰高效,建议完善数据流描述及Router Agent算法逻辑的阐述。
361 11
《主动式智能导购AI助手构建》解决方案用户评测
|
人工智能 供应链 数据可视化
跨境电商供应链优化趋势:从智能库存到绿色物流
高效供应链管理是行业发展的关键,涉及原材料采购、生产制造、库存管理、跨境物流和终端交付等环节。通过数据驱动决策、多供应商合作、灵活物流策略、清关合规和技术赋能,可以优化供应链,提升运营效率。
1297 7
跨境电商供应链优化趋势:从智能库存到绿色物流
|
存储 JSON 前端开发
JSON与现代Web开发:数据交互的最佳选择
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也便于机器解析和生成。它以文本格式存储数据,常用于Web应用中的数据传输,尤其是在客户端和服务器之间。
998 1
|
数据可视化 数据库
通义灵码个人版新功能最佳实践测评
作为一名软件开发工程师,我使用通义灵码个人版的@workspace和@terminal功能,快速熟悉新的电商项目代码并实现新功能,效率提升了约30%。通过自动识别项目结构、代码分析、智能注释和自动补全等功能,大幅减少了查找资料和调试的时间,使开发流程更加顺畅,专注于业务逻辑实现。
401 1
|
物联网 5G vr&ar
5G频谱分布:连接未来的桥梁
5G频谱分布:连接未来的桥梁
1200 2