def on_pubmsg(self, c, e): self.print_log(e) try: user = e.source().nick msg = e.arguments()[0] if user not in self.user_list : msg = e.arguments()[0] pattern = re.search(c.get_nickname()+"\s*:\s*(.*)", msg) if not pattern: return cmd = pattern.group(1).strip() print cmd if cmd == 'BASIC': self.user_list.append(user) self.notice('enter BASIC mode') return except Exception as e: print >> sys.stderr, "Unexpected error:", e.message return self.msg_buffer = '' try: if msg.strip().upper() == 'SYSTEM': self.user_list.remove(user) self.notice('bye > ' + user) return sys.stdout = self # 標準出力をフックしてIRCにnoticeで発言 prog = basparse.parse(msg.strip()+'\n') if not prog: return keys = list(prog) if keys[0] > 0: self.interpreter.add_statements(prog) else: stat = prog[keys[0]] if stat[0] == 'RUN': try: self.interpreter.run() except RuntimeError: pass elif stat[0] == 'LIST': self.interpreter.list(stat[1]) elif stat[0] == 'BLANK': self.interpreter.del_line(stat[1]) elif stat[0] == 'NEW': self.interpreter.new() elif stat[0] == 'RENUM': self.interpreter.renum(stat[1]) elif stat[0] == 'SAVE': self.interpreter.save(stat[1]) elif stat[0] == 'LOAD': self.interpreter.load(stat[1], stat[2]) if self.msg_buffer: self.notice(self.msg_buffer.replace('\n', '\r\nNOTICE ' + self.channel + ' :').encode("utf-8")) print >> sys.stderr, self.msg_buffer except Exception as e: print >> sys.stderr, "Unexpected error:", e.message finally: sys.stdout = sys.__stdout__ self.msg_buffer = ''
def plying(self, port=0, method=0): # 0: line by line 1: Lex-Yacc method print "thread plying starts.." self.clear_status() self.timer_event() if method == 0: for cmd in self.cmds: if self.ThreadOfBatch == None or not self.ThreadOfBatch.is_alive(): self.ThreadOfBatch = Thread(target=self.batching, args=(port, cmd, "AUTO")) self.ThreadOfBatch.start() time.sleep(0.1) self.ThreadOfBatch.join(1) # 1) join() only waits for a thread to finish. it won't make executing any thread. # 2) join(timieout) will stop blocking after timeout, but will not terminate the thread if it is still running. if self.ThreadOfBatch.is_alive(): self.batch_is_timeout = 1 print 'batching ended' else: print "batching is in use" if self.get_check_status() != 0: #self.check_status = 2 break #time.sleep(0.01) else: import basparse import basinterp prog = basparse.parse(open(self.cmds).read()) if not prog: self.set_console_text("*.BAS script basparse import error.") self.set_check_status(1) else: try: basinterp.BasicInterpreter(prog, self).run() except RuntimeError: self.set_console_text("*.BAS script basinterp error.") self.set_check_status(1) CERT_VALUE = datetime.datetime.now() CERT_VALUE = CERT_VALUE.strftime("%Y-%m-%d %H:%M:%S") if self.get_check_status() == 0: filename = "PASS" else: filename = "FAIL" filename = str(self.serial_number) + filename + str(CERT_VALUE) filename = re.sub(r'[^a-zA-Z0-9]', '', filename) start, end = self.TextBufferOfLog.get_bounds() console_log = self.TextBufferOfLog.get_text(start, end) if self.save_to_log('./certification/', filename, console_log) == 1: self.set_console_text("LOG failed.") self.set_check_status_led(1) else: self.set_check_status_led() self.batching_result = {} #gtk.threads_enter() gobject.idle_add(self.EntryOfSerialNumber.set_text, '') gobject.idle_add(self.EntryOfSerialNumber.grab_focus) #gtk.threads_leave() print "thread plying stopped"
def load(self, filename, option): relative_path = self._normalize_file_path(filename) if not relative_path: print('ILLEGAL FILE NAME: \"%s\"' % filename) return if not os.path.exists(relative_path): print('NO SUCH FILE: \"%s\"' % filename) return data = open(relative_path).read() self.prog = basparse.parse(data) print("FILE LOADED: \"%s\"" % filename) if option and (option.upper() == 'R'): print(" AND RUN...") self.run()
import sys sys.path.insert(0, "../..") if sys.version_info[0] >= 3: raw_input = input import basiclex import basparse import basinterp # If a filename has been specified, we try to run it. # If a runtime error occurs, we bail out and enter # interactive mode below if len(sys.argv) == 2: data = open(sys.argv[1]).read() prog = basparse.parse(data) if not prog: raise SystemExit b = basinterp.BasicInterpreter(prog) try: b.run() raise SystemExit except RuntimeError: pass else: b = basinterp.BasicInterpreter({}) # Interactive mode. This incrementally adds/deletes statements # from the program stored in the BasicInterpreter object. In # addition, special commands 'NEW','LIST',and 'RUN' are added.
raw_input = input import logging logging.basicConfig(level=logging.INFO, filename="parselog.txt", filemode="w") log = logging.getLogger() import basiclex import basparse import basinterp # If a filename has been specified, we try to run it. # If a runtime error occurs, we bail out and enter # interactive mode below if len(sys.argv) == 2: data = open(sys.argv[1]).read() prog = basparse.parse(data, debug=log) if not prog: raise SystemExit b = basinterp.BasicInterpreter(prog) try: b.run() raise SystemExit except RuntimeError: pass else: b = basinterp.BasicInterpreter({}) # Interactive mode. This incrementally adds/deletes statements # from the program stored in the BasicInterpreter object. In # addition, special commands 'NEW','LIST',and 'RUN' are added.
# An implementation of Dartmouth BASIC (1964) # import sys import basiclex import basparse import basinterp data = open('program').read() prog = basparse.parse(data) if not prog: raise SystemExit b = basinterp.BasicInterpreter(prog) try: b.run() print(b.vars) #print(b.lists) #print(b.tables) except RuntimeError: pass
level=logging.INFO, filename="parselog.txt", filemode="w" ) log = logging.getLogger() import basiclex import basparse import basinterp # If a filename has been specified, we try to run it. # If a runtime error occurs, we bail out and enter # interactive mode below if len(sys.argv) == 2: data = open(sys.argv[1]).read() prog = basparse.parse(data, debug=log) if not prog: raise SystemExit b = basinterp.BasicInterpreter(prog) try: b.run() raise SystemExit except RuntimeError: pass else: b = basinterp.BasicInterpreter({}) # Interactive mode. This incrementally adds/deletes statements # from the program stored in the BasicInterpreter object. In # addition, special commands 'NEW','LIST',and 'RUN' are added.
def on_pubmsg(self, c, e): self.print_log(e) try: user = e.source().nick msg = e.arguments()[0] if user not in self.user_list: msg = e.arguments()[0] pattern = re.search(c.get_nickname() + "\s*:\s*(.*)", msg) if not pattern: return cmd = pattern.group(1).strip() print cmd if cmd == 'BASIC': self.user_list.append(user) self.notice('enter BASIC mode') return except Exception as e: print >> sys.stderr, "Unexpected error:", e.message return self.msg_buffer = '' try: if msg.strip().upper() == 'SYSTEM': self.user_list.remove(user) self.notice('bye > ' + user) return sys.stdout = self # 標準出力をフックしてIRCにnoticeで発言 prog = basparse.parse(msg.strip() + '\n') if not prog: return keys = list(prog) if keys[0] > 0: self.interpreter.add_statements(prog) else: stat = prog[keys[0]] if stat[0] == 'RUN': try: self.interpreter.run() except RuntimeError: pass elif stat[0] == 'LIST': self.interpreter.list(stat[1]) elif stat[0] == 'BLANK': self.interpreter.del_line(stat[1]) elif stat[0] == 'NEW': self.interpreter.new() elif stat[0] == 'RENUM': self.interpreter.renum(stat[1]) elif stat[0] == 'SAVE': self.interpreter.save(stat[1]) elif stat[0] == 'LOAD': self.interpreter.load(stat[1], stat[2]) if self.msg_buffer: self.notice( self.msg_buffer.replace( '\n', '\r\nNOTICE ' + self.channel + ' :').encode("utf-8")) print >> sys.stderr, self.msg_buffer except Exception as e: print >> sys.stderr, "Unexpected error:", e.message finally: sys.stdout = sys.__stdout__ self.msg_buffer = ''