Elite是一款脚本化驱动的编译器,一般的编程语言,语法是固定的,只能使用有限的表达方式,而Elite的语法并非固定,而是由脚本配置而成的,如果需要,随时都可以自由更改。
这个特点,使得Elite非常容易自由开发,成为一款领域专业语言(DSL),在自由配置后,方便地表达专业的相关内容。
详细请参加文档: http://elite-lang.org/doc/zh-cn/
clone全部仓库,注意添加--recursive
参数来下载全部子项目
git clone --depth=1 --recursive git@github.com:elite-lang/Elite.git
本项目是在Ubuntu14.04 64位系统下开发的,依赖cmake-2.8, LLVM-3.6和glibmm-2.4、giomm-2.4, flex-2.5 bison-3.0 lua oolua dyncall
sudo apt-get install cmake llvm-3.6-dev libglibmm-2.4-dev flex bison libedit-dev
修复ubuntu源中LLVM-3.6的bug:
sudo sh ./scripts/fix_ubuntu_llvm.sh
然后在项目根目录下执行:
make release
即可编译整个项目
或者手动进行如下步骤:
mkdir build && cd build
cmake .. //cmake配置
make deps //下载并构建依赖项目
make //构建项目
项目不会向系统添加任何文件,希望使用环境变量配置,将编译器添加到PATH目录中,并且ELITE_HOME也确保编译器能够找到默认的词法、语法配置文件
# for elite
export ELITE_HOME=【您的Elite仓库地址】
export PATH=$ELITE_HOME/bin:$ELITE_HOME/tools:$PATH
elite的语法非常简洁,是类似C语言的强类型语言,并且函数和类型都不需要前向声明,拥有基于结构体的类型系统,由于是使用RedApple作为后端,所以两者的语法几乎完全一致
目前支持的语法特性有:
- 全局函数,无需声明
- 简单的类型系统,支持int、float、double和结构体struct
- 简化的指针,所有结构体变量声明的都是指针
- 支持常量字符串
- for while if 等逻辑控制语句
- import 其他文件
- meta元数据和反射调用
- 用户自定义宏
示例代码:
void hello(int k, int g) {
int y = k + g;
printf("%d\n", y);
if (k + g < 5) printf("right\n");
}
void go(int k) {
int a = 0;
while (a < k) {
printf("go-%d\n", a);
a = a + 1;
}
}
void print(int k) {
for (int i = 0; i < 10; i = i+1) {
printf("hello-%d\n",i);
}
}
void main() {
printf("hello world\n");
hello(1,2);
print(9);
}
反射调用:
void print(int k) {
printf("hello-%d\n",k);
}
void main() {
FunctionCall("print", 5);
}
自定义宏的使用:
void print(int k) {
@for_n (i, k) {
printf("hello-%d\n", i);
}
}
defmacro for_n (p, size, code) {
for (int p = 1; p <= size; p = p+1)
code;
}
void main() {
FunctionCall("print", 5);
}
Elite分为如下几个模块:
- Lex 自动机模式的词法分析器,支持Unicode
- LR_Scanner 语法分析器,易于配置使用并自带缓存功能的分析器,使用LALR(1)算法,表达能力强
- RedApple 多遍宏处理功能的后端代码生成器,使用LLVM作为机器码生成平台,并且能够生成元数据
- RedApple/Runtime 代码运行时库,支持反射调用
- Elite/Builder Elite的项目构建工具
- Elite/MetaScriptRunner Elite的元脚本处理工具,使用Lua作为脚本引擎
- EliteShow Elite语言的中间过程展示工具,使用Electron作为GUI框架,方便查看编译过程
目前,项目还处于开发初期,非常欢迎热爱开源的朋友们参加此项目,这是一个中等规模的C++项目,加入我们的团队,不但能够促进该项目更快的发展,更能带给您不一样的思路和体验。
希望和我们交流非常容易,可以选择发邮件或在github上直接和我们联系,都可以。
- github:https://github.com/elite-lang/Elite
- 邮箱:mailto:sunxfancy@gmail.com
- gitter:参与讨论
熊同学赞助的机械键盘,帮助我更快的打字 O(∩_∩)O哈哈~
MIT协议,允许任何人基于该项目开发其他项目,无论是开源的还是商业的,仅仅需要您在使用时,附带我们的版权声明即可。