# cd-lang **Repository Path**: cbh37/cd-lang ## Basic Information - **Project Name**: cd-lang - **Description**: cd类似Python是解释性语言,基于cd虚拟机工作,因为在昌都所作因此取昌都的拼音首字母作为语言名。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-08-20 - **Last Updated**: 2024-08-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Cd Language `cd`类似`Python`是解释性语言,基于`cd`虚拟机工作。 `cd`语言的编译流程:cd(前端,生成`cd`汇编)-> cas(汇编器,将`cd`汇编汇编成二进制格式) -> cvm(`cd`虚拟机) ## 语法 ### 循环 循环主要为`for`和`while`循环,并通过`break`和`continue`来控制循环: ``` for(var_name = start_expr, end_expr, step_expr) { } while(condition) { } ``` ### 判断 判断只有`if`: ``` if(condition) { } else { } ``` ### 函数 使用`fn`定义函数: ``` fn fn_name(args) { return expr; } fn_name(args); ``` `cd`语言中内置函数用于输入输出和退出: ``` print(expr) i = input() exit() ``` ### Table `Table`是`cd`语言中特殊的数据结构,既可以当列表用,也可以当字典用: ``` table = { 0, 1, 2, key = value }; ``` ### 注释 `cd`语言中使用`#`作为注释的开头: ``` # comment ``` ### ASM块 可以直接使用`ASM`块插入`cd`汇编: ``` asm { load @2 } ``` ## cd 汇编 以下是`cd`汇编中值的所有类型: ``` num @1.2 数字 str "str" 字符串 direct load 指令 var $i 变量 addr %i 地址 option [new] 选项 label !label 标签 comment { ... } 注释 ``` 以下是`cd`汇编的所有指令及其用途: ``` load num/str/var 加载内容到栈上 store var 将栈顶的内容储存到变量中 calc [option] 在栈上获取两个值作为操作数,并通过提供的选项进行计算后将结果压入栈 jmp addr 无条件跳转 call addr 在栈上获取一个Table作为参数集,并呼叫函数 ret 返回到调用函数前的位置 table [new/assign/get] new用于新建一个table压入栈,assign用于给table新增元素或改变元素值,get用于得到table中指定key的值 fn [print/input/exit] 在栈上获取参数并进行输入输出或退出操作 ``` ## 示例 使用`cd`语言输出九九乘法表: ``` for(i = 1, 9, +1) { for(j = 1, i, +1) { print(j); print("*"); print(i); print("="); print(i * j); print("\t"); } print("\n"); } ``` ## 编译项目 编译条件:Windows WSL Ubuntu 所需软件:make g++ 如果是调试代码,直接`make`即可,可以通过`make run`来调试代码,生成的其余文件可以通过`make clear`删除,`test`为默认测试文件 如果需要得到发行版,则执行`make release` 编译条件:Windows11 所需软件:mingw 安装`Mingw64`并配置好对应的系统环境变量,运行`g++ *.cpp -o cd.exe`生成发行版,若需调试代码还是使用`Linux`系统,同样也可以直接在托管网站获取`Windows`系统的发行版