This commit is contained in:
Miek Gieben 2011-07-14 16:11:16 +02:00
parent 9c9e5e3600
commit bd03eda9f4
3 changed files with 342 additions and 131 deletions

View File

@ -159,9 +159,8 @@ func TestDotInName(t *testing.T) {
}
}
func TestQuotedTxt(t *testing.T) {
x := new(RR_TXT)
x.Hdr = RR_Header{"miek.nl.", TypeTXT, ClassINET, 14400, 0}
x.Txt = "Hello, \"Goodbye\""
// TODO
// New style (Ragel) parsing
func TestParse(t *testing.T) {
zparse("miek.nl. 3600 IN A 127.0.0.1")
}

458
zparse.go
View File

@ -10,7 +10,7 @@ import (
// line 12 "zparse.go"
var z_start int = 0
var z_first_final int = 10
var z_first_final int = 22
var z_error int = -1
var z_en_main int = 0
@ -31,80 +31,81 @@ func zparse(data string) (res int, err os.Error) {
if p == pe { goto _test_eof }
switch cs {
case -666: // i am a hack D:
tr4:
// line 18 "zparse.rl"
{ fmt.Printf("%s\n", data) }
goto st0
st0:
p++
if p == pe { goto _test_eof0 }
fallthrough
case 0:
// line 44 "zparse.go"
switch data[p] {
case 9: goto st1
case 32: goto st1
}
goto st0
tr6:
tr9:
// line 19 "zparse.rl"
{ fmt.Printf("%s\n", data) }
{ fmt.Printf("%s\n", data[p:pe]) }
goto st1
st1:
p++
if p == pe { goto _test_eof1 }
fallthrough
case 1:
// line 59 "zparse.go"
// line 54 "zparse.go"
switch data[p] {
case 9: goto st1
case 32: goto st1
case 65: goto tr3
case 67: goto tr4
case 68: goto tr5
case 78: goto tr4
case 72: goto tr6
case 73: goto tr7
case 78: goto tr8
case 97: goto tr3
case 99: goto tr4
case 100: goto tr5
case 110: goto tr4
}
if data[p] < 72 {
if 48 <= data[p] && data[p] <= 57 { goto tr2 }
} else if data[p] > 73 {
if 104 <= data[p] && data[p] <= 105 { goto tr4 }
} else {
goto tr4
case 104: goto tr6
case 105: goto tr7
case 110: goto tr8
}
if 48 <= data[p] && data[p] <= 57 { goto tr2 }
goto st0
tr2:
// line 18 "zparse.rl"
{ fmt.Printf("%s\n", data) }
{ fmt.Printf("%s\n", data[p:pe]) }
goto st2
st2:
p++
if p == pe { goto _test_eof2 }
fallthrough
case 2:
// line 89 "zparse.go"
// line 82 "zparse.go"
switch data[p] {
case 9: goto tr6
case 32: goto tr6
case 9: goto tr9
case 32: goto tr9
}
if 48 <= data[p] && data[p] <= 57 { goto st2 }
goto st0
tr3:
// line 18 "zparse.rl"
{ fmt.Printf("%s\n", data) }
{ fmt.Printf("%s\n", data[p:pe]) }
goto st3
tr20:
// line 18 "zparse.rl"
{ fmt.Printf("%s\n", data[p:pe]) }
// line 17 "zparse.rl"
{ fmt.Printf("%s\n", data[p:pe]) }
goto st3
st3:
p++
if p == pe { goto _test_eof3 }
fallthrough
case 3:
// line 105 "zparse.go"
// line 104 "zparse.go"
switch data[p] {
case 9: goto st4
case 32: goto st4
case 78: goto st5
case 110: goto st5
}
goto st0
st4:
@ -113,135 +114,130 @@ st4:
fallthrough
case 4:
switch data[p] {
case 9: goto st11
case 32: goto st11
case 65: goto tr12
case 78: goto tr12
case 97: goto tr12
case 110: goto tr12
case 9: goto st23
case 32: goto st23
case 65: goto tr16
case 78: goto tr16
case 97: goto tr16
case 110: goto tr16
}
if data[p] < 72 {
if data[p] > 57 {
if 67 <= data[p] && data[p] <= 68 { goto tr12 }
if 67 <= data[p] && data[p] <= 68 { goto tr16 }
} else if data[p] >= 48 {
goto tr11
goto tr15
}
} else if data[p] > 73 {
if data[p] > 100 {
if 104 <= data[p] && data[p] <= 105 { goto tr12 }
if 104 <= data[p] && data[p] <= 105 { goto tr16 }
} else if data[p] >= 99 {
goto tr12
goto tr16
}
} else {
goto tr12
goto tr16
}
goto st10
tr12:
goto st22
tr16:
// line 18 "zparse.rl"
{ fmt.Printf("%s\n", data) }
goto st10
tr18:
// line 17 "zparse.rl"
{ fmt.Printf("%s\n", data) }
goto st10
tr21:
{ fmt.Printf("%s\n", data[p:pe]) }
goto st22
tr35:
// line 18 "zparse.rl"
{ fmt.Printf("%s\n", data) }
{ fmt.Printf("%s\n", data[p:pe]) }
// line 17 "zparse.rl"
{ fmt.Printf("%s\n", data) }
goto st10
st10:
{ fmt.Printf("%s\n", data[p:pe]) }
goto st22
tr32:
// line 17 "zparse.rl"
{ fmt.Printf("%s\n", data[p:pe]) }
goto st22
st22:
p++
if p == pe { goto _test_eof10 }
if p == pe { goto _test_eof22 }
fallthrough
case 10:
// line 159 "zparse.go"
case 22:
// line 160 "zparse.go"
switch data[p] {
case 9: goto tr19
case 32: goto tr19
case 9: goto tr33
case 32: goto tr33
}
goto tr18
tr19:
goto tr32
tr33:
// line 17 "zparse.rl"
{ fmt.Printf("%s\n", data) }
goto st11
tr22:
{ fmt.Printf("%s\n", data[p:pe]) }
goto st23
tr36:
// line 19 "zparse.rl"
{ fmt.Printf("%s\n", data) }
{ fmt.Printf("%s\n", data[p:pe]) }
// line 17 "zparse.rl"
{ fmt.Printf("%s\n", data) }
goto st11
st11:
{ fmt.Printf("%s\n", data[p:pe]) }
goto st23
st23:
p++
if p == pe { goto _test_eof11 }
if p == pe { goto _test_eof23 }
fallthrough
case 11:
// line 180 "zparse.go"
case 23:
// line 181 "zparse.go"
switch data[p] {
case 9: goto tr19
case 32: goto tr19
case 65: goto tr21
case 78: goto tr21
case 97: goto tr21
case 110: goto tr21
case 9: goto tr33
case 32: goto tr33
case 65: goto tr35
case 78: goto tr35
case 97: goto tr35
case 110: goto tr35
}
if data[p] < 72 {
if data[p] > 57 {
if 67 <= data[p] && data[p] <= 68 { goto tr21 }
if 67 <= data[p] && data[p] <= 68 { goto tr35 }
} else if data[p] >= 48 {
goto tr20
goto tr34
}
} else if data[p] > 73 {
if data[p] > 100 {
if 104 <= data[p] && data[p] <= 105 { goto tr21 }
if 104 <= data[p] && data[p] <= 105 { goto tr35 }
} else if data[p] >= 99 {
goto tr21
goto tr35
}
} else {
goto tr21
goto tr35
}
goto tr18
tr11:
goto tr32
tr15:
// line 18 "zparse.rl"
{ fmt.Printf("%s\n", data) }
goto st12
tr23:
// line 17 "zparse.rl"
{ fmt.Printf("%s\n", data) }
goto st12
tr20:
{ fmt.Printf("%s\n", data[p:pe]) }
goto st24
tr34:
// line 18 "zparse.rl"
{ fmt.Printf("%s\n", data) }
{ fmt.Printf("%s\n", data[p:pe]) }
// line 17 "zparse.rl"
{ fmt.Printf("%s\n", data) }
goto st12
st12:
{ fmt.Printf("%s\n", data[p:pe]) }
goto st24
tr37:
// line 17 "zparse.rl"
{ fmt.Printf("%s\n", data[p:pe]) }
goto st24
st24:
p++
if p == pe { goto _test_eof12 }
if p == pe { goto _test_eof24 }
fallthrough
case 12:
// line 224 "zparse.go"
case 24:
// line 225 "zparse.go"
switch data[p] {
case 9: goto tr22
case 32: goto tr22
case 9: goto tr36
case 32: goto tr36
}
if 48 <= data[p] && data[p] <= 57 { goto tr23 }
goto tr18
tr5:
// line 18 "zparse.rl"
{ fmt.Printf("%s\n", data) }
goto st5
if 48 <= data[p] && data[p] <= 57 { goto tr37 }
goto tr32
st5:
p++
if p == pe { goto _test_eof5 }
fallthrough
case 5:
// line 240 "zparse.go"
switch data[p] {
case 9: goto st1
case 32: goto st1
case 78: goto st6
case 110: goto st6
case 89: goto st6
case 121: goto st6
}
goto st0
st6:
@ -250,10 +246,8 @@ st6:
fallthrough
case 6:
switch data[p] {
case 9: goto st1
case 32: goto st1
case 83: goto st7
case 115: goto st7
case 9: goto st7
case 32: goto st7
}
goto st0
st7:
@ -262,34 +256,240 @@ st7:
fallthrough
case 7:
switch data[p] {
case 9: goto st1
case 32: goto st1
case 75: goto st8
case 107: goto st8
case 9: goto st7
case 32: goto st7
case 65: goto tr20
case 67: goto tr4
case 68: goto tr21
case 72: goto tr6
case 73: goto tr7
case 78: goto tr8
case 97: goto tr20
case 99: goto tr4
case 100: goto tr21
case 104: goto tr6
case 105: goto tr7
case 110: goto tr8
}
if 48 <= data[p] && data[p] <= 57 { goto tr19 }
goto st0
tr19:
// line 18 "zparse.rl"
{ fmt.Printf("%s\n", data[p:pe]) }
goto st8
st8:
p++
if p == pe { goto _test_eof8 }
fallthrough
case 8:
// line 286 "zparse.go"
switch data[p] {
case 9: goto st1
case 32: goto st1
case 69: goto st9
case 101: goto st9
case 9: goto tr22
case 32: goto tr22
}
if 48 <= data[p] && data[p] <= 57 { goto st8 }
goto st0
tr22:
// line 19 "zparse.rl"
{ fmt.Printf("%s\n", data[p:pe]) }
goto st9
st9:
p++
if p == pe { goto _test_eof9 }
fallthrough
case 9:
// line 302 "zparse.go"
switch data[p] {
case 9: goto st9
case 32: goto st9
case 65: goto tr20
case 67: goto tr4
case 68: goto tr21
case 72: goto tr6
case 73: goto tr7
case 78: goto tr8
case 97: goto tr20
case 99: goto tr4
case 100: goto tr21
case 104: goto tr6
case 105: goto tr7
case 110: goto tr8
}
if 48 <= data[p] && data[p] <= 57 { goto tr2 }
goto st0
tr4:
// line 18 "zparse.rl"
{ fmt.Printf("%s\n", data[p:pe]) }
goto st10
st10:
p++
if p == pe { goto _test_eof10 }
fallthrough
case 10:
// line 330 "zparse.go"
switch data[p] {
case 9: goto st1
case 32: goto st1
case 89: goto st3
case 121: goto st3
case 72: goto st6
case 83: goto st6
case 104: goto st6
case 115: goto st6
}
goto st0
tr5:
// line 18 "zparse.rl"
{ fmt.Printf("%s\n", data[p:pe]) }
goto st11
tr21:
// line 18 "zparse.rl"
{ fmt.Printf("%s\n", data[p:pe]) }
// line 17 "zparse.rl"
{ fmt.Printf("%s\n", data[p:pe]) }
goto st11
st11:
p++
if p == pe { goto _test_eof11 }
fallthrough
case 11:
// line 355 "zparse.go"
switch data[p] {
case 9: goto st1
case 32: goto st1
case 78: goto st12
case 110: goto st12
}
goto st0
st12:
p++
if p == pe { goto _test_eof12 }
fallthrough
case 12:
switch data[p] {
case 9: goto st1
case 32: goto st1
case 83: goto st13
case 115: goto st13
}
goto st0
st13:
p++
if p == pe { goto _test_eof13 }
fallthrough
case 13:
switch data[p] {
case 9: goto st1
case 32: goto st1
case 75: goto st14
case 107: goto st14
}
goto st0
st14:
p++
if p == pe { goto _test_eof14 }
fallthrough
case 14:
switch data[p] {
case 9: goto st1
case 32: goto st1
case 69: goto st15
case 101: goto st15
}
goto st0
st15:
p++
if p == pe { goto _test_eof15 }
fallthrough
case 15:
switch data[p] {
case 9: goto st1
case 32: goto st1
case 89: goto st16
case 121: goto st16
}
goto st0
st16:
p++
if p == pe { goto _test_eof16 }
fallthrough
case 16:
switch data[p] {
case 9: goto st4
case 32: goto st4
}
goto st0
tr6:
// line 18 "zparse.rl"
{ fmt.Printf("%s\n", data[p:pe]) }
goto st17
st17:
p++
if p == pe { goto _test_eof17 }
fallthrough
case 17:
// line 430 "zparse.go"
switch data[p] {
case 9: goto st1
case 32: goto st1
case 83: goto st6
case 115: goto st6
}
goto st0
tr7:
// line 18 "zparse.rl"
{ fmt.Printf("%s\n", data[p:pe]) }
goto st18
st18:
p++
if p == pe { goto _test_eof18 }
fallthrough
case 18:
// line 447 "zparse.go"
switch data[p] {
case 9: goto st1
case 32: goto st1
case 78: goto st6
case 110: goto st6
}
goto st0
tr8:
// line 18 "zparse.rl"
{ fmt.Printf("%s\n", data[p:pe]) }
goto st19
st19:
p++
if p == pe { goto _test_eof19 }
fallthrough
case 19:
// line 464 "zparse.go"
switch data[p] {
case 9: goto st1
case 32: goto st1
case 79: goto st20
case 111: goto st20
}
goto st0
st20:
p++
if p == pe { goto _test_eof20 }
fallthrough
case 20:
switch data[p] {
case 9: goto st1
case 32: goto st1
case 78: goto st21
case 110: goto st21
}
goto st0
st21:
p++
if p == pe { goto _test_eof21 }
fallthrough
case 21:
switch data[p] {
case 9: goto st1
case 32: goto st1
case 69: goto st6
case 101: goto st6
}
goto st0
}
@ -298,23 +498,35 @@ case 9:
_test_eof2: cs = 2; goto _test_eof;
_test_eof3: cs = 3; goto _test_eof;
_test_eof4: cs = 4; goto _test_eof;
_test_eof10: cs = 10; goto _test_eof;
_test_eof11: cs = 11; goto _test_eof;
_test_eof12: cs = 12; goto _test_eof;
_test_eof22: cs = 22; goto _test_eof;
_test_eof23: cs = 23; goto _test_eof;
_test_eof24: cs = 24; goto _test_eof;
_test_eof5: cs = 5; goto _test_eof;
_test_eof6: cs = 6; goto _test_eof;
_test_eof7: cs = 7; goto _test_eof;
_test_eof8: cs = 8; goto _test_eof;
_test_eof9: cs = 9; goto _test_eof;
_test_eof10: cs = 10; goto _test_eof;
_test_eof11: cs = 11; goto _test_eof;
_test_eof12: cs = 12; goto _test_eof;
_test_eof13: cs = 13; goto _test_eof;
_test_eof14: cs = 14; goto _test_eof;
_test_eof15: cs = 15; goto _test_eof;
_test_eof16: cs = 16; goto _test_eof;
_test_eof17: cs = 17; goto _test_eof;
_test_eof18: cs = 18; goto _test_eof;
_test_eof19: cs = 19; goto _test_eof;
_test_eof20: cs = 20; goto _test_eof;
_test_eof21: cs = 21; goto _test_eof;
_test_eof: {}
if p == eof {
switch cs {
case 10, 11, 12:
case 22, 23, 24:
// line 17 "zparse.rl"
{ fmt.Printf("%s\n", data) }
{ fmt.Printf("%s\n", data[p:pe]) }
break
// line 318 "zparse.go"
// line 530 "zparse.go"
}
}

View File

@ -14,9 +14,9 @@ func zparse(data string) (res int, err os.Error) {
cs, p, pe, eof := 0, 0, len(data), len(data)
%%{
action out { fmt.Printf("%s\n", data) }
action defTtl { fmt.Printf("%s\n", data) }
action setTtl { fmt.Printf("%s\n", data) }
action out { fmt.Printf("%s\n", data[p:pe]) }
action defTtl { fmt.Printf("%s\n", data[p:pe]) }
action setTtl { fmt.Printf("%s\n", data[p:pe]) }
qtype = ('IN'i|'CS'i|'CH'i|'HS'i|'ANY'i|'NONE'i);
ttl = digit+;