c编译器学习06:c语言的最小化语法集合

出发点

为调研minilisp语法,基于之前的c与rust裁剪得出c语言的最小化语法集合。
本质上,最小化语法集合就是实现图灵机的最小语法定义集合。

c语言的最小化语法集合

初稿,后续可能调整。

c是否必须
运算符************************************************************************************************************************
算术运算符+ -*/%
关系运算符== != > < >= <=
逻辑运算符&& || !
位运算符& | ^ ~ << >>
赋值运算符=
运算符优先级用()改变求值顺序。
数据************************************************************************************************************************
keysvoid*,unsigned,char,int,long,double,struct
取地址void *p=&i;
内存读写*p=i; 通过指针读写n维数组
变量定义int i; void*p;
结构体struct s{int a; double c;};
内存管理malloc() free()
控制************************************************************************************************************************
keysif,else,goto,do,while,break,continue,return
分支控制if(…){goto}else{goto} 对应图灵机的磁头左右移动。为了方便编程,保留if else goto之外的几个关键字。
错误处理return -1; 对应图灵机的停机
程序退出状态return 0; 对应图灵机的停机
中断eg:除0,goto到程序异常出口。对应图灵机的停机
行结尾; 对应图灵机的状态集成员,方便程序实现控制
代码块{} 对应图灵机的状态集成员,方便程序实现控制
路径分隔符/ 对应图灵机的状态集成员,方便程序实现控制
标识符命名规则[_A-Za-z0-9] 区分大小写。对应图灵机的状态集成员,方便程序实现控制
递归一般通过递归函数实现。用分支控制+状态数据读写就可以实现递归。
循环控制do{break;continue;}while(…);
函数定义int max(int x, int y) {…}
函数调用int ret = max(a, b);
函数指针int (*)(int,int) p=max;
输入输出************************************************************************************************************************
程序入口及输入输出int main( int argc, char *argv[] ){… return 0;} 对应图灵机的初始状态及停机状态。
文件读写int fopen(); fclose(); fread(…); fwrite(…); 一切皆文件。
基础算法************************************************************************************************************************
随机数srand() rand()
排序qsort()
查找bsearch ()
其它************************************************************************************************************************
代码管理.h.c #include “head.h”

备注

op:

运算符对应cpu中的基础电路模块,用cpu op code触发硬件执行。实现状态转移。

data:

数据在内存中实际只有0、1之分。整数、浮点数、字符串只是数据操作上存在区别。

TuringMachine(图灵机)=op+data:

//图灵机的最简形式,用c语言描述。
out_data main(in_data){ //in_data=输入数据+程序本身的状态数据...;//io + if else goto + labelif(...){//op+data...;//io + if else goto + labelgoto ...;}else{...;//io + if else goto + labelgoto ...;}...;//io + if else goto + label
OK:return 0;//停机
ERROR:return -1;//停机
}

if else goto 与while等价问题

直接用if else goto写代码模拟while
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/487028.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SelectIO】bitslice原语学习记录

基本概念 在Ultrascale (plus)系列上的FPGA中&#xff0c;Xilinx引入了bitslice硬核&#xff0c;它取代了7系列上的IDELAYCTRL/IODELAY/IOSERDES/IODDR系列硬核&#xff0c;用于为HP&#xff08;High Performance&#xff09;类型Bank上的IO接口提供串并转化、信号延时、三态控…

软件版本号解读(语义化SemVer、日历化CalVer及标识符)

1. 版本控制规范 1.1. 语义化版本&#xff08;SemVer&#xff09; 版本格式&#xff1a;主版本号.次版本号.修订号&#xff0c;版本号递增规则&#xff1a; 主版本号(MAJOR version)&#xff1a;添加了不兼容的 API 修改&#xff0c;次版本号(MINOR version)&#xff1a;添加…

85、字符串操作的优化

