Example #1
0
 def __init__(self, file):
     '''
     Constructor
     '''
     self.file = file
     self.mem = list()
     self.lex = LexicalAnalyzer(file)
     self.parse(self.lex)
Example #2
0
def parse_new_object(queue):

    if len(queue) == 0:
        print("ERROR: Code Not Complete: Expected an Object")
        raise SystemExit
    
    else:
        value = queue[0][1]

        if value == "int":
            queue.pop(0)
            validate(queue, "[")

            exp = parse_expression(queue)
            throw_exception_expression(exp)

            validate(queue, "]")

            n = NewObject1(exp)
            return n

        elif LexicalAnalyzer.is_id(value):
            i = parse_identifier(queue)

            validate(queue, "(")
            validate(queue, ")")

            n = NewObject2(i)
            return n

        else:
            print("ERROR: Code Not Complete: Expected an Object at line", queue[0][0])
            raise SystemExit
Example #3
0
def parse_dot(queue):
    if len(queue) == 0:
        print("ERROR: Code Not Complete: Expected a method call")
        raise SystemExit

    else:
        value = queue[0][1]

        if value == "length":
            queue.pop(0)
            d = Dot1()
            return d

        elif LexicalAnalyzer.is_id(value):
            i = parse_identifier(queue)
            validate(queue, "(")

            exp_one = parse_exp_only_one(queue)
            exp = parse_exp(queue)

            validate(queue, ")")

            d = Dot2(i, exp_one, exp)
            return d

        else:
            print("ERROR: Code Not Complete: Expected a method call at line", queue[0][0])
            raise SystemExit
Example #4
0
 def __init__(self, file):
     '''
     Constructor
     '''
     self.file = file
     self.mem = list()
     self.lex = LexicalAnalyzer(file)
     self.parse(self.lex)
Example #5
0
    def compile_handler(self, event):
        self.text_area_bottom.delete('1.0', END)
        text = self.text_area_top.get('1.0', END)
        lexer = LexicalAnalyzer(text)
        try:
            (t_lexemes, t_idns, t_constants) = lexer.run()
            sAn = SyntaxAnalyzer2(t_lexemes, t_idns, t_constants,
                                  transition_table.transition_table)
            state_table = sAn.run()

            if state_table == True:
                state_table = None

            # text2="".join(tablesToString(t_lexemes,t_idns,t_constants))
            text2 = "".join(
                makeTables(t_lexemes, t_idns, t_constants, state_table))
            self.text_area_bottom.insert(1.0, text2)
        except TranslatorException as ex:
            self.text_area_bottom.insert(
                1.0, ex.__class__.__name__ + "\n" + str(ex))
Example #6
0
def parse_integer_literal(queue):

    if len(queue) == 0:
        print("ERROR: Expected an integer")
        raise SystemExit
    
    token = queue.pop(0)

    if not LexicalAnalyzer.is_integer_literal(token[1]):
        print("ERROR: Not an integer at line", token[0])
        raise SystemExit
    
    return token[1]
    def __init__(self, filename):
        self.filename = filename
        self.p2File = open(self.filename[:-3] + ".p2", "a")
        self.ct = ""
        self.lex = LA.LexicalAnalyzer(filename.encode("utf-8"))

        self.rule_mappings = {
            1: self.program,
            2: self.define,
            3: self.more_defines,
            4: self.stmt_list,
            5: self.stmt,
            6: self.literal,
            7: self.quoted_lit,
            8: self.more_tokens,
            9: self.param_list,
            10: self.else_part,
            11: self.stmt_pair,
            12: self.stmt_pair_body,
            13: self.action,
            14: self.any_other_token
        }
Example #8
0
def parse_identifier(queue):

    if len(queue) == 0:
        print("ERROR: Expected an identifier")
        raise SystemExit
    
    token = queue.pop(0)

    if not LexicalAnalyzer.is_id(token[1]):
        print("Not a correct identifier at line", token[0])
        raise SystemExit
    
    if token[1] == "public" or token[1] == "static" \
            or token[1] == "void" or token[1] == "main" \
            or token[1] == "int" or token[1] == "float" \
            or token[1] == "if" or token[1] == "else" or token[1] == "while" \
            or token[1] == "String" or token[1] == "char" or token[1] == "boolean" \
            or token[1] == "extends" or token[1] == "return" or token[1] == "new" \
            or token[1] == "this" or token[1] == "true" or token[1] == "false" or token[1] == "class":
                print("Using keyword as an identifier at line", token[0])
                raise SystemExit
    
    return token[1]
