On 06/28/2011 05:53 PM, Stefan Certic wrote:
Hi Guys,
Does anyone have a sample grammar for pharsing named.conf into a data
structure? Perl or PHP are preffered, but anything would be fine just to get a
clear picture about grammar and logical blocks.
The only think I ever wrote was a quick python hack that used a big
regexp and an "eat" block function. Maybe it'll be of some interest, but
beware - regexp engines are not parsers, as jwz once famously pointed
out: "You have a problem, and you decide to solve it with regexps. Now
you have two problems." ;o)
Anyway, break the regexp up and it's fairly obvious what it's doing. You
can get better results with a proper state-machine based parser.
#!/usr/bin/python
import re
import sys
import pprint
token_re =
re.compile(r'/\*.*\*/|//[^\n]*\n|#[^\n]*\n|;|{|}|\d+\.\d+\.\d+\.\d+|[-a-zA-Z0-9]+|"[^"]+"')
def eat(toklist):
all = []
v = []
while toklist:
t = toklist.pop(0)
if t=='{':
inner = eat(toklist)
v.append(inner)
elif t=='}' and toklist and toklist[0]==';':
break
elif t==';':
all.append(v)
v = []
else:
v.append(t)
return all
data = sys.stdin.read()
tokens = token_re.findall(data)
pprint.pprint(
eat(tokens)
)
_______________________________________________
Please visit https://lists.isc.org/mailman/listinfo/bind-users to unsubscribe
from this list
bind-users mailing list
bind-users@lists.isc.org
https://lists.isc.org/mailman/listinfo/bind-users