出发点
为调研minilisp语法,基于之前的c与rust裁剪得出c语言的最小化语法集合。
本质上,最小化语法集合就是实现图灵机的最小语法定义集合。
c语言的最小化语法集合
初稿,后续可能调整。
c | 是否必须 | |
---|---|---|
运算符 | ************************************************************************************************************************ | |
算术运算符 | + -*/% | |
关系运算符 | == != > < >= <= | |
逻辑运算符 | && || ! | |
位运算符 | & | ^ ~ << >> | |
赋值运算符 | = | |
运算符优先级 | 用()改变求值顺序。 | 否 |
数据 | ************************************************************************************************************************ | |
keys | void*,unsigned,char,int,long,double,struct | |
取地址 | void *p=&i; | |
内存读写 | *p=i; 通过指针读写n维数组 | |
变量定义 | int i; void*p; | 否 |
结构体 | struct s{int a; double c;}; | 否 |
内存管理 | malloc() free() | 否 |
控制 | ************************************************************************************************************************ | |
keys | if,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