⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parser.y

📁 用汇编语言编程源代码
💻 Y
📖 第 1 页 / 共 4 页
字号:
		    r_type_inst ($1.i, $3.i, 0, $2.i);		}	|	CTL_COP_OP	COP_REG		COP_REG		{		  r_type_inst ($1.i, $3.i, 0, $2.i);		}	|	FP_ABS_OP	F_DEST		F_SRC1		{		  r_type_inst ($1.i, $2.i, $3.i, 0);		}	|	FP_BINARY_OP	F_DEST		F_SRC1		F_SRC2		{		  r_type_inst ($1.i, $2.i, $3.i, $4.i);		}	|	FP_CONVERT_OP	F_DEST		F_SRC2		{		  r_type_inst ($1.i, $2.i, $3.i, 0);		}	|	FP_NEG_OP	F_DEST		F_SRC2		{		  r_type_inst ($1.i, $2.i, $3.i, 0);		}	|	FP_CMP_OP	F_SRC1		F_SRC2		{		  r_cond_type_inst ($1.i, $2.i, $3.i);		}	;LOAD_OP:	Y_LB_OP	|	Y_LBU_OP	|	Y_LH_OP	|	Y_LHU_OP	|	Y_LW_OP	|	Y_LWL_OP	|	Y_LWR_OP	|	Y_LD_POP	|	Y_PFW_OP	;LOAD_COP:	Y_LWC0_OP	|	Y_LWC2_OP	|	Y_LWC3_OP	;LOAD_IMM_OP:	Y_LUI_OP;ULOADH_POP:	Y_ULH_POP	|	Y_ULHU_POP	;LOADF_OP:	Y_LWC1_OP	|	Y_L_S_POP	|	Y_L_D_POP	;STORE_OP:	Y_SB_OP	|	Y_SH_OP	|	Y_SW_OP	|	Y_SWL_OP	|	Y_SWR_OP	|	Y_SD_POP	;STORE_COP:	Y_SWC0_OP	|	Y_SWC2_OP	|	Y_SWC3_OP	;STOREF_OP:	Y_SWC1_OP	|	Y_S_S_POP	|	Y_S_D_POP	;SYS_OP:		Y_RFE_OP	|	Y_SYSCALL_OP	;/* These binary operations have immediate analogues. */BINARY_OP_I:	Y_ADD_OP	|	Y_ADDU_OP	|	Y_AND_OP	|	Y_XOR_OP	|	Y_OR_OP	|	Y_SLT_OP	|	Y_SLTU_OP	;BINARY_OPR_I:	Y_SLLV_OP	|	Y_SRAV_OP	|	Y_SRLV_OP	;BINARY_IMM_ARITH_OP: Y_ADDI_OP	|	Y_ADDIU_OP	|	Y_SLTI_OP	|	Y_SLTIU_OP	;BINARY_IMM_LOGICAL_OP: Y_ANDI_OP	|	Y_ORI_OP	|	Y_XORI_OP	;SHIFT_OP:	Y_SLL_OP	|	Y_SRA_OP	|	Y_SRL_OP	;/* These binary operations do not have immediate analogues. */BINARY_OP_NOI:	Y_NOR_OP ;SUB_OP:		Y_SUB_OP	|	Y_SUBU_OP	;DIV_POP:	Y_DIV_OP	|	Y_DIVU_OP	|	Y_REM_POP	|	Y_REMU_POP	;MUL_POP:	Y_MUL_POP	|	Y_MULO_POP	|	Y_MULOU_POP	;SET_LE_POP:	Y_SLE_POP	|	Y_SLEU_POP	;SET_GT_POP:	Y_SGT_POP	|	Y_SGTU_POP	;SET_GE_POP:	Y_SGE_POP	|	Y_SGEU_POP	;SET_EQ_POP:	Y_SEQ_POP	|	Y_SNE_POP	;MULT_OP:	Y_MULT_OP	|	Y_MULTU_OP	;NULLARY_BR_OP:	Y_BC0T_OP	|	Y_BC1T_OP	|	Y_BC2T_OP	|	Y_BC3T_OP	|	Y_BC0F_OP	|	Y_BC1F_OP	|	Y_BC2F_OP	|	Y_BC3F_OP	;UNARY_BR_OP:	Y_BGEZ_OP	|	Y_BGEZAL_OP	|	Y_BGTZ_OP	|	Y_BLEZ_OP	|	Y_BLTZ_OP	|	Y_BLTZAL_OP	;UNARY_BR_POP:	Y_BEQZ_POP	|	Y_BNEZ_POP	;BINARY_BR_OP:	Y_BEQ_OP	|	Y_BNE_OP	;BR_GT_POP:	Y_BGT_POP	|	Y_BGTU_POPBR_GE_POP:	Y_BGE_POP	|	Y_BGEU_POPBR_LT_POP:	Y_BLT_POP	|	Y_BLTU_POPBR_LE_POP:	Y_BLE_POP	|	Y_BLEU_POP	;J_OPS:		Y_J_OP	|	Y_JR_OP	|	Y_JAL_OP	|	Y_JALR_OP	;B_OP:		Y_B_POP	|	Y_BAL_POP	;MOVE_COP_OP:	Y_MOV_S_OP	|	Y_MOV_D_OP	;MOV_FROM_HILO_OP:	Y_MFHI_OP	|	Y_MFLO_OP	;MOV_TO_HILO_OP:	Y_MTHI_OP	|	Y_MTLO_OP	;MOV_COP_OP:	Y_MFC0_OP	|	Y_MFC1_OP	|	Y_MFC1_D_POP	|	Y_MFC2_OP	|	Y_MFC3_OP	|	Y_MTC0_OP	|	Y_MTC1_OP	|	Y_MTC1_D_POP	|	Y_MTC2_OP	|	Y_MTC3_OP	;CTL_COP_OP:	Y_CFC0_OP	|	Y_CFC1_OP	|	Y_CFC2_OP	|	Y_CFC3_OP	|	Y_CTC0_OP	|	Y_CTC1_OP	|	Y_CTC2_OP	|	Y_CTC3_OP	;FP_ABS_OP:	Y_ABS_S_OP	|	Y_ABS_D_OP	;FP_BINARY_OP:	Y_ADD_S_OP	|	Y_ADD_D_OP	|	Y_DIV_S_OP	|	Y_DIV_D_OP	|	Y_MUL_S_OP	|	Y_MUL_D_OP	|	Y_SUB_S_OP	|	Y_SUB_D_OP	;FP_CONVERT_OP:	Y_CVT_D_S_OP	|	Y_CVT_D_W_OP	|	Y_CVT_S_D_OP	|	Y_CVT_S_W_OP	|	Y_CVT_W_D_OP	|	Y_CVT_W_S_OP	;FP_NEG_OP:	Y_NEG_S_OP	|	Y_NEG_D_OP	;FP_CMP_OP:	Y_C_F_S_OP	|	Y_C_UN_S_OP	|	Y_C_EQ_S_OP	|	Y_C_UEQ_S_OP	|	Y_C_OLT_S_OP	|	Y_C_OLE_S_OP	|	Y_C_ULT_S_OP	|	Y_C_ULE_S_OP	|	Y_C_SF_S_OP	|	Y_C_NGLE_S_OP	|	Y_C_SEQ_S_OP	|	Y_C_NGL_S_OP	|	Y_C_LT_S_OP	|	Y_C_NGE_S_OP	|	Y_C_LE_S_OP	|	Y_C_NGT_S_OP	|	Y_C_F_D_OP	|	Y_C_UN_D_OP	|	Y_C_EQ_D_OP	|	Y_C_UEQ_D_OP	|	Y_C_OLT_D_OP	|	Y_C_OLE_D_OP	|	Y_C_ULT_D_OP	|	Y_C_ULE_D_OP	|	Y_C_SF_D_OP	|	Y_C_NGLE_D_OP	|	Y_C_SEQ_D_OP	|	Y_C_NGL_D_OP	|	Y_C_LT_D_OP	|	Y_C_NGE_D_OP	|	Y_C_LE_D_OP	|	Y_C_NGT_D_OP	;ASM_DIRECTIVE:	Y_ALIAS_DIR	Y_REG	Y_REG	|	Y_ALIGN_DIR	EXPR		{		  align_data ($2.i);		}	|	Y_ASCII_DIR {null_term = 0;}	STR_LST		{		  if (text_dir)		    yyerror ("Can't put data in text segment");		}	|	Y_ASCIIZ_DIR {null_term = 1;}	STR_LST		{		  if (text_dir)		    yyerror ("Can't put data in text segment");		}	|	Y_ASM0_DIR	|	Y_BGNB_DIR	Y_INT	|	Y_BYTE_DIR		{store_op = store_byte;}		EXPR_LST		{		  if (text_dir)		    yyerror ("Can't put data in text segment");		}	|	Y_COMM_DIR	ID		EXPR		{		  align_data (2);		  if (lookup_label ((char*)$2.p)->addr == 0)		  {		    record_label ((char*)$2.p, current_data_pc (), 1);			if ($1.p) free($1.p);		  }		  increment_data_pc ($3.i);		}	|	Y_DATA_DIR		{		  user_kernel_data_segment (0);		  data_dir = 1; text_dir = 0;		  enable_data_alignment ();		}	|	Y_DATA_DIR	Y_INT		{		  user_kernel_data_segment (0);		  data_dir = 1; text_dir = 0;		  enable_data_alignment ();		  set_data_pc ($2.i);		}	|	Y_K_DATA_DIR		{		  user_kernel_data_segment (1);		  data_dir = 1; text_dir = 0;		  enable_data_alignment ();		}	|	Y_K_DATA_DIR	Y_INT		{		  user_kernel_data_segment (1);		  data_dir = 1; text_dir = 0;		  enable_data_alignment ();		  set_data_pc ($2.i);		}	|	Y_DOUBLE_DIR		{		  store_op = store_double;		  if (data_dir) set_data_alignment(3);		}		FP_EXPR_LST		{		  if (text_dir)		    yyerror ("Can't put data in text segment");		}	|	Y_END_DIR	OPTIONAL_ID	|	Y_ENDB_DIR	Y_INT	|	Y_ENDR_DIR	|	Y_ENT_DIR	ID	|	Y_ENT_DIR	ID		Y_INT	|	Y_EXTERN_DIR	ID		EXPR		{		  extern_directive ((char*)$2.p, $3.i);		}	|	Y_ERR_DIR		{		  fatal_error ("File contains an .err directive\n");		}	|	Y_FILE_DIR	Y_INT		Y_STR	|	Y_FLOAT_DIR		{		  store_op = store_float;		  if (data_dir) set_data_alignment (2);		}		FP_EXPR_LST		{		  if (text_dir)		    yyerror ("Can't put data in text segment");		}	|	Y_FMASK_DIR	Y_INT		Y_INT	|	Y_FRAME_DIR	REGISTER	Y_INT	REGISTER	|	Y_GLOBAL_DIR	ID		{		  make_label_global ((char*)$2.p);		  if ($2.p) free($2.p);		}	|	Y_HALF_DIR		{		  store_op = store_half;		  if (data_dir) set_data_alignment (1);		}		EXPR_LST		{		  if (text_dir)		    yyerror ("Can't put data in text segment");		}	|	Y_LABEL_DIR	ID		{		  record_label ((char*)$2.p,				text_dir				? current_text_pc ()				: current_data_pc (),				1);		  if ($1.p) free($1.p);		}	|	Y_LCOMM_DIR	ID		EXPR		{		  lcomm_directive ((char*)$2.p, $3.i);		}		/* Produced by cc 2.10 */	|	Y_LIVEREG_DIR	Y_INT		Y_INT	|	Y_LOC_DIR	Y_INT		Y_INT	|	Y_MASK_DIR	Y_INT		Y_INT	|	Y_NOALIAS_DIR	Y_REG	Y_REG	|	Y_OPTIONS_DIR	ID	|	Y_REPEAT_DIR	EXPR		{		  yyerror ("Warning: repeat directive ignored");		}	|	Y_RDATA_DIR		{		  user_kernel_data_segment (0);		  data_dir = 1; text_dir = 0;		  enable_data_alignment ();		}	|	Y_RDATA_DIR	Y_INT		{		  user_kernel_data_segment (0);		  data_dir = 1; text_dir = 0;		  enable_data_alignment ();		  set_data_pc ($2.i);		}	|	Y_SDATA_DIR		{		  user_kernel_data_segment (0);		  data_dir = 1; text_dir = 0;		  enable_data_alignment ();		}	|	Y_SDATA_DIR	Y_INT		{		  user_kernel_data_segment (0);		  data_dir = 1; text_dir = 0;		  enable_data_alignment ();		  set_data_pc ($2.i);		}	|	Y_SET_DIR		ID		{		  if (streq ((char*)$2.p, "noat"))		    noat_flag = 1;		  else if (streq ((char*)$2.p, "at"))		    noat_flag = 0;		}	|	Y_SPACE_DIR	EXPR		{		  if (data_dir)		    increment_data_pc ($2.i);		  else if (text_dir)		    increment_text_pc ($2.i);		}	|	Y_STRUCT_DIR	EXPR		{		  yyerror ("Warning: struct directive ignored");		}	|	Y_TEXT_DIR		{		  user_kernel_text_segment (0);		  data_dir = 0; text_dir = 1;		  enable_data_alignment ();		}	|	Y_TEXT_DIR	Y_INT		{		  user_kernel_text_segment (0);		  data_dir = 0; text_dir = 1;		  enable_data_alignment ();		  set_text_pc ($2.i);		}	|	Y_K_TEXT_DIR		{		  user_kernel_text_segment (1);		  data_dir = 0; text_dir = 1;		  enable_data_alignment ();		}	|	Y_K_TEXT_DIR	Y_INT		{		  user_kernel_text_segment (1);		  data_dir = 0; text_dir = 1;		  enable_data_alignment ();		  set_text_pc ($2.i);		}	|	Y_VERSTAMP_DIR	Y_INT		Y_INT	|	Y_VREG_DIR	REGISTER	Y_INT	Y_INT	|	Y_WORD_DIR		{		  store_op = store_word_data;		  if (data_dir) set_data_alignment (2);		}		EXPR_LST	;ADDRESS:	{only_id = 1;} ADDR {only_id = 0; $$ = $2;}ADDR:		'(' REGISTER ')'		{		  $$.p = make_addr_expr (0, NULL, $2.i);		}	|	ABS_ADDR		{		  $$.p = make_addr_expr ($1.i, NULL, 0);		}	|	ABS_ADDR '(' REGISTER ')'		{		  $$.p = make_addr_expr ($1.i, NULL, $3.i);		}	|	Y_ID		{		  $$.p = make_addr_expr (0, (char*)$1.p, 0);		  if ($1.p) free ((char*)$1.p);		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -