本帖最后由 abcabcabc 于 2012-6-26 14:33 编辑
论坛地址:http://mycompiler.forumer.com/index.php 里面有win32版本可下载
需要做编译器(CISC RISC指令集都可实现)的客户请联系13316151431
语言的设计是在传统C语言上修改完善,采用直观的语法和严格的类型系统。
与传统C语言最大的区别在于:
类型系统属于严格类型方式,没有隐式类型转换,显示类型转换在需要的地方必须使用。
向量,或SIMD数据操作有内建的支持,无需使用SIMD intrinsic。
数组,指针属于独立的类型,消除传统C语言在此方面容易令人含糊的表述,令代码更加清晰明了。
语法规则简述:
关键字:void unsigned byte word dword int float vector typedef extern asm if else do while for switch case default break continue return stdcall
struct关键字被取消,结构体被视作自定义类型,请用typedef创建自定义类型
vector 用于定义向量类型
vector 类型表达式 标识符[, 标识符列表];
asm 插入汇编语句
extern 引用外部符号
extern float f;
extern void ExternalFunction(int value);
typedef 创建自定义类型
typedef 类型名 { 声明 [ , 声明列表 ] }
typedef 类型名 类型表达式
typedef abc //abc,自定义类型
{
int a;
int* b;
}
typedef xyz abc * //xyz 是 abc * 的别名
stdcall 声明函数采用win32api标准调用方式
extern void ExitProcess(stdcall UINT uExitCode);
编译指令:#include #define #prefix #code #data #rodata #if #ifdef #ifndef #endif
#include 文本包含指令,用于包含文本文件,例如头文件等
#define 常量定义指令,用于定义常量标识符
#define abc 1+2+3
#define pi 3.14
#define string "this is a string"
#define label
#prefix 下划线指令,用于在全局变量和函数名前加插下划线
#code, #data, #rodata 字节对齐指令,用于指定代码 数据 只读数据段的字节对齐值
#code 4 //代码段按4字节对齐
#data 8 //数据段按8字节对齐
#rodata 16 //只读数据段按16字节对齐
#if, #ifdef, #ifndef, #endif 条件编译指令,用于条件编译时指定其作用域
#if abc > 100
。。。
#endif
#ifdef abc
。。。
#endif
#ifndef abc
.。。。
#endif
操作符:() [] . - ~ & * * / % + - & | ^ << >> == != < > <= >= ! && || ^^ = += -= &= |= ^=
优先级从左到右, 依次递减,左边最高,右边最低
[] 可用于获取字符串长度,类型大小,其值为常量
["This is a string"] 值为串长度,[int] 值为类型大小
常量:1 0x2 3.0 `abcd` "string" 'literal'
声明:类型表达式 标识符 [ , 标识符列表 ] ;
int a; //a,整型
int[4] b //b,整型数组
int[4]* c //c,整型指针
int*[4]* d //d,整型数组指针,其元素为整型指针
abc e; //e,自定义类型
abc* f; //f,自定义类型指针
vector int[4] g; //g,整型向量
vector (int[4])* h; //h,整型向量指针
表达式:
(*c)[2]; //引用指针c,操作其第3个元素
*(*d)[3]; //引用指针d,再引用操作其第4个元素
e.a; //操作e的成员a
(*f).a; //引用指针f,操作其成员a
*(*f).b; //引用指针f,再引用操作其成员b
g+g; //向量加法操作
*h+*h; //引用指针h,再做向量加法操作
|