6 个版本 (稳定版)
1.1.1 | 2023 年 2 月 17 日 |
---|---|
1.1.0 | 2023 年 1 月 11 日 |
1.0.2 | 2022 年 8 月 9 日 |
1.0.0 | 2022 年 8 月 5 日 |
0.9.9 | 2022 年 8 月 5 日 |
在 编程语言 中排名 162
每月下载量 128
在 2 个 crate 中使用(通过 git_function_history)
180KB
3.5K SLoC
UMPL
关于
UMPL 是一种高度冗长的、类似 C 和 Lisp 的语言。
我们努力打破向后兼容性,所以如果你尝试为不同版本的该语言编写相同的代码,这将是一项有趣的挑战,如果这个项目能够持久下去的话。
在 UMPL 中,为了解决 null 问题,我们发明了一种新的类型称为 hempty,它与 null 相同,但听起来更好,并且它增加了所有编程语言中 null 类型的长列表。
所有错误报告都直接发送到 /dev/hempty
安装/构建
构建
- 安装 rust 和 cargo
- 克隆仓库
- 运行
cargo build --release
安装
- cargo
- 安装 rust 和 cargo
- 运行
cargo install umpl
- 版本
- 从 这里 下载您平台上的最新版本
命名约定
UMPL 中的变量必须遵循 kebab-case 命名约定,并且不允许有大写字母。
所有内部关键字的大小写取决于编译器选项。
示例
要查看 UMPL 的示例代码,您可以查看 此目录,并查看正式语言语法请参阅 此文件。
IDE 支持
存在一个半工作的 VSCode 扩展程序,您可以在 这里 找到。
编译器选项
选项
-r, i
:启动REPL-h
:打印帮助信息-t=<number>
:设置关键字切换大小写-f
:开启强制模式,在通过REPL编写程序时很有用-e
:开启evil模式
以及代码中隐藏的其他黑暗秘密。
语言文档
目录
类型
数字
数字是一个十六进制浮点数,显示给用户时将以十进制形式显示。有效示例:0xa
,0x14343.a1
,10
,10.1
字符串
字符串是一系列字符。字符串以`
开始和结束。
字符串转义序列
转义序列 | 描述 |
---|---|
\n |
换行符 |
\t |
制表符 |
\r |
回车符 |
\b |
退格键 |
\f |
换页符 |
\a |
警报 |
\v |
垂直制表符 |
\e |
转义 |
\\ |
反斜杠 |
\` |
单引号 |
\x{十六进制} |
ASCII表示中的十六进制值 |
\u{十六进制} |
Unicode字符 |
布尔值
布尔值要么是true,要么是false。
hempty
Hempty与null相同,但听起来更好。
文件
文件是文件的路径。
声明
名称 | 描述 | 用法 | 特殊关键字 | 特殊变量 | 示例 |
---|---|---|---|---|---|
创建 | 创建一个变量 | 使用文字或表达式创建var-name | N/A | N/A | 创建数字-带有var5 创建str-带有var((输入`>> `))> 使用var创建str-var |
list | 创建一个列表 | 使用var-name创建列表[literal or expression literal or expression] | N/A | N/A | 列表数字-带有list[1 3] liststr-带有list[8, ((输入`>> `))] |
potato | 声明一个函数 | 使用potato emoji-name num-of-arguments ⧼code⧽ | 返回 literal-or-expression | 对于每个参数,你都会得到$argument-number ,即第一个参数为$1 等。 |
potato 😀2⧼返回 ((加法$1 $2))>⧽ |
控制流
名称 | 描述 | 用法 | 特殊关键字 | 示例 |
---|---|---|---|---|
if语句 | 如果布尔值为true,则执行if代码,否则执行else代码 | if {boolean: literal or expression} ⧼if code⧽ else ⧼else code⧽ | N/A | if {true}⧼(`true`)>⧽else⧼(`false`)>⧽ if {not((true))>}⧼(`true`)>⧽else⧼(`false`)>⧽ if {布尔值-var}⧼if {true}⧼(`true`)>⧽else⧼(`false`)>⧽ ⧽else⧼(`false`)>⧽ |
循环语句 | 循环直到代码遇到break或continue | loop ⧼code⧽ | break, continue | loop⧼if {true}⧼(`true`)> break⧽else⧼(`false`)> continue⧽⧽ |
关键字
要调用关键字,首先需要创建一个表达式,所以()>或()>>或()<,在表达式中放入另一对括号,然后是关键字及其参数
名称 | 描述 | 参数 | 返回值 | 示例 |
---|---|---|---|---|
加法 | 如果第一个参数是数字,则返回所有参数的和,如果它是字符串,则将所有后续参数连接到该字符串,其他任何东西都不会工作 | any*1: 参数 | any | ((加法5 6 7))> ((加`s`true 7))> |
减法 | 将第一个参数设置为原始值,然后从它中减去每个后续的参数,除非有一个参数,在这种情况下,它会被取反,返回它的负值。 | number*1: 参数 | 数字 | ((减法5 6 7))> ((减法1))> |
乘法 | 如果第一个参数是字符串,则将其与下一个参数相乘;如果是数字,则将第一个参数设置为原始值,然后每个后续参数都乘以它,任何其他类型的数据都不起作用。 | any*1: 参数 | any | ((乘法5 6 7))> ((乘法 `s`7))> |
除法 | 将第一个参数设置为原始值,然后每个后续参数都除以前一个除数。 | number*1: 参数 | 数字 | ((除法5 6 7 3))> ((除法1))> |
not | 如果值是假的,则返回true,否则返回false。 | [布尔值:值] | 布尔值 | ((nottrue))> ((非布尔值-var))> |
或 | 比较value1和value2,如果任一为true,则返回true。 | [布尔值:value1, 布尔值:value2] | 布尔值 | ((或true false))> ((或布尔值-var布尔值-var-1))> |
与 | 比较value1和value2,如果两个都为true,则返回true。 | [布尔值:value1, 布尔值:value2] | 布尔值 | ((与true false))> ((与布尔值-var布尔值-var-1))> |
eq | 比较两个值是否相等 | [任何类型:value1, 任何类型:value2] | 布尔值 | ((eqtrue false))> ((eq `t` string-var))> ((eq 5 6))> |
ne | 比较两个值如果不相等 | [任何类型:value1, 任何类型:value2] | 布尔值 | ((netrue false))> ((ne `t` string-var))> |
gt | 检查number1是否大于number2 | [数字:number1, 数字:number2] | 布尔值 | ((gt5 6))> |
lt | 检查number1是否小于number2 | [数字:number1, 数字:number2] | 布尔值 | ((lt5 6))> |
le | 检查number1是否小于或等于number2 | [数字:number1, 数字:number2] | 布尔值 | ((le5 6))> |
ge | 检查number1是否大于或等于number2 | [数字:number1, 数字:number2] | 布尔值 | ((ge5 6))> |
addwith | 在原地对变量添加值,如果变量是字符串,则任何内容都可以添加到它上面,但如果它是数字,则只能添加数字,不能添加其他内容。 | [变量:变量, 任何类型:值] | any | ((addwith num-var5))> ((addwithstr-var `s`))> ((addwithstr-var5))> |
subtractwith | 从原地对变量减去值 | [变量:变量, 数字:值] | 数字 | ((subtractwith num-var5))> |
dividewith | 在原地对变量除以值 | [变量:变量, 数字:值] | 数字 | ((dividewith num-var5))> |
multiplywith | 在原地对变量乘以值,如果变量是字符串,则变量变为字符串值乘以的结果,如果变量是数字,我们则将变量乘以该值,任何其他类型的变量都不起作用。 | [变量:变量, 数字:值] | any | ((multiplywith num-var5))> ((multiplywithstr-var5))> |
input | 带消息的input | [字符串:消息] | 字符串 | ((input"输入你的名字"))> ((input string-var))> |
setwith | 将变量设置为值 | [变量:变量, 任何类型:值*] | any | ((setwith num-var5))> ((setwithstr-var `s`))> |
exit | 退出并提供数字 | [数字:数字] | hempty | ((exit5))> |
error | 提供错误消息的错误 | [字符串:消息] | hempty | ((error"error"))> ((error string-var))> |
strtonum | 将字符串转换为数字 | [字符串:字符串] | 数字 | ((strtonum `5`))> ((strtonum `0x5`))> |
strtobool | 将字符串转换为布尔值 | [字符串:字符串] | 布尔值 | ((strtobool `true`))> ((strtobool `false`))> |
strtohempty | 将字符串转换为hempty | [字符串:字符串] | hempty | ((strtohempty `empty`))> |
runcommand | 运行操作系统命令 | [字符串:命令] | 字符串 | ((runcommand"ls"))> |
open | 打开文件 | [字符串:文件] | 文件 | ((open"file.txt"))> |
close | 关闭文件 | [文件:文件] | hempty | ((close file-var))> |
write | 以模式将消息写入文件 | [文件:文件, 字符串:消息, 字符串:模式] | hempty | ((write file-var"message" "w"))> ((write file-var"message" "a"))> |
writeline | 以模式和行号将消息写入文件 | [文件:文件, 字符串:消息, 数字:行, 字符串:模式] | hempty | ((writeline file-var"message" 1 "w"))> ((writeline file-var"message" 1 "a"))> |
read | 从文件中读取 | [文件:文件] | 字符串 | ((read file-var))> |
readline | 读取文件中指定的行 | [文件: 文件名, 行号: 行号] | 字符串 | ((readline 文件-var1))> |
删除 | 删除变量 | [变量: 变量名] | hempty | ((delete num-var))> ((删除str-var))> |
deletefile | 删除文件 | [文件:文件] | hempty | ((deletefile 文件-var))> |
createfile | 创建新文件 | [字符串:文件] | 文件 | ((createfile"file.txt"))> |
new | 运行自定义函数 | 函数: 名称, 参数 | 函数返回的任何内容 | ((new 😀3 5))> |
type | 返回值的类型 | [任何: 值] | 字符串 | ((type 1))> |
*
:有时可以将变量设置为两个值以制作列表中的列表
*1
:一个或多个参数
贡献
如果您对该语言有任何想法,请将其放入此文件中,并附带一个或两个示例,说明如何在语言中使用它。
依赖项
~2–8.5MB
~57K SLoC