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
}
|