File: raw_scan.rl

package info (click to toggle)
golang-github-apparentlymart-go-versions 1.0.1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 292 kB
  • sloc: makefile: 2
file content (95 lines) | stat: -rw-r--r-- 1,887 bytes parent folder | download
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// This file is generated from raw_scan.rl. DO NOT EDIT.
%%{
	# (except you are actually in raw_scan.rl here, so edit away!)
	machine scan;
}%%

package constraints

%%{
	write data;
}%%

func scanConstraint(data string) (rawConstraint, string) {
	var constraint rawConstraint
	var numIdx int
	var extra string

	// Ragel state
	p := 0  // "Pointer" into data
	pe := len(data) // End-of-data "pointer"
	cs := 0 // constraint state (will be initialized by ragel-generated code)
	ts := 0
	te := 0
	eof := pe

	// Keep Go compiler happy even if generated code doesn't use these
	_ = ts
	_ = te
	_ = eof

	%%{

		action enterConstraint {
			numIdx = 0
			constraint = rawConstraint{}
		}

		action ts {
			ts = p
		}

		action finishOp {
			te = p
			constraint.op = data[ts:p]
		}

		action finishSep {
			te = p
			constraint.sep = data[ts:p]
		}

		action finishNum {
			te = p
			constraint.numCt++
			if numIdx < len(constraint.nums) {
				constraint.nums[numIdx] = data[ts:p]
				numIdx++
			}
		}

		action finishPre {
			te = p
			constraint.pre = data[ts+1:p]
		}

		action finishMeta {
			te = p
			constraint.meta = data[ts+1:p]
		}

		action finishExtra {
			extra = data[p:]
		}

		num = (digit+ | '*' | 'x' | 'X') >ts %finishNum %err(finishNum) %eof(finishNum);

		op = ((any - (digit | space | alpha | '.' | '*'))**) >ts %finishOp %err(finishOp) %eof(finishOp);
		likelyOp = ('^' | '>' | '<' | '-' | '~' | '!');
		sep = (space**) >ts %finishSep %err(finishSep) %eof(finishSep);
		nums = (num ('.' num)*);
		extraStr = (alnum | '.' | '-')+;
		pre = ('-' extraStr) >ts %finishPre %err(finishPre) %eof(finishPre);
		meta = ('+' extraStr) >ts %finishMeta %err(finishMeta) %eof(finishMeta);

		constraint = (op sep nums pre? meta?) >enterConstraint;

		main := (constraint) @/finishExtra %/finishExtra $!finishExtra;

		write init;
		write exec;

	}%%

	return constraint, extra
}