Example #9
0
                elif transition['nezr'] == self.ERROR:
                    # raise SyntaxException("{} \n state = {}, lexeme_code = {}, lexeme = {}, stack = {}".format(
                    #    transition['error_msg'], self.cur_state, lexeme_code, self.lexemes[self.i].name, self.stack,))
                    raise SyntaxException(transition['error_msg'],
                                          self.line() - 1)

    def exit(self):
        # print("EXIT")
        self.i -= 1
        try:
            state = self.stack.pop()
            self.cur_state = state
        except IndexError as ex:
            pass


if __name__ == "__main__":
    FILE_NAME = 'source.txt'
    file = open(FILE_NAME, 'r')
    input_text = file.read()
    file.close()
    lexer = LexicalAnalyzer(input_text)
    # (t_lexemes,t_idns,t_constants) = lexer.run()
    # text="".join(tablesToString(t_lexemes,t_idns,t_constants))
    # print(text)
    tableMaker = RelationTableMaker(grammar.grammar)
    # relation_table = tableMaker.getRelationTable()
    sAn = SyntaxAnalyzer3(*lexer.run(), tableMaker)
    # sAn.run()
    print(*sAn.run(), sep="\n")
Example #10
0
import LexicalRulesParser
import Thompson
import Subset
import LexicalAnalyzer

rules = LexicalRulesParser.start_parsing('inputs/lexical.txt')

nfas = Thompson.Nfa.compile(rules)

dfas = []

for nfa in nfas:
    dfas.append(Subset.Subset.nfa_to_dfa(nfa))

# for dfa in dfas:
#     print('DFA: {}'.format(dfa.name))
#     for dfaState in dfa.Dstates:
#         print('({})'.format(dfaState.name) if dfaState.is_accept else '{}'.format(dfaState.name))
#         for symb in dfaState.trans:
#             print('{} => {} | '.format(symb, dfaState.trans[symb]), end='')
#         print('\n')
#     print('\n\n')


lexical_analyzer = LexicalAnalyzer.LexicalAnalyzer(dfas, rules['priorities'])

print(lexical_analyzer.parse_code('inputs/program.txt'))
Example #11
0
def parse_expression(queue):
    if len(queue) == 0:
        print("ERROR: Code Not Complete: Expected an expression")
        raise SystemExit
    
    else:
        value = queue[0][1]

        if LexicalAnalyzer.is_integer_literal(value):
            queue.pop(0)
            e_rec = parse_expression_recursion_fix(queue)

            e1 = Expression1(value, e_rec)
            return e1

        elif value == "true":
            queue.pop(0)
            e_rec = parse_expression_recursion_fix(queue)

            e2 = Expression2(e_rec)
            return e2

        elif value == "false":
            queue.pop(0)
            e_rec = parse_expression_recursion_fix(queue)

            e3 = Expression3(e_rec)
            return e3

        elif value == "this":
            queue.pop(0)
            e_rec = parse_expression_recursion_fix(queue)

            e5 = Expression5(e_rec)
            return e5

        elif value == "new":
            queue.pop(0)
            n = parse_new_object(queue)
            e_rec = parse_expression_recursion_fix(queue)

            e6 = Expression6(n, e_rec)
            return e6

        elif value == "!":
            queue.pop(0)
            exp = parse_expression(queue)
            throw_exception_expression(exp)

            e_rec = parse_expression_recursion_fix(queue)

            e7 = Expression7(exp, e_rec)
            return e7

        elif value == "(":
            queue.pop(0)

            exp = parse_expression(queue)
            throw_exception_expression(exp)

            validate(queue, ")")

            e_rec = parse_expression_recursion_fix(queue)

            e8 = Expression8(exp, e_rec)
            return e8

        elif LexicalAnalyzer.is_id(value):
            i = parse_identifier(queue)
            e_rec = parse_expression_recursion_fix(queue)

            e4 = Expression4(i, e_rec)
            return e4

        else:
            e = Epsilon()
            return e
