Esempio n. 1
0
	def dispatch_conditions (cls):
		condition = None
		if len (cls.__activated_conditions) > 0:
			condition = cls.__activated_conditions.pop ()
		while condition != None:
			if condition.handler != 0:
				code_line = CodeLine ()
				code_line.concept_id = condition.handler
				code_line.prev_line_id = -1
				code_line.priority = condition.priority
				CodeStack.push (code_line)
			condition = None
			if len (cls.__activated_conditions) > 0:
				condition = cls.__activated_conditions.pop ()
Esempio n. 2
0
 def dispatch_conditions(cls):
     condition = None
     if len(cls.__activated_conditions) > 0:
         condition = cls.__activated_conditions.pop()
     while condition != None:
         if condition.handler != 0:
             code_line = CodeLine()
             code_line.concept_id = condition.handler
             code_line.prev_line_id = -1
             code_line.priority = condition.priority
             CodeStack.push(code_line)
         condition = None
         if len(cls.__activated_conditions) > 0:
             condition = cls.__activated_conditions.pop()
Esempio n. 3
0
	def prepare_next_line (cls):
		if cls.__current_line < len (cls.__procedures[cls.__current_procedure]):
			CodeStack.push (cls.__procedures[cls.__current_procedure][cls.__current_line])
			cls.__current_line += 1
			return True
		else:
			if len (cls.__current_procedures) > 0:
				cls.__current_procedure = cls.__current_procedures.pop ()
			else:
				cls.__current_procedure = None
			if len (cls.__current_lines) > 0:
				cls.__current_line = cls.__current_lines.pop ()
			else:
				cls.__current_line = None
			if cls.__current_procedure == None:
				CodeStack.inside_procedure = False
			return False
Esempio n. 4
0
 def prepare_next_line(cls):
     if cls.__current_line < len(cls.__procedures[cls.__current_procedure]):
         CodeStack.push(
             cls.__procedures[cls.__current_procedure][cls.__current_line])
         cls.__current_line += 1
         return True
     else:
         if len(cls.__current_procedures) > 0:
             cls.__current_procedure = cls.__current_procedures.pop()
         else:
             cls.__current_procedure = None
         if len(cls.__current_lines) > 0:
             cls.__current_line = cls.__current_lines.pop()
         else:
             cls.__current_line = None
         if cls.__current_procedure == None:
             CodeStack.inside_procedure = False
         return False
Esempio n. 5
0
	def dispatch_triggers (cls):
		triggers = []
		trigger = None
		if len (cls.__activated_triggers) > 0:
			trigger = cls.__triggers[cls.__activated_triggers.pop ()]
		while trigger != None:
			#trigger.active = False
			if trigger.handler != "":
				triggers.append (trigger)
			trigger = None
			if len (cls.__activated_triggers) > 0:
				trigger = cls.__triggers[cls.__activated_triggers.pop ()]
		for trigger in triggers:
			code_line = CodeLine ()
			code_line.field_id = trigger.object_key
			code_line.concept_id = trigger.handler
			code_line.prev_line_id = -1
			code_line.priority = trigger.priority
			CodeStack.push (code_line)
Esempio n. 6
0
 def dispatch_triggers(cls):
     triggers = []
     trigger = None
     if len(cls.__activated_triggers) > 0:
         trigger = cls.__triggers[cls.__activated_triggers.pop()]
     while trigger != None:
         #trigger.active = False
         if trigger.handler != "":
             triggers.append(trigger)
         trigger = None
         if len(cls.__activated_triggers) > 0:
             trigger = cls.__triggers[cls.__activated_triggers.pop()]
     for trigger in triggers:
         code_line = CodeLine()
         code_line.field_id = trigger.object_key
         code_line.concept_id = trigger.handler
         code_line.prev_line_id = -1
         code_line.priority = trigger.priority
         CodeStack.push(code_line)
