Beispiel #1
0
        # of same precedence
        right_side = context.expression(self.lbp)
        return left + right_side

class Substraction(Token):
    lbp = 10  # Same precedence as addition

    def led(self, left, context):
        return left - context.expression(self.lbp)

    def nud(self, context):
        """When a '-' is present on the left of an expression."""
        # This means that we are returning the opposite of the next expression
        return - context.expression(self.lbp)

class Multiplication(Token):
    lbp = 20  # Higher precedence than addition/substraction

    def led(self, left, context):
        return left * context.expression(self.lbp)


lexer = Lexer(with_parens=True)
lexer.register_token(Integer, re.compile(r'\d+'))
lexer.register_token(Addition, re.compile(r'\+'))
lexer.register_token(Substraction, re.compile(r'-'))
lexer.register_token(Multiplication, re.compile(r'\*'))

def parse(text):
    return lexer.parse(text)
Beispiel #2
0
from tdparser import Lexer, Parser, Token, ParserError
from tdparser.topdown import EndToken

__all__ = ['parse_expression', 'parse_expressions']


def escape_string(text):
    return '"%s"' % text.replace('\\', '\\\\').replace('"', '\\"')


def unescape_string(text):
    assert text[0] == text[-1] == '"'
    return text[1:-1].replace('\\"', '"').replace('\\\\', '\\')


lexer = Lexer()


class Key(Token):
    regexp = r'[A-Za-z_][A-Za-z0-9_]*'

    def nud(self, context):
        return self


class Number(Token):
    regexp = r'-?\d+'
    type = 'int'

    def __init__(self, text):
        Token.__init__(self, text)