summaryrefslogtreecommitdiff
path: root/test/ignore4.lm
blob: b26d629e90d0417bfcdad9e6518f022883c3c967 (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
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' )
	}
}