Paul McGuire wrote: > For instance, Seo Sanghyeon (I believe the same one now working on > IronPython) uses the following technique in the EBNF parser/"compiler" > that he contributed to the pyparsing examples directory: > > # list of all the grammar variable names > all_names = ''' > integer > meta_identifier > terminal_string > ... > '''.split() > > # parse actions follow > def do_integer(str, loc, toks): > return int(toks[0])
FWIW, I find that my actions never use anything but the token list, so to avoid writing a bunch of functions like the one above, I typically write:: class ParseAction(object): def __init__(self, func): self.func = func def __call__(self, string, index, tokens): return self.func(*tokens) ... # parse an integer integer.addParseAction(ParseAction(int)) ... # parse a relation object, passing appropriate strings # (or parsed objects) to the constructor relation.setParseAction(ParseAction(Relation)) I guess the integer/int and relation/Relation is a little redundant, but it's never bothered me too much. STeVe -- http://mail.python.org/mailman/listinfo/python-list