blob: cdd94b340f951c4e02b45f04d137b2c1262de439 (
plain)
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
|
##### LM #####
namespace hash
lex
literal `define `include
token NL /'\n'/ -ni
token id /[a-zA-Z_][a-zA-Z_0-9]*/
token number /[0-9]+/
token string /'"' ( [^"\\] | '\\' any )* '"'/
ignore /[ \t]+/
end
def hash
[`define id number NL]
| [`include string NL]
end # hash
namespace lang
lex
ignore /space+/
literal `* `( `) `; `#
token id /[a-zA-Z_][a-zA-Z_0-9]*/
token number /[0-9]+/
end
def item
[id]
| [`( item* `)]
def statement
[item* `;]
| [`# hash::hash]
def start
[statement*]
end # lang
parse Input: lang::start[ stdin ]
if ! Input
print( error '\n' )
else {
#print( Input.tree '\n' )
for H: lang::statement in Input {
require H [ lang::`# hash::hash ]
print( '--' H '==\n' )
}
}
##### IN #####
hello;
#include "input1"
#include "input2"
#include "input3"
there;
##### EXP #####
--#include "input1"
==
--
#include "input2"
==
--
#include "input3"
==
|