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) {
println("Pushing", r.String())
z.v.Push(r)
}
@ -30,9 +31,9 @@ func (z *Zone) Len() int {
return z.v.Len()
}
func (z *Zone) String() string {
func (z *Zone) String() (s string) {
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) {
println("setting",r.String())
z.Push(r)
tok.reset()
}
@ -187,8 +188,6 @@ func Zparse(q io.Reader) (z *Zone, err os.Error) {
mark := 0
hdr := new(RR_Header)
tok := newToken()
var rr RR
rr = rr
%%{
action mark { mark = p }
@ -221,7 +220,7 @@ func Zparse(q io.Reader) (z *Zone, err os.Error) {
ws = [ \t]+;
qclass = ('IN'i|'CS'i|'CH'i|'HS'i|'ANY'i|'NONE'i) %qclass;
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 ... :-)
tb = [a-zA-Z0-9_\-.: ]+ $1 %0 %text;
n = [0-9]+ $1 %0 %number;
@ -234,15 +233,15 @@ func Zparse(q io.Reader) (z *Zone, err os.Error) {
)?;
main := |*
lhs 'A'i bl t nl => { rr = rdata_a(*hdr, tok); set(rr, z, tok); };
lhs 'NS'i bl t nl => { rr = rdata_ns(*hdr, tok); set(rr, z, tok); };
lhs 'CNAME'i bl t nl => { rr = rdata_cname(*hdr, tok); set(rr, z, tok); };
lhs 'AAAA'i bl t nl => { rr = rdata_aaaa(*hdr, tok); set(rr, z, tok); };
lhs 'MX'i bl n bl t nl => { rr = rdata_mx(*hdr, tok); set(rr, 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 'DS'i bl n bl n bl n bl t nl => { rr = rdata_ds(*hdr, tok); set(rr, z, tok); };
lhs 'DNSKEY'i bl n bl n bl n bl t nl => { rr = rdata_dnskey(*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 => { rr = rdata_rrsig(*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 => { r := rdata_ns(*hdr, tok); set(r, z, tok); };
lhs 'CNAME'i bl t nl => { r := rdata_cname(*hdr, tok); set(r, 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 => { 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 => { r := rdata_soa(*hdr, tok); set(r, 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 => { 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 => { r := rdata_rrsig(*hdr, tok); set(r, z, tok); };
*|;
write init;