Example #12
0
def parse_statement(queue):

    if len(queue) == 0:
        print("ERROR: Code Not Complete: Expected a Statement")
        raise SystemExit
    else:
        value = queue[0][1]

        if value == "{":
            queue.pop(0)

            st = parse_st(queue)
            validate(queue, "}")
            s = Statement1(st)
            return s

        elif value == "if":
            queue.pop(0)
            validate(queue, "(")

            exp = parse_expression(queue)
            throw_exception_expression(exp)

            validate(queue, ")")

            s = parse_statement(queue)

            el = parse_else(queue)

            s2 = Statement2(exp, s, el)
            return s2

        elif value == "while":
            queue.pop(0)
            validate(queue, "(")

            exp = parse_expression(queue)
            throw_exception_expression(exp)

            validate(queue, ")")

            s = parse_statement(queue)

            s3 = Statement3(exp, s)
            return s3

        elif value == "System.out.println":
            queue.pop(0)

            validate(queue, "(")

            exp = parse_expression(queue)
            throw_exception_expression(exp)

            validate(queue, ")")
            validate(queue, ";")

            s4 = Statement4(exp)
            throw_exception_expression(exp)

            return s4

        elif LexicalAnalyzer.is_id(value):
            i = parse_identifier(queue)
            si = parse_single_or_array(queue)

            s5 = Statement5(i, si)
            return s5

        else:
            e = Epsilon()
            return e
Example #13
0
        print("ERROR: Code Not Complete: expected \"" + expected_value + "\"")
        raise SystemExit
    
    else:
        value = queue.pop(0)

        if value[1] != expected_value:
            print("ERROR: Expected \"" + expected_value + "\" found: \"" + value[1] + "\" at line", value[0])
            raise SystemExit


def check_if_epsilon(queue, expected_value):

    if len(queue) == 0 or queue[0][1] != expected_value:
        return True
    else:
        return False


def throw_exception_expression(expression):

    if type(expression) == Epsilon:
        print("ERROR: Expected an expression")
        raise SystemExit
    
files = LexicalAnalyzer.open_file()
lex = LexicalAnalyzer.tokenize(files[0], files[1])
goal = parse_goal(lex)

print(goal.get_value(), "\nCode Executed Successfully")
Example #14
0
import LexicalAnalyzer

code = open('sample1.scb', 'r')
tokens = LexicalAnalyzer.tokenizer(code.read())

print("Tokens for Sample 1")
for s in tokens:
    print(s + ", ", end="")

code = open('sample2.scb', 'r')
tokens = LexicalAnalyzer.tokenizer(code.read())

print("\n\nTokens for Sample 2")
for s in tokens:
    print(s + ", ", end="")

code = open('sample3.scb', 'r')
tokens = LexicalAnalyzer.tokenizer(code.read())

print("\n\nTokens for Sample 3")
for s in tokens:
    print(s + ", ", end="")
