
cmd_file :
	  ( { cmd_linei } "\n" )* End
	;

cmd_line :
	  cmd_linei End
	;

cmd_linei :
	  command ( ";" { command } )*
	;

command :
	  READ read_cmd
	| WRITE write_cmd
	| ERASE erase_cmd
	| PROGRAM program_cmd
	| VERIFY verify_cmd
	| QUIT quit_cmd
	| RESET reset_cmd
	| SCODES scodes_cmd
	| WCODES wcodes_cmd
	| TDEBUG debug_cmd
	| SERIAL serial_cmd
	| COMMENT
	| SCOPE scope_cmd
	| SET set_cmd
	| VERSN version_cmd
	| SOURCE source_cmd
	| RUN run_cmd
	| TCPU cpu_cmd
	| SEND send_cmd
	| SENDE1 send_cmd
	| SENDE2 send_cmd
	| DTR dtr_cmd
	;

read_cmd :
	  ( address_expression { TO openfile } )
	| SP
	| STACK
	;

write_cmd :
	  address_expression ( integer )
	| FROM filename
	;

erase_cmd :
	  { address_expression }
	;

program_cmd :
	  { address_expression } FROM filename
	;

verify_cmd :
	  FROM filename
	;

quit_cmd :
	 
	;

reset_cmd :
	 
	;

scodes_cmd :
	  SEND scodes_send_
	| SET scodes_set_
	| SHOW scodes_show_
	| PUSH scodes_push_
	| TRY scodes_try_
	;

scodes_send_ :
	  FROM openfile
	| AS scode_spec
	| integer
	| BLANK
	;

scodes_set_ :
	  FROM openfile
	| integer AS scode_spec
	;

scodes_show_ :
	  FROM openfile
	| integer
	| ALL
	;

scodes_push_ :
	  FROM openfile
	| integer
	| ALL
	;

scodes_try_ :
	  ( integer | BLANK )
	| ALL
	| FROM openfile
	;

wcodes_cmd :
	  { FROM openfile | BLANK }
	;

serial_cmd :
	  STATUS
	| TDEBUG ( ON | OFF )
	| PORT { filename }
	| BAUDRATE integer
	| READ integer
	;

debug_cmd :
	  ON
	| OFF
	| SERIAL ( ON | OFF )
	| MONITOR ( ON | OFF )
	| FILEINFO
	| ALL ( ON | OFF )
	;

scope_cmd :
	  ON
	;

set_cmd :
	 
	;

version_cmd :
	 
	;

source_cmd :
	  openfile
	;

run_cmd :
	  integer { integer { integer { integer } } }
	;

cpu_cmd :
	  { cpu_part }
	;

cpu_part :
	  ( GP32 | AB32 | JB8 )
	;

send_cmd :
	  ( integer )+
	;

dtr_cmd :
	  ON
	| OFF
	;

address_expression :
	  integer { ( PLUS | COLON ) integer }
	;

integer :
	  INT
	| MINT
	| MOTINT
	| CINT
	;

opt_address_expression :
	 
	| address_expression
	;

opinteger :
	 
	| integer
	;

scode_spec :
	  ( integer )+
	;

filename :
	  STR
	;

openfile :
	  filename
	;
