diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2013-01-29 09:20:32 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2013-01-29 09:20:32 +0000 |
| commit | 05cb74d14aef10c86038c516791ca2692ca6e801 (patch) | |
| tree | f590f0ea1a96e2077ac16a67318a8d9ab97de9a9 /src/runtime/python/pgf/expr.py | |
| parent | b524c5d8b50b38c8157d95534cbffa04643220ce (diff) | |
the Python binding is in pure C again
Diffstat (limited to 'src/runtime/python/pgf/expr.py')
| -rw-r--r-- | src/runtime/python/pgf/expr.py | 169 |
1 files changed, 0 insertions, 169 deletions
diff --git a/src/runtime/python/pgf/expr.py b/src/runtime/python/pgf/expr.py deleted file mode 100644 index 83cccd39f..000000000 --- a/src/runtime/python/pgf/expr.py +++ /dev/null @@ -1,169 +0,0 @@ -import pgf.binding -import StringIO - -class App: - """An application of a function to an argument""" - - def __init__(self, fun, arg): - self.fun = fun - self.arg = arg - - def showExpr(self, prec): - s = self.fun.showExpr(3) + " " + self.arg.showExpr(4) - if prec > 3: - s = "(" + s + ")" - return s - - def __str__(self): - return self.showExpr(0) - -class Lit: - """A literal value""" - - def __init__(self, value): - self.value = value - - def showExpr(self, prec): - if isinstance(self.value, str): - return '"' + self.value + '"' - else: - return str(self.value) - - def __str__(self): - return self.showExpr(0) - -class Meta: - """A meta variable""" - - def __init__(self, metaid): - self.metaid = metaid - - def showExpr(self, prec): - return "?" - - def __str__(self): - return self.showExpr(0) - -class Fun: - """A function name""" - - def __init__(self, name): - self.name = name - - def showExpr(self, prec): - return self.name - - def __str__(self): - return self.showExpr(0) - -class __ExprParser: - # token types - TOKEN_UNKNOWN = 0 - TOKEN_LPARENT = 1 - TOKEN_RPARENT = 2 - TOKEN_QUESTION = 3 - TOKEN_IDENT = 4 - TOKEN_STRING = 5 - TOKEN_INT = 6 - TOKEN_FLOAT = 7 - TOKEN_EOF = 8 - - def __init__(self, fh): - self.ch = ' ' - self.fh = fh - self.token = self.TOKEN_UNKNOWN - self.token_value = "" - self.readToken() - - def readToken(self): - while self.ch.isspace(): - self.ch = self.fh.read(1); - - self.token_value = "" - - if self.ch == '(': - self.ch = self.fh.read(1); - self.token = self.TOKEN_LPARENT - elif self.ch == ')': - self.ch = self.fh.read(1); - self.token = self.TOKEN_RPARENT - elif self.ch == '?': - self.ch = self.fh.read(1); - self.token = self.TOKEN_QUESTION - elif (self.ch.isalpha() or self.ch == '_'): - self.token = self.TOKEN_IDENT - while (self.ch.isalnum() or self.ch == '_' or self.ch == "'"): - self.token_value = self.token_value + self.ch - self.ch = self.fh.read(1) - elif self.ch == '"': - self.ch = self.fh.read(1) - self.token = self.TOKEN_STRING - while self.ch != '"': - if self.ch == '': - raise pgf.ParseError("Missing quotation mark") - self.token_value = self.token_value + self.ch - self.ch = self.fh.read(1) - self.ch = self.fh.read(1) - elif self.ch.isdigit(): - self.token = self.TOKEN_INT - while self.ch.isdigit(): - self.token_value = self.token_value + self.ch - self.ch = self.fh.read(1) - - if self.ch == '.': - self.token = self.TOKEN_FLOAT - - self.token_value = self.token_value + self.ch - self.ch = self.fh.read(1) - - while self.ch.isdigit(): - self.token_value = self.token_value + self.ch - self.ch = self.fh.read(1) - - elif self.ch == '': - self.token = self.TOKEN_EOF - else: - self.token = self.TOKEN_UNKNOWN - - def parseTerm(self): - if self.token == self.TOKEN_IDENT: - e = Fun(self.token_value) - self.readToken() - return e - elif self.token == self.TOKEN_LPARENT: - self.readToken() - e = self.parseExpr() - if self.token == self.TOKEN_RPARENT: - self.readToken() - return e; - else: - raise pgf.ParseError("Missing right parenthesis") - elif self.token == self.TOKEN_QUESTION: - e = Meta(0) - self.readToken() - return e - elif self.token == self.TOKEN_STRING: - e = Lit(self.token_value) - self.readToken() - return e - elif self.token == self.TOKEN_INT: - e = Lit(int(self.token_value)) - self.readToken() - return e - elif self.token == self.TOKEN_FLOAT: - e = Lit(float(self.token_value)) - self.readToken() - return e - else: - raise pgf.ParseError("Unknown token") - - def parseExpr(self): - e = self.parseTerm() - while (self.token != self.TOKEN_EOF and - self.token != self.TOKEN_RPARENT): - e = App(e, self.parseTerm()) - return e - -def readExpr_py(str): - parser = __ExprParser(StringIO.StringIO(str)) - return parser.parseExpr() |
