-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgrammar.txt
84 lines (71 loc) · 2.15 KB
/
grammar.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
Part of the DropScript interpreter
Copyright (C) 2020 Martin Larsson aka leddy231
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
*/
// newlines are ignored
// all explicit whitespace are optional
// operators are syntactic suggar for single argument block execution, ex: 1 + 2 is equal to 1.add(2)
// !<object> is equal to <object>.not()
<program> ::= (<action><semi>)*
<action> ::= <object> <equal> <object>
| <object> <qmark> <object> <colon> <object>
| <object>
<object> ::= <base>
| <object><dot><identifier>
| <object><openparen>[<arguments>]<closeparen>
| <object> <operator> <object>
<base> ::= <number>
| <float>
| <string>
| <boolean>
| <identifier>
| <block>
| <openparen><action><closeparen>
| <not><object>
<block> ::= <openparen>[<blockargs>]<closeparen><colon><openbrace><program><closebrace>
| <openbrace><program><closebrace>
<blockargs> ::= <identifier>(<comma> <identifier>)*
<arguments> ::= <object>(<comma> <object>)*
<float> ::= <number><dot><number>
<equal> ::= '='
<semi> ::= ';'
<comma> ::= ','
<not> ::= '!'
<qmark> ::= '?'
<colon> ::= ':'
<dot> ::= '.'
<closebrace> ::= '}'
<openbrace> ::= '{'
<closeparen> ::= ')'
<openparen> ::= '('
<identifier> ::= /[a-zA_Z]\w+/
<number> ::= /\d+/
<string> ::= /\".*?\"/
<boolean> ::= 'true'
| 'false'
<operator> ::= '+'
| '-'
| '*'
| '/'
| '^'
| '%'
| '=='
| '&&'
| '||'
| '>'
| '<'
| '>='
| '<='
| '!='
| '..'
| '<>'
| '><'
| '<<'