예제 #1
0

precedence = {
    '||': 5,
    '&&': 5,
    '>': 6,
    '>=': 6,
    '<=': 6,
    '<': 6,
    '==': 6,
    '!=': 6,
    '+': 7,
    '-': 7,
    '*': 8,
    '/': 8,
    'UMINUS': 9
}
tokens = list(Lexer('1+-10*123').lex())
precs = {'UMINUS': ['E', '-', 'E'], 'POSITIVE': ['E', '+', 'E']}
# for t in tokens:
#     print(t)
# print(sm.productions())
# parser = Parser(productions, terminal, nonterminal)
parser = Parser(sm.productions,
                sm.terminal,
                sm.nonterminal,
                precedence=precedence,
                precs=precs)
parser.generate()
parser.parse(tokens, sm.sdmap)
print(calls)
예제 #2
0
        return left - right
    if op.kind == '*':
        return left * right
    if op.kind == '/':
        return left / right


@sm.syntaxmap(['E', 'T'], [1])
@sm.syntaxmap(['T', 'F'], [1])
def texp(val):
    return val


@sm.syntaxmap(['F', '(', 'E', ')'], [2])
def lpexp(val):
    return val


@sm.syntaxmap(['F', 'num'], [1])
def numexp(t):  # t is a token
    return t.val


tokens = list(Lexer('1+10*123').lex())
# for t in tokens:
#     print(t)
# print(sm.productions())
# parser = Parser(productions, terminal, nonterminal)
parser = Parser(sm.productions, sm.terminal, sm.nonterminal)
parser.generate(printInfo=True)
parser.parse(tokens, sm.sdmap)