print('\n')
Example #15
0
class Parser(object):
    '''
    classdocs
    '''


    def __init__(self, file):
        '''
        Constructor
        '''
        self.file = file
        self.mem = list()
        self.lex = LexicalAnalyzer(file)
        self.parse(self.lex)
        
    def parse(self, lex):
        lex = self.lex
        Parser.match(self, "main")
        Parser.match(self, "(")
        Parser.match(self, ")")
        l = self.getStatementList()
        s = lex.getToken()
        if s != "$":
            raise ParserException("Garbage")
        self.execute(l)
    
    def getStatementList(self):
        l = []
        s = self.getStatement()
        l.append(s)
        tok = self.lex.getLookAheadToken()
        while tok == ";":
            tok = self.lex.getToken()
            s = self.getStatement()
            l.append(s)
            tok = self.lex.getLookAheadToken()
        return l
    
    def getStatement(self):
        s = self.lex.getLookAheadToken()
        if s == "if":
            stmt = self.getIfStatement()
        elif s == "while":
            stmt = self.getWhileStatement()
        elif s == "display":
            stmt = self.getDisplayStatement()
        else:
            stmt = self.getAssignmentStatement()
        return stmt
    
    def getAssignmentStatement(self): 
        var = self.lex.getToken()
        self.match("<-")
        expr = self.getArithmeticExpression()
        return AssignmentStatement(var, expr)
    
    def getArithmeticExpression(self):
        s = self.lex.getLookAheadToken()
        if self.isValidArithmeticOp(s):
            op = self.lex.getToken()
            op1 = self.getOperand()
            op2 = self.getOperand()
            expr = self.createBinaryExpression(op, op1, op2)
        else: 
            expr = self.getOperand()
            
        return expr
    
    def createBinaryExpression(self, op, op1, op2):
        if op == "+":
            expr = AddExpression(op1, op2)
        elif op == "-":
            expr = SubExpression(op1, op2)
        elif op == "*":
            expr = MulExpression(op1, op2)
        else:
            expr = DivExpression(op1, op2)
        return expr
    
    def getDisplayStatement(self):
        self.match("display")
        self.match("(")
        var = self.getId()
        self.match(")")
        return DisplayStatement(var)
    
    def getId(self):
        s = self.lex.getToken()
        if s == "" or len(s) > 1:
            raise ParserException("id expected, received " + s)
        return Id(s)
    
    def getWhileStatement(self):
        self.match("while")
        expr = self.getBooleanExpression()
        self.match("do")
        l = self.getStatementList()
        self.match("end")
        return WhileStatement(expr, l)
    
    def getBooleanExpression(self):
        s = self.lex.getLookAheadToken()
        if self.isValidBooleanOperator(s):
            op = self.lex.getToken()
            op1 = self.getOperand()
            op2 = self.getOperand()
            return self.createBooleanExpression(op, op1, op2)
    
    def createBooleanExpression(self, op, op1, op2):
        self.op = op
        self.op1 = op1
        self.op2 = op2
        if self.op == "=":
            expr = EQExpression(op1, op2)
        elif op == "/=":
            expr = NEExpression(op1, op2)
        elif op == ">":
            expr = GTExpression(op1, op2)
        elif op == ">=":
            expr = GEExpression(op1, op2)
        elif op == "<":
            expr = LTExpression(self, op1, op2)
        else:
            expr = LEExpression(op1, op2)
        return expr
    
    def getOperand(self):
        s = self.lex.getLookAheadToken()
        if s == "":
            raise ParserException("Operand Expected")
        elif s.isdigit():
            op = self.getLiteralInteger()
        else:
            op = s
        return op
    
    def getLiteralInteger(self):
        s = self.lex.getToken()
        try:
            return int(s)
        except ValueError:
            raise ParserException("literal integer expected")
        
    def getIfStatement(self):
        self.match("if")
        expr = self.getBooleanExpression()
        self.match("then")
        l1 = self.getStatementList()
        self.match("else")
        l2 = self.getStatementList()
        self.match("end")
        return IfStatement(expr, l1, l2)
    
    def isValidBooleanOperator(self, s):
        self.s = s
        if s == "=" or s == "/=" or s == ">" or s == "<" or s == ">=" or s == "<=":
            return True
        else:
            return False
         
    def isValidArithmeticOp(self, s):
        self.s = s
        if s == "+" or s == "-" or s =="*" or s == "/":
            return True
        else: 
            return False
    
    def match(self, expected):
        self.expected = expected
        self.tok = self.lex.getToken()
        if expected != self.tok:
            raise ParserException("token equals " + self.tok + " and " +self.expected + " expected")
    
    def execute(self, statementList):
        self.statementList = statementList
        i = 0
        while statementList != () :
            s = statementList.pop(i)
            i += 1
            s.execute(self)
            
    def store(self, ch, value):
        ch1 = str(ch)
        ch1.strip()
        self.mem.insert((ord(ch1)-ord('a')), value)
    
    def fetch(self, ch):
        ch1 = str(ch)
        ch1.strip()
        print(ch1)
        value = self.mem.pop(ord(ch1)-ord('a'))
        self.mem.insert(ord(ch1)-ord('a'))
        return value
Example #16
0
import sys
import LexicalAnalyzer
from LEXER_DATA import regexes

#COMMAND LINE RUN STATEMENT: python src/main.py testcases/test2.txt error.txt tokens.txt category.txt

codeFileName = sys.argv[1]
errorFileName = sys.argv[2]
tokFileName = sys.argv[3]
catFileName = sys.argv[4]

lerror = 0
LexicalAnalyzer.controlLexer(tokFileName, errorFileName, codeFileName,
                             catFileName, lerror)
