1
0

Compare commits

..

No commits in common. "02cded4af4d113b32f1f62f14a288dabe0e8c58e" and "0c37e5e3a6a5fd00f1300f13047cbc83c4b5ab58" have entirely different histories.

21 changed files with 8899 additions and 14796 deletions

View File

@ -7,14 +7,16 @@ async { (output 'Whaddup') }
--- ---
(root (root
(statement (item
(async (statement
(statement (async
(expression (item
(tool (statement
(expression (expression
(value (tool
(string))))))))) (expression
(value
(string)))))))))))
================== ==================
Complex Async Statements Complex Async Statements
@ -33,35 +35,40 @@ async {
--- ---
(root (root
(statement (item
(async (statement
(statement (async
(if_else (item
(if (statement
(expression (if_else
(logic (if
(expression (expression
(math (logic
(expression (expression
(value (math
(integer))) (expression
(math_operator) (value
(integer)))
(math_operator)
(expression
(value
(integer)))))
(logic_operator)
(expression (expression
(value (value
(integer))))) (integer)))))
(logic_operator) (item
(expression (statement
(value (expression
(integer))))) (value
(statement (boolean))))))
(expression (else
(value (item
(boolean))))) (statement
(else (expression
(statement (value
(expression (boolean))))))))
(value (statement
(boolean)))))) (expression
(expression (value
(value (string)))))))))
(string)))))))

View File

@ -0,0 +1,240 @@
==================
If
==================
if true { "True" }
---
(root
(item
(statement
(if_else
(if
(expression
(value
(boolean)))
(item
(statement
(expression
(value
(string))))))))))
==================
Complex If
==================
if (1 == 1) && (2 == 2) && (3 == 3) { "True" }
---
(root
(item
(statement
(if_else
(if
(expression
(logic
(expression
(logic
(expression
(value
(integer)))
(logic_operator)
(expression
(value
(integer)))))
(logic_operator)
(expression
(logic
(expression
(logic
(expression
(value
(integer)))
(logic_operator)
(expression
(value
(integer)))))
(logic_operator)
(expression
(logic
(expression
(value
(integer)))
(logic_operator)
(expression
(value
(integer)))))))))
(item
(statement
(expression
(value
(string))))))))))
==================
If Assignment
==================
x = if true { 1 }
---
(root
(item
(statement
(assignment
(identifier)
(assignment_operator)
(statement
(if_else
(if
(expression
(value
(boolean)))
(item
(statement
(expression
(value
(integer))))))))))))
==================
If Else
==================
if false { "True" } else { "False" }
---
(root
(item
(statement
(if_else
(if
(expression
(value
(boolean)))
(item
(statement
(expression
(value
(string))))))
(else
(item
(statement
(expression
(value
(string))))))))))
==================
If Else If
==================
if 1 == 1 {
"math is fun"
} else if 4 == 9 {
"math is broken"
}
---
(root
(item
(statement
(if_else
(if
(expression
(logic
(expression
(value
(integer)))
(logic_operator)
(expression
(value
(integer)))))
(item
(statement
(expression
(value
(string))))))
(else_if
(expression
(logic
(expression
(value
(integer)))
(logic_operator)
(expression
(value
(integer)))))
(item
(statement
(expression
(value
(string))))))))))
==================
If Else Else If Else
==================
if false {
"no"
} else if false {
"no"
} else if 1 + 1 == 9 {
"not the answer"
} else {
"42"
}
---
(root
(item
(statement
(if_else
(if
(expression
(value
(boolean)))
(item
(statement
(expression
(value
(string))))))
(else_if
(expression
(value
(boolean)))
(item
(statement
(expression
(value
(string))))))
(else_if
(expression
(logic
(expression
(math
(expression
(value
(integer)))
(math_operator)
(expression
(value
(integer)))))
(logic_operator)
(expression
(value
(integer)))))
(item
(statement
(expression
(value
(string))))))
(else
(item
(statement
(expression
(value
(string))))))))))

View File

@ -1,5 +1,5 @@
================== ==================
Simple Filter Loop Filter Loop
================== ==================
filter i in [1, 2, 3] { filter i in [1, 2, 3] {
@ -9,54 +9,23 @@ filter i in [1, 2, 3] {
--- ---
(root (root
(statement (item
(filter (statement
(identifier) (filter
(expression (identifier)
(value
(list
(expression
(value
(integer)))
(expression
(value
(integer)))
(expression
(value
(integer))))))
(statement
(expression (expression
(logic (value
(expression (list
(identifier)) (expression
(logic_operator) (value
(expression (integer)))
(value (expression
(integer))))))))) (value
(integer)))
================== (expression
Nested Filter Loop (value
================== (integer))))))
(item
filter i in big_list {
filter j in i {
i != 42
}
}
---
(root
(statement
(filter
(identifier)
(expression
(identifier))
(statement
(filter
(identifier)
(expression
(identifier))
(statement (statement
(expression (expression
(logic (logic
@ -66,3 +35,45 @@ filter i in big_list {
(expression (expression
(value (value
(integer))))))))))) (integer)))))))))))
==================
Filter Loop Assignment
==================
list = filter i in ["one", "two", "three"] {
i == "one"
}
---
(root
(item
(statement
(assignment
(identifier)
(assignment_operator)
(statement
(filter
(identifier)
(expression
(value
(list
(expression
(value
(string)))
(expression
(value
(string)))
(expression
(value
(string))))))
(item
(statement
(expression
(logic
(expression
(identifier))
(logic_operator)
(expression
(value
(string)))))))))))))

View File

@ -1,83 +1,73 @@
================== ==================
Simple Find Loop Find Loop
================== ==================
find i in [1, 2, 3] { find i in [1, 2, 3] {
i <= 3 i <= 3
} }
--- ---
(root (root
(statement (item
(find (statement
(identifier) (find
(expression (identifier)
(value
(list
(expression
(value
(integer)))
(expression
(value
(integer)))
(expression
(value
(integer))))))
(statement
(expression (expression
(logic (value
(list
(expression
(value
(integer)))
(expression
(value
(integer)))
(expression
(value
(integer))))))
(item
(statement
(expression (expression
(identifier)) (logic
(logic_operator) (expression
(expression (identifier))
(value (logic_operator)
(integer))))))))) (expression
(value
(integer)))))))))))
================== ==================
Nested Find Loop Find Loop Assignment
================== ==================
find i in ["one", "two", "three"] { found = find i in ["one", "two", "three"] {
found = find j in i { i == "three"
i == "e"
}
if (type found) != 'empty' {
true
} else {
false
}
} }
--- ---
(root (root
(statement (item
(find (statement
(identifier) (assignment
(expression (identifier)
(value (assignment_operator)
(list (statement
(find
(identifier)
(expression (expression
(value (value
(string))) (list
(expression (expression
(value (value
(string))) (string)))
(expression (expression
(value (value
(string)))))) (string)))
(statement (expression
(assignment (value
(identifier) (string))))))
(assignment_operator) (item
(statement
(find
(identifier)
(expression
(identifier))
(statement (statement
(expression (expression
(logic (logic
@ -86,25 +76,4 @@ find i in ["one", "two", "three"] {
(logic_operator) (logic_operator)
(expression (expression
(value (value
(string))))))))) (string)))))))))))))
(if_else
(if
(expression
(logic
(expression
(tool
(expression
(identifier))))
(logic_operator)
(expression
(value
(string)))))
(statement
(expression
(value
(boolean)))))
(else
(statement
(expression
(value
(boolean))))))))))

View File

@ -9,26 +9,28 @@ for i in [1, 2, 3] {
--- ---
(root (root
(statement (item
(for (statement
(identifier) (for
(expression (identifier)
(value
(list
(expression
(value
(integer)))
(expression
(value
(integer)))
(expression
(value
(integer))))))
(statement
(expression (expression
(tool (value
(list
(expression
(value
(integer)))
(expression
(value
(integer)))
(expression
(value
(integer))))))
(item
(statement
(expression (expression
(identifier)))))))) (tool
(expression
(identifier))))))))))
================== ==================
Nested For Loop Nested For Loop
@ -43,18 +45,21 @@ for list in list_of_lists {
--- ---
(root (root
(statement (item
(for (statement
(identifier) (for
(expression (identifier)
(identifier)) (expression
(statement (identifier))
(for (item
(identifier)
(expression
(identifier))
(statement (statement
(expression (for
(tool (identifier)
(expression (expression
(identifier)))))))))) (identifier))
(item
(statement
(expression
(tool
(expression
(identifier)))))))))))))

View File

@ -7,14 +7,16 @@ function { "Hiya" }
--- ---
(root (root
(statement (item
(expression (statement
(value (expression
(function (value
(statement (function
(expression (item
(value (statement
(string))))))))) (expression
(value
(string)))))))))))
================== ==================
Function Call Function Call
@ -25,13 +27,14 @@ Function Call
--- ---
(root (root
(statement (item
(expression (statement
(function_call (expression
(identifier) (function_call
(expression (identifier)
(value (expression
(string))))))) (value
(string))))))))
================== ==================
Complex Function Complex Function
@ -45,21 +48,24 @@ function <message number> {
--- ---
(root (root
(statement (item
(expression (statement
(value (expression
(function (value
(identifier) (function
(identifier) (identifier)
(statement (identifier)
(expression (item
(tool (statement
(expression (expression
(identifier)))) (tool
(expression (expression
(tool (identifier)))))
(statement
(expression (expression
(identifier)))))))))) (tool
(expression
(identifier))))))))))))
================== ==================
Complex Function Call Complex Function Call
@ -77,24 +83,25 @@ Complex Function Call
--- ---
(root (root
(statement (item
(expression (statement
(function_call (expression
(identifier) (function_call
(expression (identifier)
(value (expression
(string))) (value
(expression (string)))
(value (expression
(integer))) (value
(expression (integer)))
(value (expression
(map (value
(identifier) (map
(expression (identifier)
(value (expression
(integer))) (value
(identifier) (integer)))
(expression (identifier)
(value (expression
(integer)))))))))) (value
(integer)))))))))))

View File

@ -9,12 +9,15 @@ __xyz__
--- ---
(root (root
(statement (item
(expression (statement
(identifier))) (expression
(statement (identifier))))
(expression (item
(identifier))) (statement
(statement (expression
(expression (identifier))))
(identifier)))) (item
(statement
(expression
(identifier)))))

View File

@ -1,242 +0,0 @@
==================
Simple If
==================
if true { "True" }
---
(root
(statement
(if_else
(if
(expression
(value
(boolean)))
(statement
(expression
(value
(string))))))))
==================
Complex If
==================
if 1 == 1 && 2 == 2 && 3 == 3 { "True" }
---
(root
(statement
(if_else
(if
(expression
(logic
(expression
(value
(integer)))
(logic_operator)
(expression
(logic
(expression
(value
(integer)))
(logic_operator)
(expression
(logic
(expression
(value
(integer)))
(logic_operator)
(expression
(logic
(expression
(value
(integer)))
(logic_operator)
(expression
(logic
(expression
(value
(integer)))
(logic_operator)
(expression
(value
(integer)))))))))))))
(statement
(expression
(value
(string))))))))
==================
Nested If
==================
if true {
if 42 == 12 {
'hiya'
} else {
'bye'
}
}
---
(root
(statement
(if_else
(if
(expression
(value
(boolean)))
(statement
(if_else
(if
(expression
(logic
(expression
(value
(integer)))
(logic_operator)
(expression
(value
(integer)))))
(statement
(expression
(value
(string)))))
(else
(statement
(expression
(value
(string)))))))))))
==================
If Else
==================
if false { "True" } else { "False" }
---
(root
(statement
(if_else
(if
(expression
(value
(boolean)))
(statement
(expression
(value
(string)))))
(else
(statement
(expression
(value
(string))))))))
==================
If Else If
==================
if 1 == 1 {
"math is fun"
} else if 4 == 9 {
"math is broken"
}
---
(root
(statement
(if_else
(if
(expression
(logic
(expression
(value
(integer)))
(logic_operator)
(expression
(value
(integer)))))
(statement
(expression
(value
(string)))))
(else_if
(expression
(logic
(expression
(value
(integer)))
(logic_operator)
(expression
(value
(integer)))))
(statement
(expression
(value
(string))))))))
==================
If Else Else If Else
==================
if false {
"no"
} else if false {
"no"
} else if 1 + 1 == 9 {
"not the answer"
} else {
"42"
}
---
(root
(statement
(if_else
(if
(expression
(value
(boolean)))
(statement
(expression
(value
(string)))))
(else_if
(expression
(value
(boolean)))
(statement
(expression
(value
(string)))))
(else_if
(expression
(logic
(expression
(math
(expression
(value
(integer)))
(math_operator)
(expression
(value
(integer)))))
(logic_operator)
(expression
(value
(integer)))))
(statement
(expression
(value
(string)))))
(else
(statement
(expression
(value
(string))))))))

View File

@ -1,5 +1,5 @@
================== ==================
Simple Indexes Indexing
================== ==================
dust_data:1:name dust_data:1:name
@ -11,82 +11,70 @@ foobar:1:42
--- ---
(root (root
(statement (item
(expression (statement
(index (expression
(expression (index
(index (expression
(expression (index
(identifier)) (expression
(expression (identifier))
(value (expression
(integer))))) (value
(expression (integer)))))
(identifier))))) (expression
(statement (identifier))))))
(expression (item
(index (statement
(expression (expression
(identifier)) (index
(expression (expression
(identifier))))) (identifier))
(statement (expression
(expression (identifier))))))
(index (item
(expression (statement
(index (expression
(expression (index
(identifier)) (expression
(expression (index
(value (expression
(integer))))) (identifier))
(expression (expression
(value (value
(integer))))))) (integer)))))
(expression
(value
(integer))))))))
================== ==================
Nested Indexes Sublist
================== ==================
[['answers' 'foobar'], 42, 666]:0:1:0..2 ['answers', 42, 666]:1..2
--- ---
(root (root
(statement (item
(expression (statement
(index (expression
(expression (index
(index (expression
(expression (value
(index (list
(expression (expression
(value (value
(list (string)))
(expression
(value
(list
(expression
(value
(string)))
(expression
(value
(string))))))
(expression
(value
(integer)))
(expression
(value
(integer))))))
(expression (expression
(value (value
(integer))))) (integer)))
(expression (expression
(value (value
(integer))))) (integer))))))
(expression (expression
(value (value
(integer))) (integer)))
(expression (expression
(value (value
(integer))))))) (integer))))))))

View File

@ -7,16 +7,49 @@ List Declaration
--- ---
(root (root
(statement (item
(expression (statement
(value (expression
(list (value
(list
(expression
(value
(string)))
(expression
(value
(integer)))))))))
==================
List Assignment
==================
empty = []
foobar = ['foobar']
---
(root
(item
(statement
(assignment
(identifier)
(assignment_operator)
(statement
(expression (expression
(value (value
(string))) (list)))))))
(item
(statement
(assignment
(identifier)
(assignment_operator)
(statement
(expression (expression
(value (value
(integer)))))))) (list
(expression
(value
(string)))))))))))
================== ==================
List Nesting List Nesting
@ -27,22 +60,23 @@ List Nesting
--- ---
(root (root
(statement (item
(expression (statement
(value (expression
(list (value
(expression (list
(value (expression
(string))) (value
(expression (string)))
(value (expression
(list (value
(expression (list
(value (expression
(integer))) (value
(expression (integer)))
(value (expression
(list (value
(expression (list
(value (expression
(integer)))))))))))))) (value
(integer)))))))))))))))

View File

@ -2,62 +2,44 @@
Simple Map Simple Map
================== ==================
{ answer = 42 } {
answer = 42
---
(root
(statement
(expression
(value
(map
(identifier)
(expression
(value
(integer))))))))
==================
Nested Maps
==================
x = {
y = {
foo = 'bar'
z = {
message = 'hiya'
}
}
f = 12
} }
--- ---
(root (root
(statement (item
(assignment (statement
(identifier) (expression
(assignment_operator) (value
(statement (map
(expression (identifier)
(value (expression
(map (value
(identifier) (integer)))))))))
(expression
(value ==================
(map Map Assignment
(identifier) ==================
(expression
(value x = {
(string))) answer = 42
(identifier) }
(expression
(value ---
(map
(identifier) (root
(expression (item
(value (statement
(string))))))))) (assignment
(identifier) (identifier)
(expression (assignment_operator)
(value (statement
(integer)))))))))) (expression
(value
(map
(identifier)
(expression
(value
(integer)))))))))))

View File

@ -7,89 +7,139 @@ Equality
--- ---
(root (root
(statement (item
(expression (statement
(logic (expression
(expression (logic
(value (expression
(integer))) (value
(logic_operator) (integer)))
(expression (logic_operator)
(math (expression
(expression (math
(math (expression
(expression (math
(value (expression
(integer))) (value
(math_operator) (integer)))
(expression (math_operator)
(value (expression
(integer))))) (value
(math_operator) (integer)))))
(expression (math_operator)
(value (expression
(integer))))))))) (value
(integer))))))))))
================== ==================
&& &&
================== ==================
4 + 2 == 42 && true 4 + 2 == 42 && true
(((4 + 2) == 42) && true)
--- ---
(root (root
(statement (item
(expression (statement
(logic (expression
(expression (logic
(math (expression
(expression (math
(value (expression
(integer))) (value
(math_operator) (integer)))
(expression (math_operator)
(value (expression
(integer))))) (value
(logic_operator) (integer)))))
(expression (logic_operator)
(logic (expression
(expression (logic
(value (expression
(integer))) (value
(logic_operator) (integer)))
(expression (logic_operator)
(value (expression
(boolean))))))))) (value
(boolean)))))))))
(item
(statement
(expression
(logic
(expression
(logic
(expression
(math
(expression
(value
(integer)))
(math_operator)
(expression
(value
(integer)))))
(logic_operator)
(expression
(value
(integer)))))
(logic_operator)
(expression
(value
(boolean))))))))
================== ==================
\|| \||
================== ==================
4 + 2 == 42 || true 4 + 2 == 42 || true
((4 + 2) == 42) || true
--- ---
(root (root
(statement (item
(expression (statement
(logic (expression
(expression (logic
(math (expression
(expression (math
(value (expression
(integer))) (value
(math_operator) (integer)))
(expression (math_operator)
(value (expression
(integer))))) (value
(logic_operator) (integer)))))
(expression (logic_operator)
(logic (expression
(expression (logic
(value (expression
(integer))) (value
(logic_operator) (integer)))
(expression (logic_operator)
(value (expression
(boolean))))))))) (value
(boolean)))))))))
(item
(statement
(expression
(logic
(expression
(logic
(expression
(math
(expression
(value
(integer)))
(math_operator)
(expression
(value
(integer)))))
(logic_operator)
(expression
(value
(integer)))))
(logic_operator)
(expression
(value
(boolean))))))))

View File

@ -8,14 +8,16 @@ false
--- ---
(root (root
(statement (item
(expression (statement
(value (expression
(boolean)))) (value
(statement (boolean)))))
(expression (item
(value (statement
(boolean))))) (expression
(value
(boolean))))))
================== ==================
Integers Integers
@ -27,26 +29,31 @@ Integers
--- ---
(root (root
(statement (item
(expression (statement
(value (expression
(integer)))) (value
(statement (integer)))))
(expression (item
(value (statement
(integer)))) (expression
(statement (value
(expression (integer)))))
(value (item
(integer)))) (statement
(statement (expression
(expression (value
(value (integer)))))
(integer)))) (item
(statement (statement
(expression (expression
(value (value
(integer))))) (integer)))))
(item
(statement
(expression
(value
(integer))))))
================== ==================
Strings Strings
@ -57,23 +64,28 @@ Strings
--- ---
(root (root
(statement (item
(expression
(value
(string))))
(statement
(expression
(value
(string))))
(statement
(expression
(value
(string))))
(statement
(expression
(value
(string))))
(statement (statement
(expression (expression
(value (value
(string))))) (string)))))
(item
(statement
(expression
(value
(string)))))
(item
(statement
(expression
(value
(string)))))
(item
(statement
(expression
(value
(string)))))
(item
(statement
(expression
(value
(string))))))

View File

@ -9,17 +9,20 @@ x
--- ---
(root (root
(statement (item
(expression (statement
(value (expression
(integer)))) (value
(statement (integer)))))
(expression (item
(value (statement
(string)))) (expression
(statement (value
(expression (string)))))
(identifier)))) (item
(statement
(expression
(identifier)))))
================== ==================
Simple Assignment Simple Assignment
@ -31,100 +34,83 @@ y = "one"
--- ---
(root (root
(statement (item
(assignment (statement
(identifier) (assignment
(assignment_operator) (identifier)
(statement (assignment_operator)
(expression (statement
(value (expression
(integer)))))) (value
(statement (integer)))))))
(assignment (item
(identifier) (statement
(assignment_operator) (assignment
(statement (identifier)
(expression (assignment_operator)
(value (statement
(string))))))) (expression
(value
(string))))))))
================== ==================
Complex Assignment Complex Assignment
================== ==================
x = if 1 + 1 == 2 { x = 1 + 1
'yo'
} else {
'no'
}
--- ---
(root (root
(statement (item
(assignment (statement
(identifier) (assignment
(assignment_operator) (identifier)
(statement (assignment_operator)
(if_else (statement
(if (expression
(expression (math
(logic
(expression
(math
(expression
(value
(integer)))
(math_operator)
(expression
(value
(integer)))))
(logic_operator)
(expression
(value
(integer)))))
(statement
(expression (expression
(value (value
(string))))) (integer)))
(else (math_operator)
(statement
(expression (expression
(value (value
(string)))))))))) (integer))))))))))
================== ==================
Expression Precedence Expression Precedence
================== ==================
x = 3 == 1 + 2 + 2 x = (3 == (1 + (2 + 2)))
--- ---
(root (root
(statement (item
(assignment (statement
(identifier) (assignment
(assignment_operator) (identifier)
(statement (assignment_operator)
(expression (statement
(logic (expression
(expression (logic
(value (expression
(integer))) (value
(logic_operator) (integer)))
(expression (logic_operator)
(math (expression
(expression (math
(math (expression
(expression (value
(value (integer)))
(integer))) (math_operator)
(math_operator) (expression
(expression (math
(value (expression
(integer))))) (value
(math_operator) (integer)))
(expression (math_operator)
(value (expression
(integer))))))))))) (value
(integer))))))))))))))

View File

@ -11,42 +11,79 @@ table <messages, numbers> [
--- ---
(root (root
(statement (item
(expression (statement
(value (expression
(table (value
(identifier) (table
(identifier) (identifier)
(identifier)
(expression
(value
(list
(expression
(value
(list
(expression
(value
(string)))
(expression
(value
(integer))))))
(expression
(value
(list
(expression
(value
(string)))
(expression
(value
(integer))))))
(expression
(value
(list
(expression
(value
(string)))
(expression
(value
(float)))))))))))))))
==================
Table Assignment
==================
foobar = table <text, number> [
['answer', 42]
]
---
(root
(item
(statement
(assignment
(identifier)
(assignment_operator)
(statement
(expression (expression
(value (value
(list (table
(identifier)
(identifier)
(expression (expression
(value (value
(list (list
(expression (expression
(value (value
(string))) (list
(expression (expression
(value (value
(integer)))))) (string)))
(expression (expression
(value (value
(list (integer)))))))))))))))))
(expression
(value
(string)))
(expression
(value
(integer))))))
(expression
(value
(list
(expression
(value
(string)))
(expression
(value
(float))))))))))))))
================== ==================
Table Access Table Access
================== ==================
@ -58,20 +95,22 @@ select <number> from foobar {
--- ---
(root (root
(statement (item
(select (statement
(identifier) (select
(expression (identifier)
(identifier)) (expression
(statement (identifier))
(expression (item
(logic (statement
(expression (expression
(identifier)) (logic
(logic_operator) (expression
(expression (identifier))
(value (logic_operator)
(string))))))))) (expression
(value
(string)))))))))))
================== ==================
Table Insert Table Insert
@ -84,18 +123,19 @@ insert into foobar [
--- ---
(root (root
(statement (item
(insert (statement
(identifier) (insert
(expression (identifier)
(value (expression
(list (value
(expression (list
(value (expression
(list (value
(expression (list
(value (expression
(string))) (value
(expression (string)))
(value (expression
(integer)))))))))))) (value
(integer)))))))))))))

View File

@ -9,74 +9,63 @@ transform i in [1, 2, 3] {
--- ---
(root (root
(statement (item
(transform (statement
(identifier) (transform
(expression (identifier)
(value
(list
(expression
(value
(integer)))
(expression
(value
(integer)))
(expression
(value
(integer))))))
(statement
(expression (expression
(tool (value
(list
(expression
(value
(integer)))
(expression
(value
(integer)))
(expression
(value
(integer))))))
(item
(statement
(expression (expression
(identifier)))))))) (tool
(expression
(identifier))))))))))
================== ==================
Nested Transform Loop Transform Loop Assignment
================== ==================
transform i in [['one'] ['two'] ['three']] { list = transform i in ["one", "two", "three"] {
transform j in i { (output i)
j += 'foobar'
}
} }
--- ---
(root (root
(statement (item
(transform (statement
(identifier) (assignment
(expression (identifier)
(value (assignment_operator)
(list (statement
(transform
(identifier)
(expression (expression
(value (value
(list (list
(expression
(value
(string)))
(expression
(value
(string)))
(expression (expression
(value (value
(string)))))) (string))))))
(expression (item
(value
(list
(expression
(value
(string))))))
(expression
(value
(list
(expression
(value
(string)))))))))
(statement
(transform
(identifier)
(expression
(identifier))
(statement
(assignment
(identifier)
(assignment_operator)
(statement (statement
(expression (expression
(value (tool
(string))))))))))) (expression
(identifier))))))))))))

View File

@ -9,59 +9,43 @@ while true {
--- ---
(root (root
(statement (item
(while (statement
(expression (while
(value
(boolean)))
(statement
(expression (expression
(tool (value
(boolean)))
(item
(statement
(expression (expression
(value (tool
(string))))))))) (expression
(value
(string)))))))))))
================== ==================
Nested While Loop While Loop Assignment
================== ==================
while true { answer = while false {
x = 4 42
while x > 0 {
x -= 1
}
} }
--- ---
(root (root
(statement (item
(while (statement
(expression (assignment
(value (identifier)
(boolean))) (assignment_operator)
(statement (statement
(assignment (while
(identifier)
(assignment_operator)
(statement
(expression (expression
(value (value
(integer))))) (boolean)))
(while (item
(expression
(logic
(expression
(identifier))
(logic_operator)
(expression
(value
(integer)))))
(statement
(assignment
(identifier)
(assignment_operator)
(statement (statement
(expression (expression
(value (value
(integer))))))))))) (integer)))))))))))

View File

@ -11,8 +11,8 @@ module.exports = grammar({
comment: $ => /[#][^#\n]*[#|\n]/, comment: $ => /[#][^#\n]*[#|\n]/,
statement: $ => prec.left(choice( statement: $ => prec.left(choice(
repeat1($._statement_kind), $._statement_kind,
seq('{', repeat1($._statement_kind), '}'), seq('{', $._statement_kind, '}'),
)), )),
_statement_kind: $ => prec.left(choice( _statement_kind: $ => prec.left(choice(
@ -37,7 +37,7 @@ module.exports = grammar({
seq('(', $._expression_kind, ')'), seq('(', $._expression_kind, ')'),
), ),
_expression_kind: $ => prec.right(choice( _expression_kind: $ => prec.left(choice(
$.function_call, $.function_call,
$.identifier, $.identifier,
$.index, $.index,
@ -60,19 +60,9 @@ module.exports = grammar({
$.map, $.map,
), ),
integer: $ => prec.left(token(seq( integer: $ => /0[bB][01](_?[01])*|0[oO]?[0-7](_?[0-7])*|(0[dD])?\d(_?\d)*|0[xX][0-9a-fA-F](_?[0-9a-fA-F])*/,
optional('-'),
repeat1(
choice('1', '2', '3', '4', '5', '6', '7', '8', '9', '0')
),
))),
float: $ => prec.left(token(seq( float: $ => /\d(_?\d)*(\.\d)?(_?\d)*([eE][\+-]?\d(_?\d)*)?/,
optional('-'),
repeat1(choice('1', '2', '3', '4', '5', '6', '7', '8', '9', '0')),
'.',
repeat1(choice('1', '2', '3', '4', '5', '6', '7', '8', '9', '0')),
))),
string: $ => /("[^"]*?")|('[^']*?')|(`[^`]*?`)/, string: $ => /("[^"]*?")|('[^']*?')|(`[^`]*?`)/,
@ -83,18 +73,13 @@ module.exports = grammar({
list: $ => seq( list: $ => seq(
'[', '[',
repeat(prec.left(seq($.expression, optional(',')))), repeat(seq($.expression, optional(','))),
']', ']',
), ),
map: $ => seq( map: $ => seq(
'{', '{',
repeat(seq( $.assignment,
$.identifier,
'=',
$.expression,
optional(',')
)),
'}', '}',
), ),
@ -128,13 +113,13 @@ module.exports = grammar({
$.expression, $.expression,
)), )),
math_operator: $ => token(choice( math_operator: $ => choice(
'+', '+',
'-', '-',
'*', '*',
'/', '/',
'%', '%',
)), ),
logic: $ => prec.right(seq( logic: $ => prec.right(seq(
$.expression, $.expression,
@ -142,7 +127,7 @@ module.exports = grammar({
$.expression, $.expression,
)), )),
logic_operator: $ => token(choice( logic_operator: $ => choice(
'==', '==',
'!=', '!=',
'&&', '&&',
@ -151,7 +136,7 @@ module.exports = grammar({
'<', '<',
">=", ">=",
"<=", "<=",
)), ),
assignment: $ => prec.right(seq( assignment: $ => prec.right(seq(
$.identifier, $.identifier,
@ -159,11 +144,11 @@ module.exports = grammar({
$.statement, $.statement,
)), )),
assignment_operator: $ => token(choice( assignment_operator: $ => choice(
"=", "=",
"+=", "+=",
"-=", "-=",
)), ),
if_else: $ => prec.left(seq( if_else: $ => prec.left(seq(
$.if, $.if,
@ -197,7 +182,7 @@ module.exports = grammar({
function_call: $ => seq( function_call: $ => seq(
'(', '(',
$.identifier, $.identifier,
repeat(prec.left(seq($.expression, optional(',')))), repeat(seq($.expression, optional(','))),
')', ')',
), ),
@ -304,13 +289,15 @@ module.exports = grammar({
async: $ => seq( async: $ => seq(
'async', 'async',
'{', '{',
$.statement, repeat($.statement),
'}' '}'
), ),
tool: $ => prec.right(seq( tool: $ => prec.right(seq(
'(',
$._tool_kind, $._tool_kind,
repeat(prec.left(seq($.expression, optional(',')))), repeat(seq($.expression, optional(','))),
')',
)), )),
_tool_kind: $ => choice( _tool_kind: $ => choice(
@ -330,6 +317,7 @@ module.exports = grammar({
'metadata', 'metadata',
'move', 'move',
'read', 'read',
'remove',
'write', 'write',
// Format conversion // Format conversion

View File

@ -20,11 +20,8 @@
"type": "CHOICE", "type": "CHOICE",
"members": [ "members": [
{ {
"type": "REPEAT1", "type": "SYMBOL",
"content": { "name": "_statement_kind"
"type": "SYMBOL",
"name": "_statement_kind"
}
}, },
{ {
"type": "SEQ", "type": "SEQ",
@ -34,11 +31,8 @@
"value": "{" "value": "{"
}, },
{ {
"type": "REPEAT1", "type": "SYMBOL",
"content": { "name": "_statement_kind"
"type": "SYMBOL",
"name": "_statement_kind"
}
}, },
{ {
"type": "STRING", "type": "STRING",
@ -141,7 +135,7 @@
] ]
}, },
"_expression_kind": { "_expression_kind": {
"type": "PREC_RIGHT", "type": "PREC_LEFT",
"value": 0, "value": 0,
"content": { "content": {
"type": "CHOICE", "type": "CHOICE",
@ -219,200 +213,12 @@
] ]
}, },
"integer": { "integer": {
"type": "PREC_LEFT", "type": "PATTERN",
"value": 0, "value": "0[bB][01](_?[01])*|0[oO]?[0-7](_?[0-7])*|(0[dD])?\\d(_?\\d)*|0[xX][0-9a-fA-F](_?[0-9a-fA-F])*"
"content": {
"type": "TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "-"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "1"
},
{
"type": "STRING",
"value": "2"
},
{
"type": "STRING",
"value": "3"
},
{
"type": "STRING",
"value": "4"
},
{
"type": "STRING",
"value": "5"
},
{
"type": "STRING",
"value": "6"
},
{
"type": "STRING",
"value": "7"
},
{
"type": "STRING",
"value": "8"
},
{
"type": "STRING",
"value": "9"
},
{
"type": "STRING",
"value": "0"
}
]
}
}
]
}
}
}, },
"float": { "float": {
"type": "PREC_LEFT", "type": "PATTERN",
"value": 0, "value": "\\d(_?\\d)*(\\.\\d)?(_?\\d)*([eE][\\+-]?\\d(_?\\d)*)?"
"content": {
"type": "TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "-"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "1"
},
{
"type": "STRING",
"value": "2"
},
{
"type": "STRING",
"value": "3"
},
{
"type": "STRING",
"value": "4"
},
{
"type": "STRING",
"value": "5"
},
{
"type": "STRING",
"value": "6"
},
{
"type": "STRING",
"value": "7"
},
{
"type": "STRING",
"value": "8"
},
{
"type": "STRING",
"value": "9"
},
{
"type": "STRING",
"value": "0"
}
]
}
},
{
"type": "STRING",
"value": "."
},
{
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "1"
},
{
"type": "STRING",
"value": "2"
},
{
"type": "STRING",
"value": "3"
},
{
"type": "STRING",
"value": "4"
},
{
"type": "STRING",
"value": "5"
},
{
"type": "STRING",
"value": "6"
},
{
"type": "STRING",
"value": "7"
},
{
"type": "STRING",
"value": "8"
},
{
"type": "STRING",
"value": "9"
},
{
"type": "STRING",
"value": "0"
}
]
}
}
]
}
}
}, },
"string": { "string": {
"type": "PATTERN", "type": "PATTERN",
@ -438,60 +244,11 @@
"type": "STRING", "type": "STRING",
"value": "[" "value": "["
}, },
{
"type": "REPEAT",
"content": {
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "expression"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
}
}
},
{
"type": "STRING",
"value": "]"
}
]
},
"map": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{ {
"type": "REPEAT", "type": "REPEAT",
"content": { "content": {
"type": "SEQ", "type": "SEQ",
"members": [ "members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "STRING",
"value": "="
},
{ {
"type": "SYMBOL", "type": "SYMBOL",
"name": "expression" "name": "expression"
@ -511,6 +268,23 @@
] ]
} }
}, },
{
"type": "STRING",
"value": "]"
}
]
},
"map": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "SYMBOL",
"name": "assignment"
},
{ {
"type": "STRING", "type": "STRING",
"value": "}" "value": "}"
@ -701,32 +475,29 @@
} }
}, },
"math_operator": { "math_operator": {
"type": "TOKEN", "type": "CHOICE",
"content": { "members": [
"type": "CHOICE", {
"members": [ "type": "STRING",
{ "value": "+"
"type": "STRING", },
"value": "+" {
}, "type": "STRING",
{ "value": "-"
"type": "STRING", },
"value": "-" {
}, "type": "STRING",
{ "value": "*"
"type": "STRING", },
"value": "*" {
}, "type": "STRING",
{ "value": "/"
"type": "STRING", },
"value": "/" {
}, "type": "STRING",
{ "value": "%"
"type": "STRING", }
"value": "%" ]
}
]
}
}, },
"logic": { "logic": {
"type": "PREC_RIGHT", "type": "PREC_RIGHT",
@ -750,44 +521,41 @@
} }
}, },
"logic_operator": { "logic_operator": {
"type": "TOKEN", "type": "CHOICE",
"content": { "members": [
"type": "CHOICE", {
"members": [ "type": "STRING",
{ "value": "=="
"type": "STRING", },
"value": "==" {
}, "type": "STRING",
{ "value": "!="
"type": "STRING", },
"value": "!=" {
}, "type": "STRING",
{ "value": "&&"
"type": "STRING", },
"value": "&&" {
}, "type": "STRING",
{ "value": "||"
"type": "STRING", },
"value": "||" {
}, "type": "STRING",
{ "value": ">"
"type": "STRING", },
"value": ">" {
}, "type": "STRING",
{ "value": "<"
"type": "STRING", },
"value": "<" {
}, "type": "STRING",
{ "value": ">="
"type": "STRING", },
"value": ">=" {
}, "type": "STRING",
{ "value": "<="
"type": "STRING", }
"value": "<=" ]
}
]
}
}, },
"assignment": { "assignment": {
"type": "PREC_RIGHT", "type": "PREC_RIGHT",
@ -811,24 +579,21 @@
} }
}, },
"assignment_operator": { "assignment_operator": {
"type": "TOKEN", "type": "CHOICE",
"content": { "members": [
"type": "CHOICE", {
"members": [ "type": "STRING",
{ "value": "="
"type": "STRING", },
"value": "=" {
}, "type": "STRING",
{ "value": "+="
"type": "STRING", },
"value": "+=" {
}, "type": "STRING",
{ "value": "-="
"type": "STRING", }
"value": "-=" ]
}
]
}
}, },
"if_else": { "if_else": {
"type": "PREC_LEFT", "type": "PREC_LEFT",
@ -952,29 +717,25 @@
{ {
"type": "REPEAT", "type": "REPEAT",
"content": { "content": {
"type": "PREC_LEFT", "type": "SEQ",
"value": 0, "members": [
"content": { {
"type": "SEQ", "type": "SYMBOL",
"members": [ "name": "expression"
{ },
"type": "SYMBOL", {
"name": "expression" "type": "CHOICE",
}, "members": [
{ {
"type": "CHOICE", "type": "STRING",
"members": [ "value": ","
{ },
"type": "STRING", {
"value": "," "type": "BLANK"
}, }
{ ]
"type": "BLANK" }
} ]
]
}
]
}
} }
}, },
{ {
@ -1398,8 +1159,11 @@
"value": "{" "value": "{"
}, },
{ {
"type": "SYMBOL", "type": "REPEAT",
"name": "statement" "content": {
"type": "SYMBOL",
"name": "statement"
}
}, },
{ {
"type": "STRING", "type": "STRING",
@ -1413,6 +1177,10 @@
"content": { "content": {
"type": "SEQ", "type": "SEQ",
"members": [ "members": [
{
"type": "STRING",
"value": "("
},
{ {
"type": "SYMBOL", "type": "SYMBOL",
"name": "_tool_kind" "name": "_tool_kind"
@ -1420,30 +1188,30 @@
{ {
"type": "REPEAT", "type": "REPEAT",
"content": { "content": {
"type": "PREC_LEFT", "type": "SEQ",
"value": 0, "members": [
"content": { {
"type": "SEQ", "type": "SYMBOL",
"members": [ "name": "expression"
{ },
"type": "SYMBOL", {
"name": "expression" "type": "CHOICE",
}, "members": [
{ {
"type": "CHOICE", "type": "STRING",
"members": [ "value": ","
{ },
"type": "STRING", {
"value": "," "type": "BLANK"
}, }
{ ]
"type": "BLANK" }
} ]
]
}
]
}
} }
},
{
"type": "STRING",
"value": ")"
} }
] ]
} }
@ -1503,6 +1271,10 @@
"type": "STRING", "type": "STRING",
"value": "read" "value": "read"
}, },
{
"type": "STRING",
"value": "remove"
},
{ {
"type": "STRING", "type": "STRING",
"value": "write" "value": "write"

View File

@ -22,13 +22,18 @@
] ]
} }
}, },
{
"type": "assignment_operator",
"named": true,
"fields": {}
},
{ {
"type": "async", "type": "async",
"named": true, "named": true,
"fields": {}, "fields": {},
"children": { "children": {
"multiple": false, "multiple": true,
"required": true, "required": false,
"types": [ "types": [
{ {
"type": "statement", "type": "statement",
@ -184,11 +189,6 @@
] ]
} }
}, },
{
"type": "float",
"named": true,
"fields": {}
},
{ {
"type": "for", "type": "for",
"named": true, "named": true,
@ -326,11 +326,6 @@
] ]
} }
}, },
{
"type": "integer",
"named": true,
"fields": {}
},
{ {
"type": "list", "type": "list",
"named": true, "named": true,
@ -365,20 +360,21 @@
] ]
} }
}, },
{
"type": "logic_operator",
"named": true,
"fields": {}
},
{ {
"type": "map", "type": "map",
"named": true, "named": true,
"fields": {}, "fields": {},
"children": { "children": {
"multiple": true, "multiple": false,
"required": false, "required": true,
"types": [ "types": [
{ {
"type": "expression", "type": "assignment",
"named": true
},
{
"type": "identifier",
"named": true "named": true
} }
] ]
@ -422,6 +418,11 @@
] ]
} }
}, },
{
"type": "math_operator",
"named": true,
"fields": {}
},
{ {
"type": "reduce", "type": "reduce",
"named": true, "named": true,
@ -511,7 +512,7 @@
"named": true, "named": true,
"fields": {}, "fields": {},
"children": { "children": {
"multiple": true, "multiple": false,
"required": true, "required": true,
"types": [ "types": [
{ {
@ -692,6 +693,18 @@
] ]
} }
}, },
{
"type": "!=",
"named": false
},
{
"type": "%",
"named": false
},
{
"type": "&&",
"named": false
},
{ {
"type": "(", "type": "(",
"named": false "named": false
@ -700,14 +713,38 @@
"type": ")", "type": ")",
"named": false "named": false
}, },
{
"type": "*",
"named": false
},
{
"type": "+",
"named": false
},
{
"type": "+=",
"named": false
},
{ {
"type": ",", "type": ",",
"named": false "named": false
}, },
{
"type": "-",
"named": false
},
{
"type": "-=",
"named": false
},
{ {
"type": "..", "type": "..",
"named": false "named": false
}, },
{
"type": "/",
"named": false
},
{ {
"type": ":", "type": ":",
"named": false "named": false
@ -716,10 +753,18 @@
"type": "<", "type": "<",
"named": false "named": false
}, },
{
"type": "<=",
"named": false
},
{ {
"type": "=", "type": "=",
"named": false "named": false
}, },
{
"type": "==",
"named": false
},
{ {
"type": "=>", "type": "=>",
"named": false "named": false
@ -728,6 +773,10 @@
"type": ">", "type": ">",
"named": false "named": false
}, },
{
"type": ">=",
"named": false
},
{ {
"type": "[", "type": "[",
"named": false "named": false
@ -748,10 +797,6 @@
"type": "assert_equal", "type": "assert_equal",
"named": false "named": false
}, },
{
"type": "assignment_operator",
"named": true
},
{ {
"type": "async", "type": "async",
"named": false "named": false
@ -796,6 +841,10 @@
"type": "fish", "type": "fish",
"named": false "named": false
}, },
{
"type": "float",
"named": true
},
{ {
"type": "for", "type": "for",
"named": false "named": false
@ -832,6 +881,10 @@
"type": "insert", "type": "insert",
"named": false "named": false
}, },
{
"type": "integer",
"named": true
},
{ {
"type": "into", "type": "into",
"named": false "named": false
@ -840,18 +893,10 @@
"type": "length", "type": "length",
"named": false "named": false
}, },
{
"type": "logic_operator",
"named": true
},
{ {
"type": "match", "type": "match",
"named": false "named": false
}, },
{
"type": "math_operator",
"named": true
},
{ {
"type": "metadata", "type": "metadata",
"named": false "named": false
@ -972,6 +1017,10 @@
"type": "{", "type": "{",
"named": false "named": false
}, },
{
"type": "||",
"named": false
},
{ {
"type": "}", "type": "}",
"named": false "named": false

File diff suppressed because it is too large Load Diff