import operator, string, Symbol, Word
class Rule:
def __init__(self, rawRule):
self._parse(rawRule)
def __str__(self):
return "%s -> %s"%(self.left, self.right)
def __repr__(self):
return "Rule('%s')"%str(self)
def _parse(self, rawRule):
try:
rawLeft, rawRight = map(str.strip,
rawRule.split("->"))
if not rawLeft:
raise ValueError("Empty left side")
self.left = symbol.NonTerminal(rawLeft)
self.right = word.Word(rawRight)
except ValueError, msg:
raise ValueError(
"Syntaxfehler in %s: %s"%(rawRule, msg))
def getLeft(self):
return self.left
def getRight(self):
return self.right