$$#include "addrmodes.h" $$#include "parse-fsm.h" $$#include "parse-action.h" $trace pl_trace $action pl_action $prefix parseline $anyof string_delim !"#$%&'*+,-./:=?@\\^_`|~ $anyof whitespace \ \t\n\r\f $anyof opchar +-*/%&|^~<>! $state $tran ".if"->dot_if $tran ".elif"->dot_elif $tran ".else"->dot_else $tran ".endif"->dot_endif $tran $lambda->$exit ?false_if $tran !assignment->trailing_comment do_assignment $tran ".include"->dot_include $tran ".list"->dot_list $tran !label set_label $tran !loclabel set_loclabel $tran $lambda $state $tran ".byte"->assemble_data set_data_size(1) $tran ".word"->assemble_data set_data_size(2) $tran ".space"->assemble_space $tran ".rbyte"->assemble_repeat set_data_size(1) $tran ".rword"->assemble_repeat set_data_size(2) $tran ".ascii"->assemble_ascii $tran ".ascic"->assemble_ascic $tran ".asciz"->assemble_asciz $tran ".sbase"->set_sbase $tran $symbol->instruction ?check_opcode($arg) $tran $lambda->trailing_comment $state instruction $tran $lambda->opd_none ?am_ok(2,AM_IMPLIED,AM_STK) $tran $lambda->opd_block ?am_ok(1,AM_BLOCK) $tran '#'->opd_immediate ?am_ok(1,AM_IMM) $tran '('->opd_lparen ?am_ok(6,AM_ABS_IND,AM_DIR_IND,AM_DIR_IND_INX,AM_STK_REL_IND_INX,AM_ABS_INX_IND,AM_DIR_INX_IND) $tran $symbol->trailing_comment ?am_acc_check($arg) $tran !expression->opd_expression ?am_ok(8,AM_ABS,AM_DIRECT,AM_DIR_INX_X,AM_DIR_INX_Y,AM_ABS_INX_X,AM_ABS_INX_Y,AM_PCREL,AM_STK_REL) $state opd_none $tran $lambda->trailing_comment am_do_noopd $state opd_expression $tran ',' ?am_ok(5,AM_STK_REL,AM_ABS_INX_X,AM_DIR_INX_X,AM_ABS_INX_Y,AM_DIR_INX_Y) $tran $lambda->trailing_comment am_do_expr $state $tran 's'->opd_stk_rel ?am_ok(1,AM_STK_REL) $tran 'S'->opd_stk_rel ?am_ok(1,AM_STK_REL) $tran 'x'->opd_expr_x ?am_ok(2,AM_ABS_INX_X,AM_DIR_INX_X) $tran 'X'->opd_expr_x ?am_ok(2,AM_ABS_INX_X,AM_DIR_INX_X) $tran 'y'->opd_expr_y ?am_ok(2,AM_ABS_INX_Y,AM_DIR_INX_Y) $tran 'Y'->opd_expr_y ?am_ok(2,AM_ABS_INX_Y,AM_DIR_INX_Y) $state opd_stk_rel $tran $lambda->trailing_comment am_do_stk_rel $state opd_expr_x $tran $lambda->trailing_comment am_do_expr_x $state opd_expr_y $tran $lambda->trailing_comment am_do_expr_y $state opd_immediate $tran !expression->trailing_comment am_do_imm $state opd_lparen $tran !expression $state $tran ')'->opd_paren_expr ?am_ok(3,AM_ABS_IND,AM_DIR_IND,AM_DIR_IND_INX) $tran ','->opd_lparen_expr_comma ?am_ok(3,AM_STK_REL_IND_INX,AM_ABS_INX_IND,AM_DIR_INX_IND) $state opd_paren_expr $tran ',' ?am_ok(1,AM_DIR_IND_INX) $tran $lambda->trailing_comment am_do_paren_expr $state $tran 'y'->trailing_comment am_do_paren_expr_y $tran 'Y'->trailing_comment am_do_paren_expr_y $state opd_lparen_expr_comma $tran 's'->opd_lparen_expr_comma_s ?am_ok(1,AM_STK_REL_IND_INX) $tran 'S'->opd_lparen_expr_comma_s ?am_ok(1,AM_STK_REL_IND_INX) $tran 'x'->opd_lparen_expr_comma_x ?am_ok(2,AM_DIR_IND,AM_DIR_IND_INX) $tran 'X'->opd_lparen_expr_comma_x ?am_ok(2,AM_DIR_IND,AM_DIR_IND_INX) $state opd_lparen_expr_comma_s $tran ')' $state $tran ',' $state $tran 'y'->trailing_comment am_do_paren_s_expr_y $tran 'Y'->trailing_comment am_do_paren_s_expr_y $state opd_lparen_expr_comma_x $tran ')'->trailing_comment am_do_paren_x_expr $state opd_block $tran $lambda->$fail am_do_block $state assemble_data $tran !expression assemble_data_expression $state $tran ','->assemble_data $tran $lambda->trailing_comment $state assemble_space $tran !expression->trailing_comment ?assemble_space_expression $state assemble_repeat $tran !expression ?assemble_repeat_count $state $tran ',' $state $tran !expression->trailing_comment assemble_repeat_value $state assemble_ascii $tran !string->trailing_comment assemble_ascii $state assemble_ascic $tran !string->trailing_comment assemble_ascic $state assemble_asciz $tran !string->trailing_comment assemble_asciz $state dot_include $tran !string->trailing_comment push_include $state set_sbase $tran !expression->trailing_comment set_sbase $state dot_list $tran "on"->dot_list set_listing(1) $tran "off"->dot_list set_listing(0) $tran "push"->dot_list push_listing $tran "pop"->dot_list pop_listing $tran $lambda->trailing_comment $state dot_if $tran !expression->trailing_comment do_if $state dot_elif $tran !expression->trailing_comment do_elif $state dot_else $tran $lambda->trailing_comment do_else $state dot_endif $tran $lambda->trailing_comment do_endif $state trailing_comment $tran ';'->$exit $tran $eos->$exit $state label $tran $symbol save_label_symbol($arg) $state $tran ':'->$exit $state loclabel $tran $digit locsym_set_digit($arg) $state $tran ':'->$exit $state assignment $tran $symbol save_assignment_symbol($arg) $tran '.' save_assignment_symbol(".") $state $tran '=' $state $tran !expression->$exit save_assignment_expression $state expression $tran $lambda begin_expression $state $tran !expression_->$exit end_expression $tran $lambda->$fail abort_expression $state expression_ $tran $anyof whitespace->expression_ $tran "<<"->expression_ ?expr_str_op("<<") $tran ">>"->expression_ ?expr_str_op(">>") $tran "<="->expression_ ?expr_str_op("<=") $tran ">="->expression_ ?expr_str_op(">=") $tran "=="->expression_ ?expr_str_op("==") $tran "!="->expression_ ?expr_str_op("!=") $tran $anyof opchar->expression_ ?expr_op($arg) $tran '['->expression_ ?expr_paren('('/*)*/) $tran ']'->expression_ ?expr_paren(/*(*/')') $tran '\''->char_constant $tran '$'->hex_constant $tran !locsymref->expression_ ?expr_locsymref $tran $symbol->expression_ ?expr_symbol($arg) $tran '.'->expression_ ?expr_symbol(".") $tran "0x"->hex_constant $tran "0X"->hex_constant $tran "0"->octal_constant_or_nil $tran "0o"->octal_constant $tran "0O"->octal_constant $tran "0b"->binary_constant $tran "0B"->binary_constant $tran "0t"->decimal_constant $tran "0T"->decimal_constant $tran $decimal->expression_ ?expr_constant($arg) $tran $lambda->$exit ?expr_can_end $state char_constant $tran $any->expression_ ?expr_constant($arg) $state hex_constant $tran $hex->expression_ ?expr_constant($arg) $state octal_constant $tran $octal->expression_ ?expr_constant($arg) $state octal_constant_or_nil $tran $octal->expression_ ?expr_constant($arg) $tran $lambda->expression_ ?expr_constant(0) $state binary_constant $tran $binary->expression_ ?expr_constant($arg) $state decimal_constant $tran $decimal->expression_ ?expr_constant($arg) $state locsymref $tran $digit locsym_set_digit($arg) $state $tran 'f'->$exit locsym_set_direction('f') $tran 'b'->$exit locsym_set_direction('b') $state string $tran $lambda init_string $state string_part $tran '<'->in_string_part begin_string_part('>') $tran '('->in_string_part begin_string_part(/*(*/')') $tran '['->in_string_part begin_string_part(']') $tran '{'->in_string_part begin_string_part('}') $tran $anyof string_delim->in_string_part begin_string_part($arg) $tran $lambda->$exit ?end_string(0) $tran $lambda->$fail end_string(1) $state in_string_part $tran $any->string_part ?is_string_term($arg) $tran $any->in_string_part save_string_char($arg) $tran $lambda->$fail abort_string