C语言简单子集编译器功能设计书(第一版)
来源:互联网 发布:网络购票用户名忘记了 编辑:程序博客网 时间:2024/05/29 10:05
1. C语言简单子集
C语言简单子集具有如下特点:
1) 数据类型
仅支持简单数据类型中的有符号2字节整型(使用16位汇编实现,因此int回归到古老的16位)。
2) 数据操作
支持以下数据操作:函数调用、赋值、四则运算、if、while、for、小于、大于、等于、小于等于、大于等于、不等于、逻辑与、逻辑或,支持多层括号运算。不支持变量初始化(自动初始化为0)。不支持连等、逻辑运算时的赋值。
3) 源文件
仅支持单个xxx.c文件程序,不支持头文件。
4) 关键字集合
main、int、if、while、for
5) 宏
不支持宏。
6) 符号集合
(、)、{、}、=、;、+、-、*、/、<、>、==、<=、>=、!=、&&、||、//
7) 函数
只支持无参数无返回值的函数。支持嵌套调用。main函数为程序入口。函数不能从中间返回,只能在最后一行返回,无“return”关键字。
8) 注释
只支持单行注释。
9) 定量制限
9.1) 函数名、变量名长度为1到32字节
9.2) 常数必须是int范围的整数(2字节的古老int,即现代的short)
9.3) 最大单词数、语法树最大节点数为32768
9.4) 源码一行最多容纳1024字节,多出部分截断
10) 输入输出
不支持输入,程序输出结果为所有用户定义的变量在生命期结束时的值和对应的函数名,输出到文件C:\c_simple_outfile(NT)或/tmp/c_simple_outfile(Linux)中。
实例:
//test.c
main(){
int a;
int b;
int c;
a = 1;
b = 2;
c = a + b * b / (b - a);
for( a = 0; a < 10; a = a + 1 ){
c = c + a;
}
a = 0;
while( a <= 10 ){
c = c + a;
a = a + 1;
}
if( a >= 10 ){
if( b == 2 ){
if( c > 0 ){
c = ( c + a * (c - b) );
}
}
}
}
2. 基本语法
2.1) PROGRAM
PROGRAM := DEFINITION ‘main’ ‘(’ ‘)’ ‘{’ BODY ‘}’
2.2) DEFINITION
DEFINITION := ( ( VAR_DEF | FUNC_DEF ) DEFINITION ) | NULL
2.3) VAR_DEF
VAR_DEF := ‘int’ IDENTIFY ‘;’
2.4) FUNC_DEF
FUNC_DEF := IDENTIFY ‘(’ ‘)’ ‘{’ BODY ‘}’
2.5) IDENTIFY
IDENTIFY := alphabet IDENTIFY_FOLLOW
2.6) IDENTIFY_FOLLOW
IDENTIFY_FOLLOW := NULL | ( ( alphabet | number ) IDENTIFY_FOLLOW )
2.7) BODY
BODY := VAR_DEFINITION STATEMENT_LIST
2.8) VAR_DEFINITION
VAR_DEFINITION := ( VAR_DEF VAR_DEFINITION ) | NULL
2.9) STATEMENT_LIST
STATEMENT_LIST := ( ( ASSIGN_STMT ‘;’ | IF_STMT | FOR_STMT | WHILE_STMT | FUNC_CALL ) STATEMENT_LIST ) | NULL
2.10) ASSIGN_STMT
ASSIGN_STMT := IDENTIFY ‘=’ FORMULA
2.11) IF_STMT
IF_STMT := ‘if’ ‘(’ BOOL_FORMULA ‘)’ ‘{’ STATEMENT_LIST ‘}’
2.12) FOR_STMT
FOR_STMT := ‘for’‘(’ ( NULL | ASSIGN_STMT ) ‘;’ BOOL_FORMULA ‘;’ ( NULL | ASSIGN_STMT ) ‘)’ ‘{’ STATEMENT_LIST ‘}’
2.13) WHILE_STMT
WHILE_STMT := ‘while’ ‘(’ BOOL_FORMULA ‘)’ ‘{’ STATEMENT_LIST ‘}’
2.14) FORMULA
FORMULA := ( (‘(’ FORMULA ‘)’ ) | IDENTIFY | numbers ) FORMULA_FOLLOW
2.15) BOOL_FORMULA
BOOL_FORMULA := ( (‘(’ BOOL_FORMULA ‘)’ ) | IDENTIFY | numbers ) BOOL_FORMULA_FOLLOW
2.16) FORMULA_FOLLOW
FORMULA_FOLLOW := NULL | ( ‘+’|‘-’ ) FORMULA | ( ‘*’|‘/’ ) FORMULA
2.17) BOOL_FORMULA_FOLLOW
BOOL_FORMULA_FOLLOW := NULL | (‘||’ BOOL_FORMULA ) | ( ‘&&’ BOOL_FORMULA ) | ( ( ‘<’|‘>’ |‘<=’ |‘>=’ ) BOOL_FORMULA ) | ( ( ‘==’ |‘!=’ ) BOOL_FORMULA ) | ( ( ‘+’|‘-’ ) BOOL_FORMULA ) | ( ( ‘*’|‘/’ ) BOOL_FORMULA )
2.18 ) FUNC_CALL
FUNC_CALL := IDENTIFY ‘(’ ‘)’ ‘;’
3. 预处理
不支持头文件。预处理时去除注释,生成临时文件xxx.c.tmp。
4. 运算优先级
Operators Associativity
() [] -> . left to right
! ~ ++ -- + - * (type) sizeof right to left
* / % left to right
+ - left to right
<< >> left to right
< <= > >= left to right
== != left to right
& left to right
^ left to right
| left to right
&& left to right
|| left to right
?: right to left
= += -= *= /= %= &= ^= |= <<= >>= right to left
, left to right
5. 模块划分
5.1) 预处理模块
5.2) 词法语法分析器
5.3) 语义分析、汇编码生成器
5.4) 可执行文件生成器
6. 多平台
语法分析使用标准c编写,支持多平台。可执行文件生成模块,第一版只支持WindowsXP。
- C语言简单子集编译器功能设计书(第一版)
- C语言简单子集编译器源码(第一版)
- C语言简单子集编译器详细设计书(第一版)
- C语言简单子集编译器(第一版)发布包
- 一个简单的C语言编译器
- C语言程序(第一版) 0
- C语言程序(第一版) 1
- 车牌识别C语言源码 第一版
- 车牌识别C语言源码 第一版
- C语言递归求子集
- 简单C语言编译器之需求说明【待完善】
- 简单C语言编译器之SLR分析【待完善】
- 简单C语言编译器之头文件【待完善】
- 【c语言基础必备】gcc编译器的简单编译
- 小白说编译原理-9-最简单minus-c语言编译器
- C语言编译器
- C语言编译器 Cilk
- C语言编译器浅析
- hdu_1257
- Google MapReduce中文版
- Redis:八、主从复制和虚拟内存
- test
- 什么时候用接口,什么时候用抽象类
- C语言简单子集编译器功能设计书(第一版)
- What Programming language should I learn next?
- Radon变换入门matlab CT原理
- 是谁在敲打我窗
- myeclipse javascript乱码的解决
- OpenCV学习笔记(三十五)——用Qt做摄像头读取
- 排序算法之总结
- 砸冰箱维权是“公益秀”
- html5 本地文件拖拽到浏览器