【编译原理】五、简单四则运算的代码实现

news/2024/11/8 0:41:30/

1. 前言

前面说了那么多BNF的相关理论知识,实际上就是为了一个目的:

描述语法规则

描述语法规则是一切的开始。最终,还是要用代码来实现。

如果对于BNF仍然是一头雾水,也没关系,因为我们的最终目的是编写解析器,从现在开始,我们的重点应该放到编码上。

编写代码需要注意的问题,以及编写思路,并不是一个公式就能描述的,有非常多的细节需要处理,编码实现是理论知识的一个升级。在编写代码的过程中,我们可以加强对理论的理解,加强理论理解同时又能编写复杂的解析代码,正所谓:“理论要联系实际”。

2. 编码实现

在上一篇文章 【编译原理】四、编写简单四则运算的EBNF 中,我们编写出了基本的加减乘除四则运算的EBNF,现在我们就基于此生成式进行代码实现。

2.1 项目地址

https://gitee.com/pivotfuture/four-arithmetic
此项目为Qt项目,没有别的原因,就是因为Qt好用,开发效率高,不用复杂配置即可使用。

2.2 实现逻辑

上述项目实现逻辑的图解如下所示:

请添加图片描述

此项目使用C++面向对象的方法进行代码组织,并不是使用纯C开发。个人认为纯C开发虽然效率可能比较高,但是众多的全局变量,众多的函数,看起来比较零散,没有非常清晰的结构,理解上比较困难。

3. 总结

本文主要讲了简单四则运算的代码实现,还是要亲自阅读和调试代码才可以更加深入的理解。在有一定的理解以后,非常建议读者能从0开始编写,这样会加深理解,同时非常有成就感。


http://www.ppmy.cn/news/1010068.html

相关文章

Kubernetes关于cpu资源分配的设计

kubernetes资源 在K8s中定义Pod中运行容器有两个维度的限制: 资源需求(Requests):即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod。如 Pod运行至少需要2G内存,1核CPU。(软限制)资源限额(Limits):即运行Pod期间,可能内存使用量会增加,那最多能使用多少内存,这…

用datagrip远程连接mysql超时怎么解决【连接mysql会遇到的坑】

目录 一.开放端口 【1】在linux打开防火墙或开放3306端口(其实一般情况下服务器里的防火墙并没有开启)​编辑 【2】在阿里云的控制台的云安全组里开放端口 二.修改datagrip连接时高级的useSSL属性 先填好主机(就是IP地址)和端…

5.kubeadm安装

文章目录 kubeadm部署环境初始化所有的节点安装Docker所有节点安装kubeadm,kubelet和kubectl初始化方法一,配置文件初始化方法二,命令初始化 网络插件node节点总结 证书过期方法一方法二总结 部署Dashboard kubeadm部署 环境初始化 ###所有…

如何使用 reqwest 包

GET 请求 向连接发起一个 GET 请求:https://hacker-news.firebaseio.com/v0/topstories.json,并解析返回的内容。 尝试发起请求 因为是 GET 请求,可以先在浏览器中进行查看,浏览器可以正常显示一个 id 列表,如下所示…

《向量数据库指南》——GPTCache的多模态应用文本到图像和文本提示

目录 多模态应用 文本到图像:生成图像 文本提示:一只白色暹罗猫 多模态应用 越来越多人已经不满足于仅依赖 GPT-3.5 驱动的 ChatGPT,大家希望通过 GPT-4 搭建自己的多模态应用——与多种数据模态交互,包括文本、视觉图片和音频等。随着 AI 技术的发展,GPTCache 和 M…

基于java汽车销售分析与管理系统设计与实现

摘 要 计算机现在已成为人们办公和生活不可或缺的组成部分,在工作范畴计算机成熟运用大大提升了工作人员的工作效率,化繁为简,加速社会经济发展。在生活上,人们可以通过计算机互联网更快的了解到全球时事要闻、听到最新潮流音乐、…

LeetCode笔记:Biweekly Contest 110

LeetCode笔记:Biweekly Contest 110 1. 题目一 1. 解题思路2. 代码实现 2. 题目二 1. 解题思路2. 代码实现 3. 题目三 1. 解题思路2. 代码实现 4. 题目四 1. 解题思路2. 代码实现 比赛链接:https://leetcode.com/contest/biweekly-contest-110 1. 题目…

特殊符号的制作 台风 示例 使用第三方工具 Photoshop 地理信息系统空间分析实验教程 第三版

特殊符号的制作 首先这是一个含有字符的,使用arcgis自带的符号编辑器制作比较困难。所以我们准备采用Adobe Photoshop 来进行制作符号,然后直接导入符号的图片文件作为符号 我们打开ps,根据上面的图片的像素长宽比,设定合适的高度…