Before I reinvent the wheel, I'm going to post the code. Feel free to give any advice, and think that I'm new to python, it's only 1 month since I began programming in python "seriously" (up to that moment, I wrote just a few log-text parsing system administration scripts to speed up some old bash scripts).
First of all, my currently test file: KILLOBJECT(coin);\ REM Wait 5 seconds;\ IF FLAG(5);\ SLEEP(5);\ PLAYERSAY(test,5);\ SETMAP(10,10,top,5);\ IF FLAG(6);\ NOP();\ SLEEP(7);\ ELIF FLAG(7);\ NOP();\ SLEEP(9);\ ELSE;\ SLEEP(999);\ ENDIF;\ IF FLAG_VALUE(7,1);\ CHANGESCREEN(start,10,100);\ PLAYERFACING(0);\ ELSE;\ PLAYERFACING(1);\ ENDIF;\ ENDIF;\ SLEEP(12);\ SLEEP(11) And the parse code: if __name__ == "__main__": """ To test: create an example file test.par with language commands. """ numline = 0 try: fp = open("test.par") except: print "Error, cant open test.par" import sys sys.exit(0) while 1: # Read line, ignore comments and stop with EOF numline += 1 line = fp.readline() if line == '': break line = line.strip() startline = numline # Join lines splitted with \ in the text file while line.endswith("\\"): next_line = fp.readline() if next_line == '': break if next_line.strip() == '': continue numline += 1 next_line = next_line.strip() line = line[:-1] + next_line code = ExecParser_Parse( "exec", line, startline, "test.par" ) for i in 0, 1: ExecParser_PrintCode( code, i ) print ExecParser_Exec( 1, code, 0, debug=1 ) And this is the output: > Compiled opcodes: < ExecType CodeLevel Opcode ---------------------------------------------------------- 1 0 KILLOBJECT ['coin'] 0 0 REM ['Wait 5 seconds'] 1 0 IF FLAG [5] 1 1 SLEEP [5] 1 1 PLAYERSAY ['test', 5] 1 1 SETMAP [10, 10, 'top', 5] 1 1 IF FLAG [6] 1 2 NOP 1 2 SLEEP [7] 1 1 ELIF FLAG [7] 1 2 NOP 1 2 SLEEP [9] 1 1 ELSE 1 2 SLEEP [999] 1 1 ENDIF 1 1 IF FLAG_VALUE [7, 1] 1 2 CHANGESCREEN ['start', 10, 100] 1 2 PLAYERFACING [0] 1 1 ELSE 1 2 PLAYERFACING [1] 1 1 ENDIF 1 0 ENDIF 1 0 SLEEP [12] 1 0 SLEEP [11] 1 0 END > Formatted code (parsing opcodes): < Main: KILLOBJECT( coin ) REM Wait 5 seconds IF FLAG( 5 ) SLEEP( 5 ) PLAYERSAY( test, 5 ) SETMAP( 10, 10, top, 5 ) IF FLAG( 6 ) NOP SLEEP( 7 ) ELIF FLAG( 7 ) NOP SLEEP( 9 ) ELSE SLEEP( 999 ) ENDIF IF FLAG_VALUE( 7, 1 ) CHANGESCREEN( start, 10, 100 ) PLAYERFACING( 0 ) ELSE PLAYERFACING( 1 ) ENDIF ENDIF SLEEP( 12 ) SLEEP( 11 ) END Executing KILLOBJECT ['coin'] Checking IF FLAG [5] (returned TRUE) Executing SLEEP [5] Executing PLAYERSAY ['test', 5] Executing SETMAP [10, 10, 'top', 5] Checking IF FLAG [6] (returned FALSE) Checking ELIF FLAG [7] (returned FALSE) Entering ELSE Executing SLEEP [999] Checking IF FLAG_VALUE [7, 1] (returned FALSE) Entering ELSE Executing PLAYERFACING [1] Executing SLEEP [12] Executing SLEEP [11] Executing END -- http://mail.python.org/mailman/listinfo/python-list