blob: 3dc37a8ed0f0d62ba434b84812ac93a4bf460975 (
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
75
|
##### LM #####
namespace hash
lex
literal 'define', 'include'
literal '\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 '\n']
| ['include' string '\n']
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.tree
print( Input.error '\n' )
else {
#print( Input.tree '\n' )
S: lang::start = Input.tree
for H: lang::statement in S {
require H [ lang::'#' hash::hash ]
print( '--' %H '==\n' )
}
}
##### IN #####
hello;
#include "input1"
#include "input2"
#include "input3"
there;
##### EXP #####
--#include "input1"
==
--
#include "input2"
==
--
#include "input3"
==
|