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

Reply via email to