todo_cmd : KW_TODO atline op_todo_while { push_blockcommand("TODO"); } when_unit op_always_command END_TODO { int blk; blk=get_sio_ids("TODO"); set_cmdlineno($2); pop_blockcommand("TODO"); $$=new_todo_cmd(chk_expr($3),$5,$6,blk); } ; op_todo_while : {$$=NULL;} | WHILE fgl_expr_c {$$=$2; } ; todo_done_cmd : KW_DONE { if (!isin_command("TODO")) { $$=NULL; a4gl_yyerror("You cannot use a DONE command outside of a TODO"); } else { $$=new_done_cmd(); } } ; op_always_command : {$$=0;} | KW_ALWAYS { lastlineno=yylineno;} commands_as_list { $$=$3; } ; /* ================================= todo.rule ============================= */