-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSPuD.txt
78 lines (49 loc) · 1.83 KB
/
SPuD.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
"SPuD" {
instruction = integer "," integer (":" statement-list | case-list where-clause) ".".
statement-list = statement { ";" statement } [ ";" ].
case-list = case { case }.
case = "case" condition (":" | "?") statement-list.
where-clause = "where" helper-list.
helper-list = helper-statement { ";" helper-statement } [ ";" ].
helper-statement = identifier "=" integer-expression.
statement =
state-value ("=" | "+=" | "-=") integer-expression
| state-value ("++" | "--")
| side-effect.
condition = boolean-expression { ("&&" | "||") boolean-expression }.
boolean-expression =
integer-expression (">" | "<" | "<=" | ">=" | "==" | "!=") integer-expression
| ("true" | "otherwise" | "false")
| "(" condition ")".
integer-expression = bit-expression.
bit-expression = add-expression { ("^" | "&" | "|" | "<<" | ">>") add-expression }.
add-expression = mul-expression { ("+" | "-" ) mul-expression }.
mul-expression = unary-expression { ("*" | "/" | "%") unary-expression }.
unary-expression = simple-expression | "~" simple-expression.
simple-expression = value | "(" integer-expression ")".
integer = digit { digit }.
digit = "0" | "1" | "..." | "9".
hex = "#" hex-digit { hex-digit }.
hex-digit = digit | "A" | "B" | "C" | "D" | "E" | "F".
side-effect =
"print" "(" integer-expression ")"
| "printASCII" "(" integer-expression ")"
| "bell"
| "halt"
| "nop".
value =
integer
| hex
| identifier
| state-value.
state-value =
"[" integer-expression "]"
| "{" integer-expression "}"
| register-name.
identifier = letter { (integer | letter) }.
register-name = letter { (integer | letter) }.
letter = "_" | alphabetical-character.
alphabetical-character = lowercase-character | uppercase-character.
lowercase-character = "a" | "b" | "..." | "z".
uppercase-character = "A" | "B" | "..." | "Z".
}