# 一、简介
Hoshino是一个基于llvm-14的解释性语言,目前类型不完善。frontend词法分析与语法分析基于c++17使用递归下降分析构建AST;表达式分析使用运算符优先级分析法。
# 二、安装
本语言基于llvm-14(理论上版本大于14均可),因此需要安装llvm-14,单独安装llvm-14可以到[llvm的github官方](https://github.com/llvm/llvm-project)查看相关步骤,build_support的脚本会直接安装clang-14(clang-14的安装自带llvm-14):
```sh
# 进入build_support目录
cd ./build_support
# 更改执行权限
chmod +x ./install_support.sh
# 安装llvm依赖
./install_support.sh
```
llvm-14安装完成后即可构建该项目:
```sh
# 创建构建目录
mkdir build
cd ./build
# 构建项目
cmake ..
make -j4 # make使用CPU核数可自行设定
```
# 三、语法演示
## 3.1 函数定义
```txt
# 声明函数,以下声明为builtin库的C函数,jit会在运行时寻找外部链接调用此函数
extern printNum();
extern endl();
def printOneToTen(){
for i=1;i<11;i+=1 {
printNum(i);
endl();
}
}
# 打印1到10
printOneToTen();
```
## 3.2 自定义运算符
自定义运算符结构如下:
```txt
# operator为要定义的运算符
# 其中unary运算符只支持单字符,binary运算符支持单字符、双字符以及三字符
# precedence(可选)为运算符优先级,unary运算符不需要表明优先级,而binary运算符需要
# args为参数,各参数间用空格隔开
def [unary|binary]@[operator] [precedence] (args) {
......
}
```
下面演示一些基本运算符的定义
```txt
# 定义单目运算符!
def unary@!(v) {
if v {
0;
}
else {
1;
}
}
# 定义双目运算符||
def binary@|| 5 (LHS RHS){
if LHS {
1;
}
else if RHS{
1;
}
else{
0;
}
}
# 定义双目运算符>
def binary@> 10 (LHS RHS) {
RHS < LHS;
}
# 定义双目运算符==
def binary@== 9 (LHS RHS) {
!(LHS < RHS || LHS > RHS);
}
# 判断两个数是否相等
def isSame(x y) {
x == y;
}
{
var b = isSame(5, 5);
printNum(b);
}
```
## 3.3 if语句
```txt
# if语句的条件接受一个表达式,为0时条件为假,非0时条件为真
{
var a = 10;
if a==10 {
printNum(a);
} else if a < 5 {
printNum(1);
} else {
printNum(0);
}
}
```
## 3.4 for循环
```txt
extern putchard(char);
extern printNum(char);
extern tab();
extern endl();
# 打印九九乘法表
for i=1;i<10;i+=1{
for j=1;j<i;j+=1 {
tab();
}
# print i*j=?
# putchard接收ascii码打印字符
# putchard(42)打印'*'
# putchard(61)打印'='
for j=i;j<10;j+=1 {
printNum(i) , putchard(42) , printNum(j) , putchard(61) ,
printNum(i*j) ,
tab();
}
endl();
}
```
普通网友
- 粉丝: 1612
- 资源: 6776
最新资源
- 神经网络 使用手写字数据集 实现分割任务 CNN
- 基于maxwell的4极6槽 内转子 11000rpm 输出转矩 156mNm 效率85% 180W 外径 48mm 内径27 轴向长度30mm 直流母线36V 永磁同步电机(永磁直流无刷)模型
- FPGA开发:SDRAM驱动代码,使用串口向sdram写数据,数据环回后被SDRAM送回到串口进行输出,中间使用FIFO进行跨时钟域处理,所用开发板DE2-115,SDRAM型号IS42S16320D
- ZTE C600&C620&C650命令参考
- python-workspace.zip.006
- FX5U FX40SSC 程序 FX5U FX 40SSC运动控制模块程序块 自己整合的针对FX 40SSC模块的功能块,支持点动故障码 状态码 相对定位 绝对定位 直接1指定轴号就可以
- 汽车二、三自由度模型 汽车二、三自由度模型 本人用了三种不同方法搭的汽车线性二自由度simulink模型,文档里包含有具体的车辆数值 适合初学者学习simulink使用(ps.模型输入为前轮转角,输出
- KUKA机器人码垛程序备份
- dbstudio-3.8.5.102.win64 神通数据库连接工具
- 开源TVBox影视盒子 小苹果影视盒子V1.5.7 2025新版
- 基于国产M0核MCU平台,全开源双电阻采样FOC高压 风机量产程序,包含龙博格电机观测器,SVPWM,顺逆风启动,五段式与七段式调制等源码,完全可以移植到别的MCU平台 适合电机算法研究
- 交替迭代法 matlab 无功优化 通过含固态变压器的无功优化算法,形成交替迭代潮流计算,最终计算出符合预期的电压曲线,程序方法包括包括牛拉法 前推回代等,参考性强
- 综合能源耦合微网优化程序matlab 程序基于冷热电联供综合能源耦合模型,采用cchp,并且含有压缩空气储能,采用粒子群优化求解
- DataGrip 2021.3 数据库连接工具
- 考虑碳交易的微网优化模型matlab
- FreeRTOS 是一款开源的、可抢占式的实时操作系统.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