Exemplo n.º 1
0
def p_for(p):
    """forLoopInstruction : FOR ID '=' array instruction"""
    p[0] = For(Variable(
        p[2],
        line=p.lineno if type(p.lineno) is int else p.lexer.lineno,
        column=scanner.find_column(file_content, p)),
               p[4],
               p[5],
               line=p.lineno if type(p.lineno) is int else p.lexer.lineno,
               column=scanner.find_column(file_content, p))
Exemplo n.º 2
0
def p_if(p):
    """conditionInstruction : IF '(' expression ')' instruction ELSE instruction
    | IF '(' expression ')' instruction"""
    if len(p) == 6:
        p[0] = If(p[3], p[5],
                  p.lineno if type(p.lineno) is int else p.lexer.lineno,
                  scanner.find_column(file_content, p))
    else:
        p[0] = Else(p[3], p[5], p[7],
                    p.lineno if type(p.lineno) is int else p.lexer.lineno,
                    scanner.find_column(file_content, p))
Exemplo n.º 3
0
def p_reference(p):
    """reference : variable '[' expression ']'
    | variable '[' expression ',' expression ']'"""
    if len(p) == 5:
        p[0] = Reference(p[1], [p[3]],
                         p.lineno if type(p.lineno) is int else p.lexer.lineno,
                         scanner.find_column(file_content, p))
    else:
        p[0] = Reference(p[1], [p[3], p[5]],
                         p.lineno if type(p.lineno) is int else p.lexer.lineno,
                         scanner.find_column(file_content, p))
Exemplo n.º 4
0
def p_unaryExpression(p):
    """unaryExpression : '-' expression
    | expression TRANSPOSITION """
    if (p[2] == '\''):
        p[0] = UnaryExpression(
            p[2], p[1], p.lineno if type(p.lineno) is int else p.lexer.lineno,
            scanner.find_column(file_content, p))
    else:
        p[0] = UnaryExpression(
            p[1], p[2], p.lineno if type(p.lineno) is int else p.lexer.lineno,
            scanner.find_column(file_content, p))
Exemplo n.º 5
0
def p_matrix(p):
    """matrix : '[' rows ']'
    | EYE '(' expression ')'
    | ZEROS '(' expression ')'
    | ONES '(' expression ')'"""
    if p[1] == '[':
        p[0] = Matrix(p[2],
                      p.lineno if type(p.lineno) is int else p.lexer.lineno,
                      scanner.find_column(file_content, p))
    else:
        p[0] = Matrix((p[1], p[3]),
                      p.lineno if type(p.lineno) is int else p.lexer.lineno,
                      scanner.find_column(file_content, p))
Exemplo n.º 6
0
def p_arrayType(p):
    """array : '[' row ']'
    | expression ':' expression"""
    if len(p) == 2:
        p[0] = p[1]
    elif p[2] == ':':
        p[0] = Array.fromRange(
            p[1], p[3], p.lineno if type(p.lineno) is int else p.lexer.lineno,
            scanner.find_column(file_content, p))
    else:
        p[0] = Array.fromList(
            p[2], p.lineno if type(p.lineno) is int else p.lexer.lineno,
            scanner.find_column(file_content, p))
Exemplo n.º 7
0
def p_error(p):
    if p:
        print("Syntax error at line {0}, column {1}: LexToken({2}, '{3}')".
              format(p.lineno if type(p.lineno) is int else p.lexer.lineno,
                     scanner.find_column(file_content, p), p.type, p.value))
    else:
        print("Unexpected end of input")
Exemplo n.º 8
0
def p_error(p):
    if p:
        if p.type != 'SEMICOLON':
            print("Syntax error at line {0}, column {1}: LexToken({2}, '{3}')".
                  format(p.lineno, scanner.find_column(p), p.type, p.value))
        parser.errok()
    else:
        print("Unexpected end of input")
Exemplo n.º 9
0
def p_error(p):
    p.lexer.encountered_error = True
    if p:
        print("Syntax error at line {0}, column {1}: LexToken({2}, '{3}')"
              .format(p.lineno, scanner.find_column(p.lexer.lexdata, p),
                      p.type, p.value))
    else:
        print("Unexpected end of input")
