Antoon Pardon wrote: > On 5/09/19 15:30, Peter Otten wrote:
>> Can you provide some context? > > Sure I am researching the possibility of writing an easy to use > lexing/parsing tool. The idea is to write your lexer/parser as > follows: > > class Calculator(metaclass = ...): > def __init__(self): > self.names = set() > self.table = {} > > @token(r'\d+') > def NUMBER(self, st): > return int(st) > > @token(r'\w+') > def VAR(self, st): > self.names.add(st) > return st > > @production(r"VAR '=' NUMBER") > def assign(self, prd): > name = prd[0] > val = prd[1] > if name in self.names: > self.table[name] = value > else: > raise CalcError("variable (%s) not available" % name) > > calc = Calculator() > calc("a = 7") > > So the token en production decorators register a regex/prodcution with > a specific method to be called in specific circumstances when parsing > a string. > > So I need the lexing and parsing algorithms available to this class, > either by adding methods to the class or by making a subclass of the > class where they are implemented. Ok, that looks like a nice interface to me, and I don't expect the metaclass dance to make it harder to implement than necessary ;) -- https://mail.python.org/mailman/listinfo/python-list