#ast #syntax-tree #ast-node #valkyrie #ast-parser #node-tree #language

no-std valkyrie-ast

Strong typed abstract syntax tree of valkyrie language

27 releases

0.1.12 Mar 4, 2024
0.1.11 Nov 13, 2023
0.1.9 Sep 21, 2023
0.1.7 Jun 16, 2023
0.0.8 May 29, 2023

#275 in Data structures

Download history 6/week @ 2024-02-23 149/week @ 2024-03-01 29/week @ 2024-03-08 37/week @ 2024-03-15 23/week @ 2024-03-29 2/week @ 2024-04-05 37/week @ 2024-04-12 284/week @ 2024-04-19 2/week @ 2024-04-26

329 downloads per month
Used in 3 crates

MPL-2.0 license

205KB
5K SLoC

The AST Nodes of Valkyrie Language

教你一个编程语言, 高亮的时候使用 scala 的高亮

这个语言是这样定义类的

# 定义一个类 A
class A { }
# 定义一个类 B 继承 A
class B(A) { }

你觉得多继承应该怎么写?


这个语言中这样定义代数效应

class Logging {
    level: Integer
    message: String
    effect debug(s: String): Self / Pure {
        new Self { level: 0, message: s }
    }
    effect print(s: String): Self / Pure {
        new Self { level: 1, message: s }
    }
    effect error(s: String): Self / Pure {
        new Self { level: 2, message: s }
    }
    effect fatal(s: String): Self / Pure {
        new Self { level: 3, message: s }
    }
}

使用 raise 激发代数效应, 使用 try catch 语句处理代数效应.

try {
    raise Logging::debug("hello")
}
.catch {
    case Logging(level, message):
        std::io::std_err().lock().write(message)
}

这段代码应该怎么编译

if a {
    yield 1 
    print 2
}
yield 2



let yield1 = {
    print(2)
    if_break()
}
let if_break = {
    yield2()
}
let yield2 = {
    ret()
}



类型签名部分分为 Type / Effect 两部分, 两者都可以省略, Type 的默认值为 Unit, Effect 的默认值为 Pure.

Dependencies

~4–5MB
~120K SLoC