npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

hym-script

v1.0.4

Published

hs 语言

Downloads

11

Readme

hs 语言

介绍

hs 使用 LL1 文法实现,特点是类似 python 的语法。

运行

拉取项目后执行 npm link,在需要运行的 .hs 后缀文件的目录下执行 hs xxx.hs 即可。

npm i hym-script -g 下载项目,直接运行 hs xxx.hs

注意:请使用 v14 以上的 node 版本。

特性

注释

注释由 #> comment... <# 进行包裹。

#>
  这是注释
<#
分号

hs 每一段语句都需要用 ; 结尾。

变量

目前支持数字、字符串、null、布尔值、数组

def num = 1.23;
def str = "hello hs";
def nul = null;
def bool1 = True;
def bool2 = False;
def array = {1, True, func f(): pass};

array{1}; #> True <#

#>
  字符串支持换行
<#
def str2 = "
  hello hs
";
数组

数组由 {} 声明,并内置一系列数组方法。

#> 声明 <#
def list = {1, True, False, func f(): pass};

print(list{1}); #> True <#

#> 多维数组 <#
def list = {{{1}}, 2};

print(list{0}{0}{0}) #> 1 <#

#> 改变数组值 <#
list{0} = 6;

#> 调用数组内置方法 <#
list{"append"}(1,2,3); #> 往数组末尾添加 1、2、3 <#
list{"pop"}(); #> 由数组末尾弹出一个元素 <#
list{"reverse"}(); #> 反转数组 <#
list{"copy"}(); #> 浅拷贝 list 数组 <#
len(list); #> 返回数组长度 <#
声明变量

关键字 defread,用于声明变量,其中 read 不可变。

def v1;
def v2 = 1;

#> 链式声明变量 <#
def v3 = 2, v4 = 3;

read v5 = 6;
v5 = 7; #> 报错,read 声明的变量不可变 <#
read v6; #> 报错,read 声明的变量必须赋初始值 <#
运算符

= 表示赋值,== 表示全等比较,not= 表示不等于比较。 比较运算符有 >、>=、<、<=。 算术运算符有 +、-、*、/、%。 逻辑运算符有 and、or、not,依次表示与或非。·

def a = 1 and 2 or not 3;
块级作用域

beginend 关键字表示块作用域。

begin
  def a = 1;
end;

print(a); #> 报错,作用域外不能访问作用域内的变量 <#

#> 作用域具有返回值 <#
def a =
begin
  return 666;
end;

print(a); #> 666 <#
方法声明与调用

func 关键字用于声明方法。

func fn():
begin return 666; end;

print(fn()); #> 666 <#

#> pass 关键字可代替空函数 <#
func fn2(): pass;

#> 还可以通过 def 关键字声明方法 <#
def fn3 = func fn4(): pass;
条件语句

if ... elif ... else 用于声明条件语句。

if(2 > 3): pass
elif(3 > 2): pass
else: pass;
循环语句

while ... elsefor ... else 用于声明循环语句。

#> 当循环体不被 return、break 强制退出时将会在结束循环时执行 else 块的语句 <#
while(1):
begin
  if(3 > 2): break;
end
else: pass;

for(def a = 0; a < 10; a = a + 1):
pass
else:
pass;

#> 循环体也可作为返回值 <#
def result = 
while(1): break 666;
深入 hs

条件语句和循环语句当只有一条语句时可进行简写,并作为值返回。

#> 但是 return 语句不能简写 <#
if(1): 1 + 1;
if(1): fn();
while(1): pass;
while(1): break;
while(1): continue;

当条件语句和循环语句作为赋值语句时 returnbreak 将失效。

func fn1():
begin
  while(1):
  begin
    if(1):
    begin
      if(1):
      begin
        return 6666;
      end;
    end;
  end;

  print("此处不再执行");
end;

print(fn1()); #> 6666 <#

func fn1():
begin
  def num =
  while(1):
  begin
    if(1):
    begin
      if(1):
      begin
        return 6666;
      end;
    end;
  end;

  print("此处还会执行,因为 while 作为赋值语句执行,return 无效");
  return num + 1111;
end;

print(fn2()); #> 7777 <#

系统方法

print(...args)

用于在控制台打印变量。

print(2, True); #> 2, True <#
print(print); #> <SystemFunction print> <#
print(func fn(): pass); #> <Function fn> <#
type(value)

返回给定值的类型。

type(func a(): pass); #> <class function> <#
len(array)

返回数组的长度。

len({1, 2, 3}); #> 3 <#
eval(string)

把字符串作为 hs 语法执行。

eval("def a = 1;");
timer(callback(stop, count), time)

定时器,接收一个回调函数和数字,time 表示每隔多少毫秒执行一次回调函数。

#> stop 为停止定时器的方法,count 表示定时器已执行的次数 <#
func callback(stop, count):
begin
  if(count == 5): stop();
end;

timer(callback, 100);