# qi-1940_complier **Repository Path**: qi-1940/qi-1940_compiler ## Basic Information - **Project Name**: qi-1940_complier - **Description**: CMM(C Minus Minus) is a very tiny subset of C.As gcc is a compiler for C,the software that I am developing,called mcc,is the front end of a compiler for CMM.I will development it using C. - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: https://www.qi-1940.top - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-17 - **Last Updated**: 2025-09-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # qi-1940_compiler软件文档 ## 目录 - [qi-1940\_compiler软件文档](#qi-1940_compiler软件文档) - [目录](#目录) - [项目简介](#项目简介) - [进度](#进度) - [C-语言](#c-语言) - [词法单词及关键字表](#词法单词及关键字表) ## 项目简介 我想用C语言写出一个能运行在x86系统上的C-语言编译器,叫做qi-1940_compiler,简称q1c。 ## 进度 |词法分析|语法分析|语义分析|中间代码生成|中间代码优化|目标代码生成|目标代码优化|符号表|错误处理程序| |:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| |||||||||| ## C-语言 ##****# C-的特性 1. 大小写敏感 2. 只支持int和void类型 4. 空格包含空白、回车符、换行符 5. 语言的表达式包括整数上的算数表达式和整数间比较的布尔表达式 6. 分号分隔,花括号包含多条语句序列 7. 程序由函数声明和变量声明组成,必须先声明后使用,程序的最后一个声明必须是主入口函数声明void main(void) 8. 输入函数int input(void),输出函数void output(int)分别实现从标准输入设备(键盘)读入一个整数值和将一个整数值和换行符打印到标准输出设备(屏幕); 9. 支持if-else、while和return控制语句; 10. 不支持数组和递归函数。 ### 词法单词及关键字表 |种类序号(数字)|种类序号(type)|内容(关键字)| |:---:|:---:|:---:| |0|EOF_|空白 回车符 换行符| |1|INT|int| |2|VOID|| |3|MAIN|main| |4|IF|if| |5|ELSE|else| |6|WHILE|while| |7|BREAK|break| |8|RETURN|return| |9|INPUT|input| |10|OUTPUT|output| |11|ADD|+| |12|SUB|-| |13|MUL|*| |14|DIV|/| |15|LESS|<| |16|MORE|>| |17|SIGNAL_EQUAL|=| |18|LESS_EQUAL|<=| |19|MORE_EQUAL|>=| |20|EQUAL|==| |21|SEMI|,| |22|L_PAR|(| |23|R_PAR|)| |24|L_BRACE|{| |25|R_BRACE|}| |26|ID|标识符在符号表中的下标| |27|NUM|常数| /* words and tokens' list: words,kind number,valve int,1,- void,2,- main,3,- if,4,- else,5,- while,6,- break,7,- return,8,- input,9,- output,10,- +,11,- -,12,- *,13,- /,14,- <,15,- >,16,- =,17,- <=,18,- >=,19,- ==,20,- ;,21,- (,22,- ),23,- {,24,- },25,- identifiers,26,indicator in C_list const_nums,27,indicator in C_list */