[国产单片机] 编译器推广

[复制链接]
2181|2
 楼主| abcabcabc 发表于 2012-5-10 16:50 | 显示全部楼层 |阅读模式
本帖最后由 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 插入汇编语句
    asm 汇编语句
    asm {多条汇编语句}

extern 引用外部符号
    extern 声明语句;


  1. extern float f;
  2. extern void ExternalFunction(int value);

typedef 创建自定义类型
    typedef 类型名 { 声明 [ , 声明列表 ] }
    typedef 类型名 类型表达式


  1. typedef abc   //abc,自定义类型
  2. {
  3. int a;
  4. int* b;
  5. }
  6. typedef xyz abc *  //xyz 是 abc * 的别名

stdcall 声明函数采用win32api标准调用方式

  1. extern void ExitProcess(stdcall UINT uExitCode);

编译指令#include #define #prefix #code #data #rodata #if #ifdef #ifndef #endif
#include 文本包含指令,用于包含文本文件,例如头文件等
  1. #include "stdio.h"

#define 常量定义指令,用于定义常量标识符

  1. #define abc 1+2+3
  2. #define pi 3.14
  3. #define string "this is a string"
  4. #define label

#prefix 下划线指令,用于在全局变量和函数名前加插下划线
#code, #data, #rodata 字节对齐指令,用于指定代码 数据 只读数据段的字节对齐值

  1. #code 4     //代码段按4字节对齐
  2. #data 8     //数据段按8字节对齐
  3. #rodata 16  //只读数据段按16字节对齐

#if, #ifdef, #ifndef, #endif 条件编译指令,用于条件编译时指定其作用域

  1. #if abc > 100
  2. 。。。
  3. #endif
  4. #ifdef abc
  5. 。。。
  6. #endif
  7. #ifndef abc
  8. .。。。
  9. #endif

操作符:() [] . - ~ & * * / % + - & | ^ << >> == != < > <= >= ! && || ^^ = += -= &= |= ^=
优先级从左到右, 依次递减,左边最高,右边最低
[] 可用于获取字符串长度,类型大小,其值为常量
  1. ["This is a string"] 值为串长度,[int] 值为类型大小

常量:1 0x2 3.0 `abcd` "string" 'literal'
声明:类型表达式 标识符 [ , 标识符列表 ] ;

  1. int a;        //a,整型
  2. int[4] b      //b,整型数组
  3. int[4]* c     //c,整型指针
  4. int*[4]* d    //d,整型数组指针,其元素为整型指针
  5. abc e;             //e,自定义类型
  6. abc* f;            //f,自定义类型指针
  7. vector int[4] g;   //g,整型向量
  8. vector (int[4])* h;   //h,整型向量指针

表达式:

  1. (*c)[2];   //引用指针c,操作其第3个元素
  2. *(*d)[3];  //引用指针d,再引用操作其第4个元素
  3. e.a;       //操作e的成员a
  4. (*f).a;    //引用指针f,操作其成员a
  5. *(*f).b;   //引用指针f,再引用操作其成员b
  6. g+g;       //向量加法操作
  7. *h+*h;   //引用指针h,再做向量加法操作
McuPlayer 发表于 2012-5-10 18:32 | 显示全部楼层
本帖最后由 McuPlayer 于 2012-5-10 18:34 编辑

不必详述语法,建议把和标准C的差异说明即可

你真写具体的语法,估计不少人看不懂正则表达式。
 楼主| abcabcabc 发表于 2012-5-10 19:33 | 显示全部楼层
跟标准C的区别主要是声明和指针引用的写法,还有类型系统

语言的类型系统属于严格类型,所有操作必须类型等价,不做任何隐含转换。

声明语句:左边是类型表达式,右边是标识符
int(int*)* function_pointer;      //函数指针,返回值为整型,参数个数为1个,类型为整型指针
float*[4]* array_pointer;            //数组指针,其所指向的数组的元素为4个,类型为浮点指针

指针操作:(*array)[2];         //读取array的值,作为基地址,再取其第3元素的值
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

8

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部