Some tweaks; not sure if this is the way forward

This commit is contained in:
Miek Gieben 2011-07-21 16:43:18 +02:00
parent dcbd332a69
commit 108e795378
3 changed files with 548 additions and 549 deletions

View File

@ -15,6 +15,7 @@ type Zone struct {
} }
func (z *Zone) Push(r RR) { func (z *Zone) Push(r RR) {
println("Pushing", r.String())
z.v.Push(r) z.v.Push(r)
} }
@ -30,9 +31,9 @@ func (z *Zone) Len() int {
return z.v.Len() return z.v.Len()
} }
func (z *Zone) String() string { func (z *Zone) String() (s string) {
for i:=0; i < z.Len(); i++ { for i:=0; i < z.Len(); i++ {
print(z.At(i).String()) s += z.At(i).String()
} }
return "" return
} }

1067
zparse.go

File diff suppressed because it is too large Load Diff

View File

@ -151,6 +151,7 @@ func rdata_rrsig(hdr RR_Header, tok *token) RR {
} }
func set(r RR, z *Zone, tok *token) { func set(r RR, z *Zone, tok *token) {
println("setting",r.String())
z.Push(r) z.Push(r)
tok.reset() tok.reset()
} }
@ -187,8 +188,6 @@ func Zparse(q io.Reader) (z *Zone, err os.Error) {
mark := 0 mark := 0
hdr := new(RR_Header) hdr := new(RR_Header)
tok := newToken() tok := newToken()
var rr RR
rr = rr
%%{ %%{
action mark { mark = p } action mark { mark = p }
@ -221,7 +220,7 @@ func Zparse(q io.Reader) (z *Zone, err os.Error) {
ws = [ \t]+; ws = [ \t]+;
qclass = ('IN'i|'CS'i|'CH'i|'HS'i|'ANY'i|'NONE'i) %qclass; qclass = ('IN'i|'CS'i|'CH'i|'HS'i|'ANY'i|'NONE'i) %qclass;
qname = [a-zA-Z0-9_\-.\+=/]+ %qname; qname = [a-zA-Z0-9_\-.\+=/]+ %qname;
t = [a-zA-Z0-9_\-.:\+=/]+ $1 %0 %text; t = [a-zA-Z0-9_\-.:\+=/]+ $1 %0 >mark %text;
# now if I use this, I get an assertion failure in Ragel ... :-) # now if I use this, I get an assertion failure in Ragel ... :-)
tb = [a-zA-Z0-9_\-.: ]+ $1 %0 %text; tb = [a-zA-Z0-9_\-.: ]+ $1 %0 %text;
n = [0-9]+ $1 %0 %number; n = [0-9]+ $1 %0 %number;
@ -234,15 +233,15 @@ func Zparse(q io.Reader) (z *Zone, err os.Error) {
)?; )?;
main := |* main := |*
lhs 'A'i bl t nl => { rr = rdata_a(*hdr, tok); set(rr, z, tok); }; lhs 'A'i bl t nl => { r := rdata_a(*hdr, tok); set(r, z, tok); };
lhs 'NS'i bl t nl => { rr = rdata_ns(*hdr, tok); set(rr, z, tok); }; lhs 'NS'i bl t nl => { r := rdata_ns(*hdr, tok); set(r, z, tok); };
lhs 'CNAME'i bl t nl => { rr = rdata_cname(*hdr, tok); set(rr, z, tok); }; lhs 'CNAME'i bl t nl => { r := rdata_cname(*hdr, tok); set(r, z, tok); };
lhs 'AAAA'i bl t nl => { rr = rdata_aaaa(*hdr, tok); set(rr, z, tok); }; lhs 'AAAA'i bl t nl => { r := rdata_aaaa(*hdr, tok); set(r, z, tok); };
lhs 'MX'i bl n bl t nl => { rr = rdata_mx(*hdr, tok); set(rr, z, tok); }; lhs 'MX'i bl n bl t nl => { r := rdata_mx(*hdr, tok); set(r, z, tok); };
lhs 'SOA'i bl t bl t bl n bl n bl n bl n bl n nl => { rr = rdata_soa(*hdr, tok); set(rr, z, tok); }; lhs 'SOA'i bl t bl t bl n bl n bl n bl n bl n nl => { r := rdata_soa(*hdr, tok); set(r, z, tok); };
lhs 'DS'i bl n bl n bl n bl t nl => { rr = rdata_ds(*hdr, tok); set(rr, z, tok); }; lhs 'DS'i bl n bl n bl n bl t nl => { r := rdata_ds(*hdr, tok); set(r, z, tok); };
lhs 'DNSKEY'i bl n bl n bl n bl t nl => { rr = rdata_dnskey(*hdr, tok); set(rr, z, tok); }; lhs 'DNSKEY'i bl n bl n bl n bl t nl => { r := rdata_dnskey(*hdr, tok); set(r, z, tok); };
lhs 'RRSIG'i bl n bl n bl n bl n bl n bl n bl n bl t bl t nl => { rr = rdata_rrsig(*hdr, tok); set(rr, z, tok); }; lhs 'RRSIG'i bl n bl n bl n bl n bl n bl n bl n bl t bl t nl => { r := rdata_rrsig(*hdr, tok); set(r, z, tok); };
*|; *|;
write init; write init;