Example #17
0
                if self.lexeme(31):
                    self.i += 1
                    return True
                else:
                    raise SyntaxException("Відсутня закриваюча дужка )",
                                          self.line())
            else:
                raise SyntaxException("Відсутній вираз", self.line())
        return False

    def idn(self):
        if self.lexeme(100) or self.lexeme(102):
            self.i += 1
            return True
        return False


if __name__ == "__main__":

    FILE_NAME = 'source.txt'
    file = open(FILE_NAME, 'r')
    input_text = file.read()
    file.close()
    lexer = LexicalAnalyzer(input_text)
    # (t_lexemes,t_idns,t_constants) = lexer.run()
    # text="".join(tablesToString(t_lexemes,t_idns,t_constants))
    # print(text)

    sAn = SyntaxAnalyzer(*lexer.run())
    print(sAn.run())
Example #18
0
def main():
    file_name = "test1.jl"

    lex = LexicalAnalyzer.LexicalAnalyzer("test1.jl")
def saveFiles():

    global ptStack
    fname = filename.split('.', 1)[0]
    with open(fname + '.err', "a") as myfile:
        for i in errorList:

            myfile.write(i + '\n')

    ptStack = ptStack[::-1]
    for i in ptStack:
        a = 'Exiting: ' + i
        pt.append(a)

    f = open(fname + '.tr', "w+")

    for i in pt:
        f.write(i + '\n')

    f.close()


filename = 'test11.pj'
tokenList, errorList, symbolTable = la.lexMain(filename)
print('ErrorList: ', errorList)
start()
saveFiles()

#Wla.saveFiles(tokenList,errorList, symbolTable)
Example #20
0
class Parser(object):
    '''
    classdocs
    '''
    def __init__(self, file):
        '''
        Constructor
        '''
        self.file = file
        self.mem = list()
        self.lex = LexicalAnalyzer(file)
        self.parse(self.lex)

    def parse(self, lex):
        lex = self.lex
        Parser.match(self, "main")
        Parser.match(self, "(")
        Parser.match(self, ")")
        l = self.getStatementList()
        s = lex.getToken()
        if s != "$":
            raise ParserException("Garbage")
        self.execute(l)

    def getStatementList(self):
        l = []
        s = self.getStatement()
        l.append(s)
        tok = self.lex.getLookAheadToken()
        while tok == ";":
            tok = self.lex.getToken()
            s = self.getStatement()
            l.append(s)
            tok = self.lex.getLookAheadToken()
        return l

    def getStatement(self):
        s = self.lex.getLookAheadToken()
        if s == "if":
            stmt = self.getIfStatement()
        elif s == "while":
            stmt = self.getWhileStatement()
        elif s == "display":
            stmt = self.getDisplayStatement()
        else:
            stmt = self.getAssignmentStatement()
        return stmt

    def getAssignmentStatement(self):
        var = self.lex.getToken()
        self.match("<-")
        expr = self.getArithmeticExpression()
        return AssignmentStatement(var, expr)

    def getArithmeticExpression(self):
        s = self.lex.getLookAheadToken()
        if self.isValidArithmeticOp(s):
            op = self.lex.getToken()
            op1 = self.getOperand()
            op2 = self.getOperand()
            expr = self.createBinaryExpression(op, op1, op2)
        else:
            expr = self.getOperand()

        return expr

    def createBinaryExpression(self, op, op1, op2):
        if op == "+":
            expr = AddExpression(op1, op2)
        elif op == "-":
            expr = SubExpression(op1, op2)
        elif op == "*":
            expr = MulExpression(op1, op2)
        else:
            expr = DivExpression(op1, op2)
        return expr

    def getDisplayStatement(self):
        self.match("display")
        self.match("(")
        var = self.getId()
        self.match(")")
        return DisplayStatement(var)

    def getId(self):
        s = self.lex.getToken()
        if s == "" or len(s) > 1:
            raise ParserException("id expected, received " + s)
        return Id(s)

    def getWhileStatement(self):
        self.match("while")
        expr = self.getBooleanExpression()
        self.match("do")
        l = self.getStatementList()
        self.match("end")
        return WhileStatement(expr, l)

    def getBooleanExpression(self):
        s = self.lex.getLookAheadToken()
        if self.isValidBooleanOperator(s):
            op = self.lex.getToken()
            op1 = self.getOperand()
            op2 = self.getOperand()
            return self.createBooleanExpression(op, op1, op2)

    def createBooleanExpression(self, op, op1, op2):
        self.op = op
        self.op1 = op1
        self.op2 = op2
        if self.op == "=":
            expr = EQExpression(op1, op2)
        elif op == "/=":
            expr = NEExpression(op1, op2)
        elif op == ">":
            expr = GTExpression(op1, op2)
        elif op == ">=":
            expr = GEExpression(op1, op2)
        elif op == "<":
            expr = LTExpression(self, op1, op2)
        else:
            expr = LEExpression(op1, op2)
        return expr

    def getOperand(self):
        s = self.lex.getLookAheadToken()
        if s == "":
            raise ParserException("Operand Expected")
        elif s.isdigit():
            op = self.getLiteralInteger()
        else:
            op = s
        return op

    def getLiteralInteger(self):
        s = self.lex.getToken()
        try:
            return int(s)
        except ValueError:
            raise ParserException("literal integer expected")

    def getIfStatement(self):
        self.match("if")
        expr = self.getBooleanExpression()
        self.match("then")
        l1 = self.getStatementList()
        self.match("else")
        l2 = self.getStatementList()
        self.match("end")
        return IfStatement(expr, l1, l2)

    def isValidBooleanOperator(self, s):
        self.s = s
        if s == "=" or s == "/=" or s == ">" or s == "<" or s == ">=" or s == "<=":
            return True
        else:
            return False

    def isValidArithmeticOp(self, s):
        self.s = s
        if s == "+" or s == "-" or s == "*" or s == "/":
            return True
        else:
            return False

    def match(self, expected):
        self.expected = expected
        self.tok = self.lex.getToken()
        if expected != self.tok:
            raise ParserException("token equals " + self.tok + " and " +
                                  self.expected + " expected")

    def execute(self, statementList):
        self.statementList = statementList
        i = 0
        while statementList != ():
            s = statementList.pop(i)
            i += 1
            s.execute(self)

    def store(self, ch, value):
        ch1 = str(ch)
        ch1.strip()
        self.mem.insert((ord(ch1) - ord('a')), value)

    def fetch(self, ch):
        ch1 = str(ch)
        ch1.strip()
        print(ch1)
        value = self.mem.pop(ord(ch1) - ord('a'))
        self.mem.insert(ord(ch1) - ord('a'))
        return value
