-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmeta.g
executable file
·53 lines (45 loc) · 913 Bytes
/
meta.g
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
#!./meta.py meta.asm
.SYNTAX PROGRAM
PROGRAM
= '.SYNTAX' .ID { .TB 'ADR ' * .NL }
$ ST
'.END' { .TB 'END' .NL }
;
ST
= .ID { * .NL } '=' EX1 ';' { .TB 'R' .NL }
;
EX1
= EX2 $ ( '/' { .TB 'BT L' # .NL } EX2 ) { 'L' # .NL }
;
EX2
= ( EX3 { .TB 'BF L' # .NL } / OUTPUT )
$ ( EX3 { .TB 'BE' .NL } / OUTPUT )
{ 'L' # .NL }
;
EX3
= .ID { .TB 'CLL ' * .NL }
/ .STRING { .TB 'TST ' * .NL }
/ '.ID' { .TB 'ID' .NL }
/ '.NUMBER' { .TB 'NUM' .NL }
/ '.STRING' { .TB 'SR' .NL }
/ '(' EX1 ')'
/ '.EMPTY' { .TB 'SET' .NL }
/ '$'
{ 'L' # .NL }
EX3
{ .TB 'BT L' # .NL }
{ .TB 'SET' .NL }
;
OUTPUT
= '{' $ OUT1 '}'
;
OUT1
= '*' { .TB 'CI' .NL }
/ .STRING { .TB 'CL ' * .NL }
/ '#' { .TB 'GN' .NL }
/ '.NL' { .TB 'NL' .NL }
/ '.TB' { .TB 'TB' .NL }
/ '.LM+' { .TB 'LMI' .NL }
/ '.LM-' { .TB 'LMD' .NL }
;
.END