Esempio n. 7
0
def main (single_run, use_ctl, use_dbg, text):
    exit = False
    db = MySQLdb.connect (host="localhost", user="******", passwd="qslbase", db="qslbase", charset="utf8")
    cursor = db.cursor ()
    result = ""
    sys.setdefaultencoding ("utf8")
    SyntaxAnalyzer (cursor)
    semantic_analyzer = SemanticAnalyzer (cursor)
    CodeProvider (cursor)
    CodeStack ()
    ErrorHelper (cursor)
    MemoryProvider ()
    ContextProvider ()
    TriggerProvider ()
    ConditionProvider ()
    DebuggerProvider (use_dbg)

    if single_run == False:
        stdin = os.open ("/tmp/qslime-std-in", os.O_RDONLY | os.O_NONBLOCK)
        stdout = os.open ("/tmp/qslime-std-out", os.O_WRONLY)
    if use_ctl == True:
        ctlout = os.open ("/tmp/qslime-ctl-out", os.O_WRONLY)
        ctlin = open ("/tmp/qslime-ctl-in", "r")
    if use_dbg == True:
        dbgout = os.open ("/tmp/qslime-dbg-out", os.O_WRONLY)
        dbgin = open ("/tmp/qslime-dbg-in", "r")
        DebuggerProvider.dbgin = dbgin
        DebuggerProvider.dbgout = dbgout
    if use_ctl == True:
        text = ctlin.readline ()
        if text != "":
            if SyntaxAnalyzer.analize (text):
                #PropositionTree.print_tree (SyntaxAnalyzer.proposition_tree)
                if semantic_analyzer.analize (SyntaxAnalyzer.proposition_tree, None):
                    #semantic_analyzer.proposition_tree.print_tree ()
                    result += semantic_analyzer.result
                    os.write (ctlout, 'OK.\n')
                else:
                    os.write (ctlout, semantic_analyzer.get_error_text () + '\n')
            else:
                os.write (ctlout, semantic_analyzer.get_error_text () + '\n')
    else:
        if text != "":
            #print text
            if DebuggerProvider.use == True:
                DebuggerProvider.reset ()
                DebuggerProvider.set_single_code_line (text)
                DebuggerProvider.build_debug_data ()
                DebuggerProvider.send_data ()
                DebuggerProvider.receive_data ()
            if SyntaxAnalyzer.analize (text):
                #SyntaxAnalyzer.proposition_tree.print_tree (SyntaxAnalyzer.proposition_tree)
                if semantic_analyzer.analize (SyntaxAnalyzer.proposition_tree, None):
                    #semantic_analyzer.proposition_tree.print_tree ()
                    result += semantic_analyzer.result
                else:
                    return semantic_analyzer.get_error_text ()
            else:
                return SyntaxAnalyzer.get_error_text ()

    while (exit != True):
        code_line = CodeStack.pop ()
        while (code_line != None):
            if code_line.text != "":
                #print code_line.text
                if DebuggerProvider.use == True:
                    if code_line.concept_id != 0 and code_line.id != 0:
                        DebuggerProvider.set_procedure_id (code_line.concept_id)
                        DebuggerProvider.set_line_id (code_line.id)
                    else:
                        DebuggerProvider.set_single_code_line (code_line.text)
                    DebuggerProvider.build_debug_data ()
                    DebuggerProvider.send_data ()
                    DebuggerProvider.receive_data ()
                analized = True
                if code_line.tree == None:
                    analized = SyntaxAnalyzer.analize (code_line.text)
                    tree = SyntaxAnalyzer.proposition_tree
                else:
                    tree = code_line.tree
                if analized:
                    #tree.print_tree (tree)
                    if semantic_analyzer.analize (tree, code_line):
                        #tree.print_tree (tree)
                        if code_line.tree != None:
                            if code_line.tree.is_totally_parsed == False:
                                code_line.tree = semantic_analyzer.proposition_tree
                                code_line.tree.is_totally_parsed = True
                        result += semantic_analyzer.result
                    else:
                        return semantic_analyzer.get_error_text ()
                else:
                    return SyntaxAnalyzer.get_error_text ()
                if CodeStack.is_empty () == True:
                    if CodeStack.inside_procedure == False:
                        if CodeProvider.is_priorities_assigned () == False:
                            CodeProvider.assign_priorities ()
                        TriggerProvider.dispatch_triggers ()
                        ConditionProvider.dispatch_conditions ()
                        CodeStack.sort ()
            else:
                if code_line.prev_line_id == -1 and code_line.concept_id != 0:
                    CodeProvider.execute_procedure (code_line.concept_id)
            code_line = CodeStack.pop ()

            if result != "" and single_run == False:
                #print result
                os.write (stdout, result)
                result = ""
                exit = True

        if single_run == True:
            return result

    os.close (stdin)
    os.close (stdout)
    os.close (ctlin)
    os.close (ctlout)
    os.close (dbgin)
    os.close (dbgout)