>>> from test_ import process_file

>>> process_file('arch/zx48k/doloop1.bas')
doloop1.bas:2: warning: Infinite empty loop
>>> process_file('arch/zx48k/dountil1.bas')
dountil1.bas:2: warning: Condition is always False
dountil1.bas:2: warning: Empty loop
>>> process_file('arch/zx48k/doloop2.bas')
doloop2.bas:4: warning: Using default implicit type 'ubyte' for 'a'
doloop2.bas:5: warning: Condition is always True
doloop2.bas:8: warning: Condition is always True
doloop2.bas:12: warning: Condition is always False
doloop2.bas:4: warning: Variable 'a' is never used
>>> process_file('arch/zx48k/dowhile1.bas')
dowhile1.bas:1: warning: Condition is always True
dowhile1.bas:1: warning: Empty loop
>>> process_file('arch/zx48k/fornextopt.bas')
fornextopt.bas:4: warning: FOR start value is greater than end. This FOR loop is useless
>>> process_file('arch/zx48k/fornextopt2.bas')
fornextopt2.bas:4: warning: FOR start value is lower than end. This FOR loop is useless
>>> process_file('arch/zx48k/forempty.bas')
forempty.bas:4: warning: STEP value is 0 and FOR might loop forever

# Test parsing error improvements
>>> process_file('arch/zx48k/for_err.bas')
for_err.bas:3: error: FOR without NEXT
>>> process_file('arch/zx48k/while_err.bas')
while_err.bas:3: error: WHILE loop not closed
>>> process_file('arch/zx48k/do_err.bas')
do_err.bas:3: error: DO loop not closed