Exemplo n.º 10
0
def p_instructions(p):
    """instructions : instruction instructions 
    | instruction """
    if len(p) == 2:
        p[0] = Block([p[1]],
                     p.lineno if type(p.lineno) is int else p.lexer.lineno,
                     scanner.find_column(file_content, p))
    else:
        p[0] = p[2]
        p[2].body = [p[1]] + p[2].body
Exemplo n.º 11
0
def p_int(p):
    """number : INT """
    p[0] = IntNum(p[1], p.lineno if type(p.lineno) is int else p.lexer.lineno,
                  scanner.find_column(file_content, p))
Exemplo n.º 12
0
def p_float(p):
    """number : FLOAT"""
    p[0] = FloatNum(p[1],
                    p.lineno if type(p.lineno) is int else p.lexer.lineno,
                    scanner.find_column(file_content, p))
Exemplo n.º 13
0
def p_string(p):
    """string : STRING"""
    p[0] = String(p[1], p.lineno if type(p.lineno) is int else p.lexer.lineno,
                  scanner.find_column(file_content, p))
Exemplo n.º 14
0
def p_jump(p):
    """jump : CONTINUE
    | BREAK"""
    p[0] = Jump(p[1], p.lineno if type(p.lineno) is int else p.lexer.lineno,
                scanner.find_column(file_content, p))
Exemplo n.º 15
0
def p_variable(p):
    """variable : ID"""
    p[0] = Variable(p[1],
                    p.lineno if type(p.lineno) is int else p.lexer.lineno,
                    scanner.find_column(file_content, p))
Exemplo n.º 16
0
def p_binaryExpression(p):
    """binaryExpression : expression binaryOperator expression"""
    p[0] = BinaryExpression(
        p[2], p[1], p[3],
        p.lineno if type(p.lineno) is int else p.lexer.lineno,
        scanner.find_column(file_content, p))
Exemplo n.º 17
0
def p_while(p):
    """whileLoopInstruction : WHILE '(' expression ')' instruction"""
    p[0] = While(p[3], p[5],
                 p.lineno if type(p.lineno) is int else p.lexer.lineno,
                 scanner.find_column(file_content, p))
Exemplo n.º 18
0
import sys
import scanner

if __name__ == '__main__':

    try:
        filename = sys.argv[1] if len(sys.argv) > 1 else "example.txt"
        file = open(filename, "r")
    except IOError:
        print("Cannot open {0} file".format(filename))
        sys.exit(0)

    text = file.read()
    lexer = scanner.lexer
    lexer.input(text)  # Give the lexer some input

    # Tokenize
    while True:
        tok = lexer.token()
        if not tok:
            break  # No more input
        column = scanner.find_column(tok)
        print("\033[1;40;40m(%d,%d): %s(%s)" %
              (tok.lineno, column, tok.type, tok.value))
Exemplo n.º 19
0
def p_returnStatement(p):
    """returnStatement : RETURN expression """
    p[0] = Return(p[2], p.lineno if type(p.lineno) is int else p.lexer.lineno,
                  scanner.find_column(file_content, p))
Exemplo n.º 20
0
import sys
# import ply.lex as lex
import scanner  # scanner.py is a file you create, (it is not an external library)

sys.path.append('..')

if __name__ == '__main__':

    try:
        filename = sys.argv[1] if len(sys.argv) > 1 else "example.txt"
        file = open(filename, "r")
    except IOError:
        print("Cannot open {0} file".format(filename))
        sys.exit(0)

    text = file.read()
    lexer = scanner.lexer
    lexer.input(text)  # Give the lexer some input

    # Tokenize
    while True:
        tok = lexer.token()
        if not tok:
            break    # No more input
        column = scanner.find_column(text, tok)
        print("(%d,%d): %s(%s)" % (tok.lineno, column, tok.type, tok.value))
Exemplo n.º 21
0
def p_printInstruction(p):
    """printInstruction : PRINT valuesToPrint """
    p[0] = Print(p[2], p.lineno if type(p.lineno) is int else p.lexer.lineno,
                 scanner.find_column(file_content, p))