summaryrefslogtreecommitdiff
path: root/grammar/parserust.lm
blob: 3e17a3b603addeada7a97690b8f2c226414204b2 (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
76
77
78
79
80
81
include 'rust.lm'

parse P: program [stdin]

if P {
	for FN: function in P {
		print "function: [FN.id]

		for CE: compound_expression in FN {
			if match CE [assignment_expression compound_op compound_expression]
				print "  compound expression: [CE]
		}

		for AE: assignment_expression in FN {
			if match AE [range_expression `= assignment_expression]
				print "  assignment expression: [AE]
		}

		for RE: range_expression in FN {
			if !match RE [lazy_disjunction]
				print "  range expression: [RE]
		}

		for LD: lazy_disjunction in FN {
			if !match LD [lazy_conjunction]
				print "  lazy disjunction: [LD]
		}

		for LC: lazy_conjunction in FN {
			if !match LC [comparison]
				print "  lazy conjunction: [LC]
		}

		for C: comparison in FN {
			if !match C [bitwise_or]
				print "  comparison: [C]
		}

		for P: pattern in FN {
			print "  pattern: [P]
		}

		for MA: match_arm in FN {
			print "  match_arm: [MA]
		}

		for CL: cons_list in FN {
			print "  construct list: [^CL]
		}

		for M: mult in FN {
			if !match M [as]
				print "  mult: [^M]
		}

		for TP: tuple_pattern in FN {
			print "  tuple pattern: [TP]
		}

		for TP: grouped_pattern in FN {
			print "  grouped pattern: [TP]
		}

		for CP: closure_param in FN {
			print "  closure param: [CP]
		}
	}

	for M: method in P {
		print "method: [M.id]
	}

	for MR: macro_rule in P {
		print "  macro matcher: [MR.macro_matcher]
	}
}
else {
	send stderr "failed to parse input [error]
	exit(1)
}