1 | # Show off "first class variants" / case classes.
|
2 | #
|
3 | # Takeaways:
|
4 | # - metalanguage affects the language
|
5 | # - metalanguage design / code compression
|
6 |
|
7 | # Based on frontend/syntax.asdl
|
8 |
|
9 | module demo {
|
10 |
|
11 | # Product type
|
12 | Token = (int id, int length, int col, str line)
|
13 |
|
14 | word_part =
|
15 | Literal %Token
|
16 | | TildeSub(str? user_name)
|
17 |
|
18 | value =
|
19 | Int(int i)
|
20 | | Str(str s)
|
21 |
|
22 | expr =
|
23 | Var %Token # a variable name to evaluate
|
24 | | Const(Token c, value val)
|
25 |
|
26 | # Source location for errors
|
27 | loc =
|
28 | Missing
|
29 | | Token %Token
|
30 | # Another example from Oils
|
31 | #| ArgWord %CompoundWord
|
32 | }
|