Example #21
0
import LexicalAnalyzer

while True:
    text = input('Icarus >>> ')
    result, error = LexicalAnalyzer.run('<stdin>', text)

    if error: print(error.as_string())
    else: print(result)
Example #22
0
def Main ():
	tokens = LA.LexicalAnalyzer ()
	#LA.PrintTokens (tokens)
	SemanticTable = SA.SyntacticAnalyzer(tokens)
Example #23
0
import LexicalAnalyzer
import SyntaxAnalyzer

code = open('sample1.scb', 'r')
tokens = LexicalAnalyzer.tokenizer(code.read())
print("Syntax Error for Sample 1")
SyntaxAnalyzer.parser(tokens)
print('\n')

#code = open('sample2.scb', 'r')
#tokens = LexicalAnalyzer.tokenizer(code.read())
#print("Syntax Error for Sample 2")
#SyntaxAnalyzer.parser(tokens)
#print('\n')

#code = open('sample3.scb', 'r')
#tokens = LexicalAnalyzer.tokenizer(code.read())
#print("Syntax Error for Sample 3")
#SyntaxAnalyzer.parser(tokens)
#print('\n')

#code = open('sample4.scb', 'r')
#tokens = LexicalAnalyzer.tokenizer(code.read())
#print("Syntax Error for Sample 4")
#SyntaxAnalyzer.parser(tokens)
#print('\n')

#code = open('sample5.scb', 'r')
#tokens = LexicalAnalyzer.tokenizer(code.read())
#print("Syntax Error for Sample 5")
#SyntaxAnalyzer.parser(tokens)
Example #24
0
def getIndex(ch):
    if LexicalAnalyzer.isValidIdentifier(ch):
        return (ord(ch) - 65)
    else:
        raise ValueError(str(ch) + ' is not a valid identifier')