上一节介绍了在模型的推理优化过程中,动态内存申请会带来额外的性能损失。 Python 语言在性能上之所以没有c++高效,有一部分原因就在于Python语言将内存的动态管理过程给封装起来了,我们作为 Python 语言的使用者是看不到这个过程的。 这一点有点类似于 c++ 标准库中的一些…

(六)激光线扫描-三维重建

本篇文章是《激光线扫描-三维重建》系列的最后一篇。 1. 基础理论 1.1 光平面 在之前光平面标定的文章中,已经提到过了,是指 激光发射器投射出一条线,形成的一个扇形区域平面就是光平面。 三维空间中平面的公式是: A X + B Y + C Z + D = 0 A X+B Y+C Z+D=0

prometheus安装

https://cloud.tencent.com/developer/article/1449258 https://www.cnblogs.com/jason2018524/p/16995927.html https://developer.aliyun.com/article/1141712 prometheus docker安装 https://prometheus.io/docs/prometheus/latest/installation/ docker run --name prometh…

Qt应用-音乐播放器实例

本文讲解Qt音乐播放器应用实例。 实现主要功能 声音播放、暂停,拖动控制、声音大小调节; 播放列表控制; 歌词显示; 界面设计 pro文件中添加 # 播放媒体 QT += multimedia 头文件 #ifndef FRMMUSICPLAYER_H #define FRMMUSICPLAYER_H#include <QWidget> #include…

C 语言 locale.h 库介绍

在 C 语言中&#xff0c;locale.h 头文件提供了一系列函数和宏&#xff0c;用于处理特定地域的设置&#xff0c;比如日期格式、货币符号等。本文将介绍 locale.h 中提供的各种宏、函数和结构&#xff0c;并提供完整的示例代码。 库宏 下面是 locale.h 中定义的一些宏&#xf…

EfficientNet环境搭建网络修改

引子 在深度学习CV领域&#xff0c;最初2012年突破的就是图像分类&#xff0c;发展这么多年&#xff0c;基本上已经没有什么进展了。此篇作为之前EfficientNet挽留过的总结&#xff0c;现在整理下&#xff0c;OK&#xff0c;让我们开始吧。 一、EfficientNet安装 1、pytorch…

【数据分享】中国首套1公里高分辨率大气湿度指数数据集(6个指标\免费获取)

湿度数据是气象学和许多其他领域中至关重要的数据&#xff0c;可用于气象预测与气候研究。之前我们分享过Excel格式和GIS矢量格式&#xff08;均可查看之前的文章获悉详情&#xff09;的2000-2020年全国各城市逐日、逐月和逐年的湿度数据。 本次我们给大家带来的是中国首套1公…

1.1_1 计算机网络的概念、功能、组成和分类

文章目录 1.1_1 计算机网络的概念、功能、组成和分类&#xff08;一&#xff09;计算机网络的概念&#xff08;二&#xff09;计算机网络的功能&#xff08;三&#xff09;计算机网络的组成1.组成部分2.工作方式3.功能组成 &#xff08;四&#xff09;计算机网络的分类 总结 1.…

Vite+Vue3+Ant Design3.2报错: Cannot read properties of null (reading ‘isCE‘)

最近的ViteVue3Ant Design Vue3.2开发的项目莫名其妙的报错&#xff1a; Uncaught (in promise) TypeError: Cannot read properties of null (reading isCE) 一直找不到原因出在哪&#xff0c;害的我费了好多时间调试 &#xff0c;百度上也找了各个解决方法&#xff0c;有说使…

前端JS学习(二):BOM、DOM对象与事件

Web API基本认知 Web API 的作用&#xff1a;使用JS去操作html和浏览器 Web API 的分类&#xff1a;DOM(网页文档对象模型)、BOM(浏览器对象模型) BOM BOM的全称是 Browser Object Model&#xff0c;浏览器对象模型。也就是 JavaScript 将浏览器的各个组成部分封装成了对象&…