summaryrefslogtreecommitdiff
path: root/test/ignore4.lm
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"
==