Example #25
0
def lexicalAnalysis():
    global tab1, tab2, tab3, text2

    tab1.destroy()
    tab1 = Frame(tabControl)
    tabControl.add(tab1, text='Таблица лексем')
    tab2.destroy()
    tab2 = Frame(tabControl)
    tabControl.add(tab2, text='Таблица переменных')
    tab3.destroy()
    tab3 = Frame(tabControl)
    tabControl.add(tab3, text='Таблица констант')

    code = codeArea.get("0.0", END)
    lex_list, var_list, con_list = LexicalAnalyzer.analyze(code)

    try:
        SyntaxAnalyzer.analyze(lex_list, var_list, con_list)
        poliz_list = PolishCodeGenerator.generatePOLIZ(lex_list, var_list, con_list)
        for element in poliz_list:
            print(element[1] + " ", end="")
        Output_text = PolishCodeInterpreter.run(poliz_list, lex_list, var_list, con_list)
    except Exception as e:
        Output_text = "Line " + str(e)
        raise e

    text2.config(state=NORMAL)
    text2.delete(1.0, END)
    text2.insert("1.0", Output_text)
    text2.config(state=DISABLED)

    table = Treeview(tab1, selectmode="browse")
    table["columns"] = ("one", "two", "three")
    table.column("#0", width=0, minwidth=0, stretch=NO)
    table.column("one", width=40, minwidth=40)
    table.column("two", width=30, minwidth=30)
    table.column("three", width=10, minwidth=10)
    table.heading("one", text="Line", anchor=W)
    table.heading("two", text="Type", anchor=W)
    table.heading("three", text="Table number", anchor=W)

    for row in lex_list:
        table.insert('', END, values=tuple(row))

    scrolltable = Scrollbar(tab1, command=table.yview)
    table.configure(yscrollcommand=scrolltable.set)
    scrolltable.pack(side=RIGHT, fill=Y)
    table.pack(expand=YES, fill=BOTH)

    table = Treeview(tab2, selectmode="browse")
    table["columns"] = ("one", "two", "three")
    table.column("#0", width=0, minwidth=0, stretch=NO)
    table.column("one", width=40, minwidth=40)
    table.column("two", width=30, minwidth=30)
    table.column("three", width=10, minwidth=10)
    table.heading("one", text="Index", anchor=W)
    table.heading("two", text="Name", anchor=W)
    table.heading("three", text="Value", anchor=W)

    for row in var_list:
        table.insert('', END, values=(var_list.index(row), row[0], row[1]))

    scrolltable = Scrollbar(tab2, command=table.yview)
    table.configure(yscrollcommand=scrolltable.set)
    scrolltable.pack(side=RIGHT, fill=Y)
    table.pack(expand=YES, fill=BOTH)

    table = Treeview(tab3, selectmode="browse")
    table["columns"] = ("one", "two")
    table.column("#0", width=0, minwidth=0, stretch=NO)
    table.column("one", width=40, minwidth=40)
    table.column("two", width=30, minwidth=30)
    table.heading("one", text="Index", anchor=W)
    table.heading("two", text="Value", anchor=W)

    for row in con_list:
        table.insert('', END, values=(con_list.index(row), row))

    scrolltable = Scrollbar(tab3, command=table.yview)
    table.configure(yscrollcommand=scrolltable.set)
    scrolltable.pack(side=RIGHT, fill=Y)
    table.pack(expand=YES, fill=BOTH)
Example #26
0
 def __init__(self, ch):
     if LexicalAnalyzer.isValidIdentifier(ch):
         self.ch = ch
     else:
         raise ValueError("character is not a valid identifier")
Example #27
0
   while k<=n do
   begin
      f3:=f1+f2;
      f1:=f2;
      f2:=f3;
      k:=k+1
   end;
   write (n, f1)
end.
'''

code1 = '''
program exemplo5(input, output,);
'''

tokens = LexicalAnalyzer.get_tokens(code)

program = SyntaxTree.program


def check(object, token):
    try:
        if object.name == token[0]:
            return 1
        elif object.name == '<id>':
            return 2
        elif object.name == '<lid>':
            return 3
        elif object.name == '<dv>':
            return 4
        elif object.name == '[pdv]':