6 个版本
0.2.3 | 2024 年 8 月 4 日 |
---|---|
0.2.2 | 2024 年 7 月 12 日 |
0.1.1 | 2024 年 7 月 9 日 |
263 在 编程语言 中
每月 227 次下载
87KB
2K SLoC
Spyglys
Spyglys 是一种简单的字符串处理解释型编程语言,最初是为 Sakinyje 设计的。总的来说,Spyglys 旨在嵌入到更大的程序中。
基本教程
一般信息
Spyglys 包含一个交互式外壳,可以通过 spyglys shell
命令访问。此命令接受一个额外的文件参数,可以用于将文件的全部内容导入作用域。
字符串用双引号 ("") 包围 正则表达式模式用单引号 ('') 包围
在 Spyglys 中,函数用于处理所有字符串操作。为了保持简单,函数始终只有一个参数,并且只有一个表达式来修改该参数。参数始终是正则表达式的类型,尽管这可以在定义内部用表达式构建。处理修改的表达式始终是字符串类型。函数使用 def
关键字定义,它们匹配的正则表达式模式放在括号之间。
def trim ('^\s*(?<main>\S(.*\S)?)\s*$'):
main
end
函数的调用方式符合预期。
> trim(" hi ")
=> "hi"
变量可以用于在多个函数之间共享定义。
let whitespace = '\s*';
let main = '(?<main>\S(.*\S)?)';
def trim ('^' + whitespace + main + whitespace + '$'):
main
end
def trim_left ('^' + whitespace + main):
main
end
def trim_right (main + whitespace + '$'):
main
end
它们也可以是函数内部的字符串
let response = " sounds delicious";
def food_response ('I want some (?<food>.*)'):
food + response
end
当函数不匹配模式时,它们将返回 EMPTY
,这表示为 ()。这通常相当于空字符串。
> let response = food_response("I want to eat pasta");
> response
=> ()
> response + " right now."
=> " right now."
可以使用内置函数(使用 $function() 语法)处理空函数响应,这些函数可以接受多个参数。例如,前面的函数可以修改以包含默认食物。
let response = " sounds delicious";
def food_response ('I want some (food|(?<food>.+))'):
$replace_empty(food, "cake") + response
end
> food_response("I want some pizza")
=> "pizza sounds delicious"
> food_response("I want some food")
=> "cake sounds delicious"
函数也可以是递归的。此函数将天真地递归地将 xml/html 转换为其等效的 s 表达式。
def parse_html ('<(?<tag>\w+)>(?<inner>(?<inner_html><.+)|.+)?</(?<secondtag>\w+)>'):
"(" + tag + $replace_some(inner, " ") + $replace_some(inner, $if_else(inner_html, parse_html(inner), inner)) + ")"
end
待办事项
- 文档
- 更多测试
- 新的语言功能
依赖关系
~4–14MB
~174K SLoC