Progress on Lexer and BNF.
This commit is contained in:
parent
9047c53a0e
commit
eb4552fa83
File diff suppressed because it is too large
Load Diff
@ -37,12 +37,13 @@ public class M68kParser implements PsiParser, LightPsiParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static final TokenSet[] EXTENDS_SETS_ = new TokenSet[]{
|
public static final TokenSet[] EXTENDS_SETS_ = new TokenSet[]{
|
||||||
|
create_token_set_(GLOBAL_LABEL, LABEL, LOCAL_LABEL),
|
||||||
create_token_set_(ADDRESS_REGISTER, DATA_REGISTER, REGISTER, SPECIAL_REGISTER),
|
create_token_set_(ADDRESS_REGISTER, DATA_REGISTER, REGISTER, SPECIAL_REGISTER),
|
||||||
create_token_set_(ABSOLUTE_ADDRESS_ADDRESSING_MODE, ADDRESSING_MODE, ADDRESS_REGISTER_DIRECT_ADDRESSING_MODE, ADDRESS_REGISTER_INDIRECT_ADDRESSING_MODE,
|
create_token_set_(ABSOLUTE_ADDRESS_ADDRESSING_MODE, ADDRESSING_MODE, ADDRESS_REGISTER_DIRECT_ADDRESSING_MODE, ADDRESS_REGISTER_INDIRECT_ADDRESSING_MODE,
|
||||||
ADDRESS_REGISTER_INDIRECT_POST_INC_ADDRESSING_MODE, ADDRESS_REGISTER_INDIRECT_PRE_DEC_ADDRESSING_MODE, ADDRESS_REGISTER_INDIRECT_WITH_DISPLACEMENT_NEW_ADDRESSING_MODE, ADDRESS_REGISTER_INDIRECT_WITH_DISPLACEMENT_OLD_ADDRESSING_MODE,
|
ADDRESS_REGISTER_INDIRECT_POST_INC_ADDRESSING_MODE, ADDRESS_REGISTER_INDIRECT_PRE_DEC_ADDRESSING_MODE, ADDRESS_REGISTER_INDIRECT_WITH_DISPLACEMENT_NEW_ADDRESSING_MODE, ADDRESS_REGISTER_INDIRECT_WITH_DISPLACEMENT_OLD_ADDRESSING_MODE,
|
||||||
ADDRESS_REGISTER_INDIRECT_WITH_INDEX_NEW_ADDRESSING_MODE, ADDRESS_REGISTER_INDIRECT_WITH_INDEX_OLD_ADDRESSING_MODE, DATA_REGISTER_DIRECT_ADDRESSING_MODE, IMMEDIATE_DATA,
|
ADDRESS_REGISTER_INDIRECT_WITH_INDEX_NEW_ADDRESSING_MODE, ADDRESS_REGISTER_INDIRECT_WITH_INDEX_OLD_ADDRESSING_MODE, DATA_REGISTER_DIRECT_ADDRESSING_MODE, IMMEDIATE_DATA,
|
||||||
PROGRAM_COUNTER_INDIRECT_WITH_DISPLACEMENT_NEW_ADDRESSING_MODE, PROGRAM_COUNTER_INDIRECT_WITH_DISPLACEMENT_OLD_ADDRESSING_MODE, PROGRAM_COUNTER_INDIRECT_WITH_INDEX_NEW_ADDRESSING_MODE, PROGRAM_COUNTER_INDIRECT_WITH_INDEX_OLD_ADDRESSING_MODE,
|
PROGRAM_COUNTER_INDIRECT_WITH_DISPLACEMENT_NEW_ADDRESSING_MODE, PROGRAM_COUNTER_INDIRECT_WITH_DISPLACEMENT_OLD_ADDRESSING_MODE, PROGRAM_COUNTER_INDIRECT_WITH_INDEX_NEW_ADDRESSING_MODE, PROGRAM_COUNTER_INDIRECT_WITH_INDEX_OLD_ADDRESSING_MODE,
|
||||||
SPECIAL_REGISTER_DIRECT_ADDRESSING_MODE),
|
REGISTER_LIST_ADDRESSING_MODE, SPECIAL_REGISTER_DIRECT_ADDRESSING_MODE),
|
||||||
create_token_set_(BINARY_ADD_EXPR, BINARY_BITWISE_AND_EXPR, BINARY_BITWISE_OR_EXPR, BINARY_BITWISE_XOR_EXPR,
|
create_token_set_(BINARY_ADD_EXPR, BINARY_BITWISE_AND_EXPR, BINARY_BITWISE_OR_EXPR, BINARY_BITWISE_XOR_EXPR,
|
||||||
BINARY_CMP_EQ_EXPR, BINARY_CMP_GE_EXPR, BINARY_CMP_GT_EXPR, BINARY_CMP_LE_EXPR,
|
BINARY_CMP_EQ_EXPR, BINARY_CMP_GE_EXPR, BINARY_CMP_GT_EXPR, BINARY_CMP_LE_EXPR,
|
||||||
BINARY_CMP_LT_EXPR, BINARY_CMP_NE_EXPR, BINARY_DIV_EXPR, BINARY_LOGICAL_AND_EXPR,
|
BINARY_CMP_LT_EXPR, BINARY_CMP_NE_EXPR, BINARY_DIV_EXPR, BINARY_LOGICAL_AND_EXPR,
|
||||||
@ -95,17 +96,37 @@ public class M68kParser implements PsiParser, LightPsiParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ********************************************************** */
|
/* ********************************************************** */
|
||||||
// AddressRegister
|
// AddressRegister !(OP_MINUS|OP_AR_DIV)
|
||||||
public static boolean AddressRegisterDirectAddressingMode(PsiBuilder b, int l) {
|
public static boolean AddressRegisterDirectAddressingMode(PsiBuilder b, int l) {
|
||||||
if (!recursion_guard_(b, l, "AddressRegisterDirectAddressingMode")) return false;
|
if (!recursion_guard_(b, l, "AddressRegisterDirectAddressingMode")) return false;
|
||||||
if (!nextTokenIsFast(b, AREG)) return false;
|
if (!nextTokenIsFast(b, AREG)) return false;
|
||||||
boolean r;
|
boolean r;
|
||||||
Marker m = enter_section_(b, l, _NONE_, ADDRESS_REGISTER_DIRECT_ADDRESSING_MODE, "<AddressingMode>");
|
Marker m = enter_section_(b, l, _NONE_, ADDRESS_REGISTER_DIRECT_ADDRESSING_MODE, "<AddressingMode>");
|
||||||
r = AddressRegister(b, l + 1);
|
r = AddressRegister(b, l + 1);
|
||||||
|
r = r && AddressRegisterDirectAddressingMode_1(b, l + 1);
|
||||||
exit_section_(b, l, m, r, false, null);
|
exit_section_(b, l, m, r, false, null);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// !(OP_MINUS|OP_AR_DIV)
|
||||||
|
private static boolean AddressRegisterDirectAddressingMode_1(PsiBuilder b, int l) {
|
||||||
|
if (!recursion_guard_(b, l, "AddressRegisterDirectAddressingMode_1")) return false;
|
||||||
|
boolean r;
|
||||||
|
Marker m = enter_section_(b, l, _NOT_);
|
||||||
|
r = !AddressRegisterDirectAddressingMode_1_0(b, l + 1);
|
||||||
|
exit_section_(b, l, m, r, false, null);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
// OP_MINUS|OP_AR_DIV
|
||||||
|
private static boolean AddressRegisterDirectAddressingMode_1_0(PsiBuilder b, int l) {
|
||||||
|
if (!recursion_guard_(b, l, "AddressRegisterDirectAddressingMode_1_0")) return false;
|
||||||
|
boolean r;
|
||||||
|
r = consumeTokenFast(b, OP_MINUS);
|
||||||
|
if (!r) r = consumeTokenFast(b, OP_AR_DIV);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
/* ********************************************************** */
|
/* ********************************************************** */
|
||||||
// ROUND_L AddressRegister ROUND_R !OP_PLUS
|
// ROUND_L AddressRegister ROUND_R !OP_PLUS
|
||||||
public static boolean AddressRegisterIndirectAddressingMode(PsiBuilder b, int l) {
|
public static boolean AddressRegisterIndirectAddressingMode(PsiBuilder b, int l) {
|
||||||
@ -267,6 +288,7 @@ public class M68kParser implements PsiParser, LightPsiParser {
|
|||||||
// | ProgramCounterIndirectWithIndexNewAddressingMode
|
// | ProgramCounterIndirectWithIndexNewAddressingMode
|
||||||
// | AddressRegisterIndirectPreDecAddressingMode
|
// | AddressRegisterIndirectPreDecAddressingMode
|
||||||
// | AddressRegisterIndirectPostIncAddressingMode
|
// | AddressRegisterIndirectPostIncAddressingMode
|
||||||
|
// | RegisterListAddressingMode
|
||||||
// | ImmediateData
|
// | ImmediateData
|
||||||
public static boolean AddressingMode(PsiBuilder b, int l) {
|
public static boolean AddressingMode(PsiBuilder b, int l) {
|
||||||
if (!recursion_guard_(b, l, "AddressingMode")) return false;
|
if (!recursion_guard_(b, l, "AddressingMode")) return false;
|
||||||
@ -287,16 +309,17 @@ public class M68kParser implements PsiParser, LightPsiParser {
|
|||||||
if (!r) r = ProgramCounterIndirectWithIndexNewAddressingMode(b, l + 1);
|
if (!r) r = ProgramCounterIndirectWithIndexNewAddressingMode(b, l + 1);
|
||||||
if (!r) r = AddressRegisterIndirectPreDecAddressingMode(b, l + 1);
|
if (!r) r = AddressRegisterIndirectPreDecAddressingMode(b, l + 1);
|
||||||
if (!r) r = AddressRegisterIndirectPostIncAddressingMode(b, l + 1);
|
if (!r) r = AddressRegisterIndirectPostIncAddressingMode(b, l + 1);
|
||||||
|
if (!r) r = RegisterListAddressingMode(b, l + 1);
|
||||||
if (!r) r = ImmediateData(b, l + 1);
|
if (!r) r = ImmediateData(b, l + 1);
|
||||||
exit_section_(b, l, m, r, false, null);
|
exit_section_(b, l, m, r, false, null);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ********************************************************** */
|
/* ********************************************************** */
|
||||||
// AsmOp (WHITE_SPACE AsmOperands)?
|
// AsmOp AsmOperands?
|
||||||
public static boolean AsmInstruction(PsiBuilder b, int l) {
|
public static boolean AsmInstruction(PsiBuilder b, int l) {
|
||||||
if (!recursion_guard_(b, l, "AsmInstruction")) return false;
|
if (!recursion_guard_(b, l, "AsmInstruction")) return false;
|
||||||
if (!nextTokenIs(b, SYMBOL)) return false;
|
if (!nextTokenIs(b, MNEMONIC)) return false;
|
||||||
boolean r;
|
boolean r;
|
||||||
Marker m = enter_section_(b);
|
Marker m = enter_section_(b);
|
||||||
r = AsmOp(b, l + 1);
|
r = AsmOp(b, l + 1);
|
||||||
@ -305,32 +328,21 @@ public class M68kParser implements PsiParser, LightPsiParser {
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
// (WHITE_SPACE AsmOperands)?
|
// AsmOperands?
|
||||||
private static boolean AsmInstruction_1(PsiBuilder b, int l) {
|
private static boolean AsmInstruction_1(PsiBuilder b, int l) {
|
||||||
if (!recursion_guard_(b, l, "AsmInstruction_1")) return false;
|
if (!recursion_guard_(b, l, "AsmInstruction_1")) return false;
|
||||||
AsmInstruction_1_0(b, l + 1);
|
AsmOperands(b, l + 1);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// WHITE_SPACE AsmOperands
|
|
||||||
private static boolean AsmInstruction_1_0(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "AsmInstruction_1_0")) return false;
|
|
||||||
boolean r;
|
|
||||||
Marker m = enter_section_(b);
|
|
||||||
r = consumeToken(b, WHITE_SPACE);
|
|
||||||
r = r && AsmOperands(b, l + 1);
|
|
||||||
exit_section_(b, m, null, r);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ********************************************************** */
|
/* ********************************************************** */
|
||||||
// SYMBOL OperandSize?
|
// MNEMONIC OperandSize?
|
||||||
public static boolean AsmOp(PsiBuilder b, int l) {
|
public static boolean AsmOp(PsiBuilder b, int l) {
|
||||||
if (!recursion_guard_(b, l, "AsmOp")) return false;
|
if (!recursion_guard_(b, l, "AsmOp")) return false;
|
||||||
if (!nextTokenIs(b, SYMBOL)) return false;
|
if (!nextTokenIs(b, MNEMONIC)) return false;
|
||||||
boolean r;
|
boolean r;
|
||||||
Marker m = enter_section_(b);
|
Marker m = enter_section_(b);
|
||||||
r = consumeToken(b, SYMBOL);
|
r = consumeToken(b, MNEMONIC);
|
||||||
r = r && AsmOp_1(b, l + 1);
|
r = r && AsmOp_1(b, l + 1);
|
||||||
exit_section_(b, m, ASM_OP, r);
|
exit_section_(b, m, ASM_OP, r);
|
||||||
return r;
|
return r;
|
||||||
@ -378,74 +390,28 @@ public class M68kParser implements PsiParser, LightPsiParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ********************************************************** */
|
/* ********************************************************** */
|
||||||
// SYMBOL ((WHITE_SPACE? OP_ASSIGN WHITE_SPACE?)|(WHITE_SPACE EQU WHITE_SPACE)) expr
|
// SYMBOLDEF (OP_ASSIGN|EQU) expr
|
||||||
public static boolean Assignment(PsiBuilder b, int l) {
|
public static boolean Assignment(PsiBuilder b, int l) {
|
||||||
if (!recursion_guard_(b, l, "Assignment")) return false;
|
if (!recursion_guard_(b, l, "Assignment")) return false;
|
||||||
if (!nextTokenIs(b, SYMBOL)) return false;
|
if (!nextTokenIs(b, SYMBOLDEF)) return false;
|
||||||
boolean r;
|
boolean r;
|
||||||
Marker m = enter_section_(b);
|
Marker m = enter_section_(b);
|
||||||
r = consumeToken(b, SYMBOL);
|
r = consumeToken(b, SYMBOLDEF);
|
||||||
r = r && Assignment_1(b, l + 1);
|
r = r && Assignment_1(b, l + 1);
|
||||||
r = r && expr(b, l + 1, -1);
|
r = r && expr(b, l + 1, -1);
|
||||||
exit_section_(b, m, ASSIGNMENT, r);
|
exit_section_(b, m, ASSIGNMENT, r);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
// (WHITE_SPACE? OP_ASSIGN WHITE_SPACE?)|(WHITE_SPACE EQU WHITE_SPACE)
|
// OP_ASSIGN|EQU
|
||||||
private static boolean Assignment_1(PsiBuilder b, int l) {
|
private static boolean Assignment_1(PsiBuilder b, int l) {
|
||||||
if (!recursion_guard_(b, l, "Assignment_1")) return false;
|
if (!recursion_guard_(b, l, "Assignment_1")) return false;
|
||||||
boolean r;
|
boolean r;
|
||||||
Marker m = enter_section_(b);
|
r = consumeToken(b, OP_ASSIGN);
|
||||||
r = Assignment_1_0(b, l + 1);
|
if (!r) r = consumeToken(b, EQU);
|
||||||
if (!r) r = Assignment_1_1(b, l + 1);
|
|
||||||
exit_section_(b, m, null, r);
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
// WHITE_SPACE? OP_ASSIGN WHITE_SPACE?
|
|
||||||
private static boolean Assignment_1_0(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "Assignment_1_0")) return false;
|
|
||||||
boolean r;
|
|
||||||
Marker m = enter_section_(b);
|
|
||||||
r = Assignment_1_0_0(b, l + 1);
|
|
||||||
r = r && consumeToken(b, OP_ASSIGN);
|
|
||||||
r = r && Assignment_1_0_2(b, l + 1);
|
|
||||||
exit_section_(b, m, null, r);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
// WHITE_SPACE?
|
|
||||||
private static boolean Assignment_1_0_0(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "Assignment_1_0_0")) return false;
|
|
||||||
consumeToken(b, WHITE_SPACE);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// WHITE_SPACE?
|
|
||||||
private static boolean Assignment_1_0_2(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "Assignment_1_0_2")) return false;
|
|
||||||
consumeToken(b, WHITE_SPACE);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// WHITE_SPACE EQU WHITE_SPACE
|
|
||||||
private static boolean Assignment_1_1(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "Assignment_1_1")) return false;
|
|
||||||
boolean r;
|
|
||||||
Marker m = enter_section_(b);
|
|
||||||
r = consumeTokens(b, 0, WHITE_SPACE, EQU, WHITE_SPACE);
|
|
||||||
exit_section_(b, m, null, r);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ********************************************************** */
|
|
||||||
// WHITE_SPACE?
|
|
||||||
static boolean BlankLine(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "BlankLine")) return false;
|
|
||||||
consumeToken(b, WHITE_SPACE);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ********************************************************** */
|
/* ********************************************************** */
|
||||||
// DataRegister | AddressRegister
|
// DataRegister | AddressRegister
|
||||||
static boolean DataOrAddressRegister(PsiBuilder b, int l) {
|
static boolean DataOrAddressRegister(PsiBuilder b, int l) {
|
||||||
@ -472,17 +438,37 @@ public class M68kParser implements PsiParser, LightPsiParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ********************************************************** */
|
/* ********************************************************** */
|
||||||
// DataRegister
|
// DataRegister !(OP_MINUS|OP_AR_DIV)
|
||||||
public static boolean DataRegisterDirectAddressingMode(PsiBuilder b, int l) {
|
public static boolean DataRegisterDirectAddressingMode(PsiBuilder b, int l) {
|
||||||
if (!recursion_guard_(b, l, "DataRegisterDirectAddressingMode")) return false;
|
if (!recursion_guard_(b, l, "DataRegisterDirectAddressingMode")) return false;
|
||||||
if (!nextTokenIsFast(b, DREG)) return false;
|
if (!nextTokenIsFast(b, DREG)) return false;
|
||||||
boolean r;
|
boolean r;
|
||||||
Marker m = enter_section_(b, l, _NONE_, DATA_REGISTER_DIRECT_ADDRESSING_MODE, "<AddressingMode>");
|
Marker m = enter_section_(b, l, _NONE_, DATA_REGISTER_DIRECT_ADDRESSING_MODE, "<AddressingMode>");
|
||||||
r = DataRegister(b, l + 1);
|
r = DataRegister(b, l + 1);
|
||||||
|
r = r && DataRegisterDirectAddressingMode_1(b, l + 1);
|
||||||
exit_section_(b, l, m, r, false, null);
|
exit_section_(b, l, m, r, false, null);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// !(OP_MINUS|OP_AR_DIV)
|
||||||
|
private static boolean DataRegisterDirectAddressingMode_1(PsiBuilder b, int l) {
|
||||||
|
if (!recursion_guard_(b, l, "DataRegisterDirectAddressingMode_1")) return false;
|
||||||
|
boolean r;
|
||||||
|
Marker m = enter_section_(b, l, _NOT_);
|
||||||
|
r = !DataRegisterDirectAddressingMode_1_0(b, l + 1);
|
||||||
|
exit_section_(b, l, m, r, false, null);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
// OP_MINUS|OP_AR_DIV
|
||||||
|
private static boolean DataRegisterDirectAddressingMode_1_0(PsiBuilder b, int l) {
|
||||||
|
if (!recursion_guard_(b, l, "DataRegisterDirectAddressingMode_1_0")) return false;
|
||||||
|
boolean r;
|
||||||
|
r = consumeTokenFast(b, OP_MINUS);
|
||||||
|
if (!r) r = consumeTokenFast(b, OP_AR_DIV);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
/* ********************************************************** */
|
/* ********************************************************** */
|
||||||
// OPSIZE_WL
|
// OPSIZE_WL
|
||||||
public static boolean DataWidth(PsiBuilder b, int l) {
|
public static boolean DataWidth(PsiBuilder b, int l) {
|
||||||
@ -502,98 +488,17 @@ public class M68kParser implements PsiParser, LightPsiParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ********************************************************** */
|
/* ********************************************************** */
|
||||||
// (!WHITE_SPACE SYMBOL (COLON? COLON?)?)|(WHITE_SPACE? SYMBOL COLON COLON?)
|
// GLOBAL_LABEL_DEF
|
||||||
public static boolean GlobalLabel(PsiBuilder b, int l) {
|
public static boolean GlobalLabel(PsiBuilder b, int l) {
|
||||||
if (!recursion_guard_(b, l, "GlobalLabel")) return false;
|
if (!recursion_guard_(b, l, "GlobalLabel")) return false;
|
||||||
if (!nextTokenIs(b, "<global label>", SYMBOL, WHITE_SPACE)) return false;
|
if (!nextTokenIs(b, GLOBAL_LABEL_DEF)) return false;
|
||||||
boolean r;
|
|
||||||
Marker m = enter_section_(b, l, _NONE_, GLOBAL_LABEL, "<global label>");
|
|
||||||
r = GlobalLabel_0(b, l + 1);
|
|
||||||
if (!r) r = GlobalLabel_1(b, l + 1);
|
|
||||||
exit_section_(b, l, m, r, false, null);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
// !WHITE_SPACE SYMBOL (COLON? COLON?)?
|
|
||||||
private static boolean GlobalLabel_0(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "GlobalLabel_0")) return false;
|
|
||||||
boolean r;
|
boolean r;
|
||||||
Marker m = enter_section_(b);
|
Marker m = enter_section_(b);
|
||||||
r = GlobalLabel_0_0(b, l + 1);
|
r = consumeToken(b, GLOBAL_LABEL_DEF);
|
||||||
r = r && consumeToken(b, SYMBOL);
|
exit_section_(b, m, GLOBAL_LABEL, r);
|
||||||
r = r && GlobalLabel_0_2(b, l + 1);
|
|
||||||
exit_section_(b, m, null, r);
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
// !WHITE_SPACE
|
|
||||||
private static boolean GlobalLabel_0_0(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "GlobalLabel_0_0")) return false;
|
|
||||||
boolean r;
|
|
||||||
Marker m = enter_section_(b, l, _NOT_);
|
|
||||||
r = !consumeToken(b, WHITE_SPACE);
|
|
||||||
exit_section_(b, l, m, r, false, null);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
// (COLON? COLON?)?
|
|
||||||
private static boolean GlobalLabel_0_2(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "GlobalLabel_0_2")) return false;
|
|
||||||
GlobalLabel_0_2_0(b, l + 1);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// COLON? COLON?
|
|
||||||
private static boolean GlobalLabel_0_2_0(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "GlobalLabel_0_2_0")) return false;
|
|
||||||
boolean r;
|
|
||||||
Marker m = enter_section_(b);
|
|
||||||
r = GlobalLabel_0_2_0_0(b, l + 1);
|
|
||||||
r = r && GlobalLabel_0_2_0_1(b, l + 1);
|
|
||||||
exit_section_(b, m, null, r);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
// COLON?
|
|
||||||
private static boolean GlobalLabel_0_2_0_0(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "GlobalLabel_0_2_0_0")) return false;
|
|
||||||
consumeToken(b, COLON);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// COLON?
|
|
||||||
private static boolean GlobalLabel_0_2_0_1(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "GlobalLabel_0_2_0_1")) return false;
|
|
||||||
consumeToken(b, COLON);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// WHITE_SPACE? SYMBOL COLON COLON?
|
|
||||||
private static boolean GlobalLabel_1(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "GlobalLabel_1")) return false;
|
|
||||||
boolean r;
|
|
||||||
Marker m = enter_section_(b);
|
|
||||||
r = GlobalLabel_1_0(b, l + 1);
|
|
||||||
r = r && consumeTokens(b, 0, SYMBOL, COLON);
|
|
||||||
r = r && GlobalLabel_1_3(b, l + 1);
|
|
||||||
exit_section_(b, m, null, r);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
// WHITE_SPACE?
|
|
||||||
private static boolean GlobalLabel_1_0(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "GlobalLabel_1_0")) return false;
|
|
||||||
consumeToken(b, WHITE_SPACE);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// COLON?
|
|
||||||
private static boolean GlobalLabel_1_3(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "GlobalLabel_1_3")) return false;
|
|
||||||
consumeToken(b, COLON);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ********************************************************** */
|
/* ********************************************************** */
|
||||||
// HASH expr
|
// HASH expr
|
||||||
public static boolean ImmediateData(PsiBuilder b, int l) {
|
public static boolean ImmediateData(PsiBuilder b, int l) {
|
||||||
@ -608,24 +513,29 @@ public class M68kParser implements PsiParser, LightPsiParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ********************************************************** */
|
/* ********************************************************** */
|
||||||
// WHITE_SPACE Instruction
|
// AsmInstruction | MacroCall
|
||||||
static boolean InstructionOnly(PsiBuilder b, int l) {
|
static boolean Instruction(PsiBuilder b, int l) {
|
||||||
if (!recursion_guard_(b, l, "InstructionOnly")) return false;
|
if (!recursion_guard_(b, l, "Instruction")) return false;
|
||||||
if (!nextTokenIs(b, WHITE_SPACE)) return false;
|
if (!nextTokenIs(b, "", MNEMONIC, SYMBOL)) return false;
|
||||||
boolean r;
|
boolean r;
|
||||||
Marker m = enter_section_(b);
|
r = AsmInstruction(b, l + 1);
|
||||||
r = consumeToken(b, WHITE_SPACE);
|
if (!r) r = MacroCall(b, l + 1);
|
||||||
r = r && parseMacroCallOrAsmInstruction(b, l + 1);
|
|
||||||
exit_section_(b, m, null, r);
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ********************************************************** */
|
||||||
|
// Instruction
|
||||||
|
static boolean InstructionOnly(PsiBuilder b, int l) {
|
||||||
|
return Instruction(b, l + 1);
|
||||||
|
}
|
||||||
|
|
||||||
/* ********************************************************** */
|
/* ********************************************************** */
|
||||||
// LocalLabel | GlobalLabel
|
// LocalLabel | GlobalLabel
|
||||||
public static boolean Label(PsiBuilder b, int l) {
|
public static boolean Label(PsiBuilder b, int l) {
|
||||||
if (!recursion_guard_(b, l, "Label")) return false;
|
if (!recursion_guard_(b, l, "Label")) return false;
|
||||||
|
if (!nextTokenIs(b, "<label>", GLOBAL_LABEL_DEF, LOCAL_LABEL_DEF)) return false;
|
||||||
boolean r;
|
boolean r;
|
||||||
Marker m = enter_section_(b, l, _NONE_, LABEL, "<label>");
|
Marker m = enter_section_(b, l, _COLLAPSE_, LABEL, "<label>");
|
||||||
r = LocalLabel(b, l + 1);
|
r = LocalLabel(b, l + 1);
|
||||||
if (!r) r = GlobalLabel(b, l + 1);
|
if (!r) r = GlobalLabel(b, l + 1);
|
||||||
exit_section_(b, l, m, r, false, null);
|
exit_section_(b, l, m, r, false, null);
|
||||||
@ -650,137 +560,27 @@ public class M68kParser implements PsiParser, LightPsiParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ********************************************************** */
|
/* ********************************************************** */
|
||||||
// Label WHITE_SPACE Instruction
|
// Label Instruction
|
||||||
static boolean LabelWithInstruction(PsiBuilder b, int l) {
|
static boolean LabelWithInstruction(PsiBuilder b, int l) {
|
||||||
if (!recursion_guard_(b, l, "LabelWithInstruction")) return false;
|
if (!recursion_guard_(b, l, "LabelWithInstruction")) return false;
|
||||||
|
if (!nextTokenIs(b, "", GLOBAL_LABEL_DEF, LOCAL_LABEL_DEF)) return false;
|
||||||
boolean r;
|
boolean r;
|
||||||
Marker m = enter_section_(b);
|
Marker m = enter_section_(b);
|
||||||
r = Label(b, l + 1);
|
r = Label(b, l + 1);
|
||||||
r = r && consumeToken(b, WHITE_SPACE);
|
r = r && Instruction(b, l + 1);
|
||||||
r = r && parseMacroCallOrAsmInstruction(b, l + 1);
|
|
||||||
exit_section_(b, m, null, r);
|
exit_section_(b, m, null, r);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ********************************************************** */
|
/* ********************************************************** */
|
||||||
// (!WHITE_SPACE ((DOT SYMBOL)|(SYMBOL DOLLAR)) COLON?)|(WHITE_SPACE? ((DOT SYMBOL)|(SYMBOL DOLLAR)) COLON)
|
// LOCAL_LABEL_DEF
|
||||||
public static boolean LocalLabel(PsiBuilder b, int l) {
|
public static boolean LocalLabel(PsiBuilder b, int l) {
|
||||||
if (!recursion_guard_(b, l, "LocalLabel")) return false;
|
if (!recursion_guard_(b, l, "LocalLabel")) return false;
|
||||||
boolean r;
|
if (!nextTokenIs(b, LOCAL_LABEL_DEF)) return false;
|
||||||
Marker m = enter_section_(b, l, _NONE_, LOCAL_LABEL, "<local label>");
|
|
||||||
r = LocalLabel_0(b, l + 1);
|
|
||||||
if (!r) r = LocalLabel_1(b, l + 1);
|
|
||||||
exit_section_(b, l, m, r, false, null);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
// !WHITE_SPACE ((DOT SYMBOL)|(SYMBOL DOLLAR)) COLON?
|
|
||||||
private static boolean LocalLabel_0(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "LocalLabel_0")) return false;
|
|
||||||
boolean r;
|
boolean r;
|
||||||
Marker m = enter_section_(b);
|
Marker m = enter_section_(b);
|
||||||
r = LocalLabel_0_0(b, l + 1);
|
r = consumeToken(b, LOCAL_LABEL_DEF);
|
||||||
r = r && LocalLabel_0_1(b, l + 1);
|
exit_section_(b, m, LOCAL_LABEL, r);
|
||||||
r = r && LocalLabel_0_2(b, l + 1);
|
|
||||||
exit_section_(b, m, null, r);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
// !WHITE_SPACE
|
|
||||||
private static boolean LocalLabel_0_0(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "LocalLabel_0_0")) return false;
|
|
||||||
boolean r;
|
|
||||||
Marker m = enter_section_(b, l, _NOT_);
|
|
||||||
r = !consumeToken(b, WHITE_SPACE);
|
|
||||||
exit_section_(b, l, m, r, false, null);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
// (DOT SYMBOL)|(SYMBOL DOLLAR)
|
|
||||||
private static boolean LocalLabel_0_1(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "LocalLabel_0_1")) return false;
|
|
||||||
boolean r;
|
|
||||||
Marker m = enter_section_(b);
|
|
||||||
r = LocalLabel_0_1_0(b, l + 1);
|
|
||||||
if (!r) r = LocalLabel_0_1_1(b, l + 1);
|
|
||||||
exit_section_(b, m, null, r);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
// DOT SYMBOL
|
|
||||||
private static boolean LocalLabel_0_1_0(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "LocalLabel_0_1_0")) return false;
|
|
||||||
boolean r;
|
|
||||||
Marker m = enter_section_(b);
|
|
||||||
r = consumeTokens(b, 0, DOT, SYMBOL);
|
|
||||||
exit_section_(b, m, null, r);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
// SYMBOL DOLLAR
|
|
||||||
private static boolean LocalLabel_0_1_1(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "LocalLabel_0_1_1")) return false;
|
|
||||||
boolean r;
|
|
||||||
Marker m = enter_section_(b);
|
|
||||||
r = consumeTokens(b, 0, SYMBOL, DOLLAR);
|
|
||||||
exit_section_(b, m, null, r);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
// COLON?
|
|
||||||
private static boolean LocalLabel_0_2(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "LocalLabel_0_2")) return false;
|
|
||||||
consumeToken(b, COLON);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// WHITE_SPACE? ((DOT SYMBOL)|(SYMBOL DOLLAR)) COLON
|
|
||||||
private static boolean LocalLabel_1(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "LocalLabel_1")) return false;
|
|
||||||
boolean r;
|
|
||||||
Marker m = enter_section_(b);
|
|
||||||
r = LocalLabel_1_0(b, l + 1);
|
|
||||||
r = r && LocalLabel_1_1(b, l + 1);
|
|
||||||
r = r && consumeToken(b, COLON);
|
|
||||||
exit_section_(b, m, null, r);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
// WHITE_SPACE?
|
|
||||||
private static boolean LocalLabel_1_0(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "LocalLabel_1_0")) return false;
|
|
||||||
consumeToken(b, WHITE_SPACE);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// (DOT SYMBOL)|(SYMBOL DOLLAR)
|
|
||||||
private static boolean LocalLabel_1_1(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "LocalLabel_1_1")) return false;
|
|
||||||
boolean r;
|
|
||||||
Marker m = enter_section_(b);
|
|
||||||
r = LocalLabel_1_1_0(b, l + 1);
|
|
||||||
if (!r) r = LocalLabel_1_1_1(b, l + 1);
|
|
||||||
exit_section_(b, m, null, r);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
// DOT SYMBOL
|
|
||||||
private static boolean LocalLabel_1_1_0(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "LocalLabel_1_1_0")) return false;
|
|
||||||
boolean r;
|
|
||||||
Marker m = enter_section_(b);
|
|
||||||
r = consumeTokens(b, 0, DOT, SYMBOL);
|
|
||||||
exit_section_(b, m, null, r);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
// SYMBOL DOLLAR
|
|
||||||
private static boolean LocalLabel_1_1_1(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "LocalLabel_1_1_1")) return false;
|
|
||||||
boolean r;
|
|
||||||
Marker m = enter_section_(b);
|
|
||||||
r = consumeTokens(b, 0, SYMBOL, DOLLAR);
|
|
||||||
exit_section_(b, m, null, r);
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -851,7 +651,7 @@ public class M68kParser implements PsiParser, LightPsiParser {
|
|||||||
// | REPT_TAG
|
// | REPT_TAG
|
||||||
// | REPT_END_TAG
|
// | REPT_END_TAG
|
||||||
// | FAIL_TAG)
|
// | FAIL_TAG)
|
||||||
// (WHITE_SPACE PreprocessorOperands)?
|
// PreprocessorOperands?
|
||||||
public static boolean PreprocessorDirective(PsiBuilder b, int l) {
|
public static boolean PreprocessorDirective(PsiBuilder b, int l) {
|
||||||
if (!recursion_guard_(b, l, "PreprocessorDirective")) return false;
|
if (!recursion_guard_(b, l, "PreprocessorDirective")) return false;
|
||||||
boolean r;
|
boolean r;
|
||||||
@ -904,24 +704,13 @@ public class M68kParser implements PsiParser, LightPsiParser {
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
// (WHITE_SPACE PreprocessorOperands)?
|
// PreprocessorOperands?
|
||||||
private static boolean PreprocessorDirective_2(PsiBuilder b, int l) {
|
private static boolean PreprocessorDirective_2(PsiBuilder b, int l) {
|
||||||
if (!recursion_guard_(b, l, "PreprocessorDirective_2")) return false;
|
if (!recursion_guard_(b, l, "PreprocessorDirective_2")) return false;
|
||||||
PreprocessorDirective_2_0(b, l + 1);
|
PreprocessorOperands(b, l + 1);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// WHITE_SPACE PreprocessorOperands
|
|
||||||
private static boolean PreprocessorDirective_2_0(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "PreprocessorDirective_2_0")) return false;
|
|
||||||
boolean r;
|
|
||||||
Marker m = enter_section_(b);
|
|
||||||
r = consumeToken(b, WHITE_SPACE);
|
|
||||||
r = r && PreprocessorOperands(b, l + 1);
|
|
||||||
exit_section_(b, m, null, r);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ********************************************************** */
|
/* ********************************************************** */
|
||||||
// expr
|
// expr
|
||||||
static boolean PreprocessorOperand(PsiBuilder b, int l) {
|
static boolean PreprocessorOperand(PsiBuilder b, int l) {
|
||||||
@ -1047,6 +836,73 @@ public class M68kParser implements PsiParser, LightPsiParser {
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ********************************************************** */
|
||||||
|
// (DataOrAddressRegister|RegisterRange) (OP_AR_DIV (DataOrAddressRegister|RegisterRange))*
|
||||||
|
public static boolean RegisterListAddressingMode(PsiBuilder b, int l) {
|
||||||
|
if (!recursion_guard_(b, l, "RegisterListAddressingMode")) return false;
|
||||||
|
if (!nextTokenIsFast(b, AREG, DREG)) return false;
|
||||||
|
boolean r;
|
||||||
|
Marker m = enter_section_(b, l, _NONE_, REGISTER_LIST_ADDRESSING_MODE, "<AddressingMode>");
|
||||||
|
r = RegisterListAddressingMode_0(b, l + 1);
|
||||||
|
r = r && RegisterListAddressingMode_1(b, l + 1);
|
||||||
|
exit_section_(b, l, m, r, false, null);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
// DataOrAddressRegister|RegisterRange
|
||||||
|
private static boolean RegisterListAddressingMode_0(PsiBuilder b, int l) {
|
||||||
|
if (!recursion_guard_(b, l, "RegisterListAddressingMode_0")) return false;
|
||||||
|
boolean r;
|
||||||
|
r = DataOrAddressRegister(b, l + 1);
|
||||||
|
if (!r) r = RegisterRange(b, l + 1);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
// (OP_AR_DIV (DataOrAddressRegister|RegisterRange))*
|
||||||
|
private static boolean RegisterListAddressingMode_1(PsiBuilder b, int l) {
|
||||||
|
if (!recursion_guard_(b, l, "RegisterListAddressingMode_1")) return false;
|
||||||
|
while (true) {
|
||||||
|
int c = current_position_(b);
|
||||||
|
if (!RegisterListAddressingMode_1_0(b, l + 1)) break;
|
||||||
|
if (!empty_element_parsed_guard_(b, "RegisterListAddressingMode_1", c)) break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// OP_AR_DIV (DataOrAddressRegister|RegisterRange)
|
||||||
|
private static boolean RegisterListAddressingMode_1_0(PsiBuilder b, int l) {
|
||||||
|
if (!recursion_guard_(b, l, "RegisterListAddressingMode_1_0")) return false;
|
||||||
|
boolean r;
|
||||||
|
Marker m = enter_section_(b);
|
||||||
|
r = consumeTokenFast(b, OP_AR_DIV);
|
||||||
|
r = r && RegisterListAddressingMode_1_0_1(b, l + 1);
|
||||||
|
exit_section_(b, m, null, r);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
// DataOrAddressRegister|RegisterRange
|
||||||
|
private static boolean RegisterListAddressingMode_1_0_1(PsiBuilder b, int l) {
|
||||||
|
if (!recursion_guard_(b, l, "RegisterListAddressingMode_1_0_1")) return false;
|
||||||
|
boolean r;
|
||||||
|
r = DataOrAddressRegister(b, l + 1);
|
||||||
|
if (!r) r = RegisterRange(b, l + 1);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ********************************************************** */
|
||||||
|
// DataOrAddressRegister OP_MINUS DataOrAddressRegister
|
||||||
|
static boolean RegisterRange(PsiBuilder b, int l) {
|
||||||
|
if (!recursion_guard_(b, l, "RegisterRange")) return false;
|
||||||
|
if (!nextTokenIs(b, "", AREG, DREG)) return false;
|
||||||
|
boolean r;
|
||||||
|
Marker m = enter_section_(b);
|
||||||
|
r = DataOrAddressRegister(b, l + 1);
|
||||||
|
r = r && consumeToken(b, OP_MINUS);
|
||||||
|
r = r && DataOrAddressRegister(b, l + 1);
|
||||||
|
exit_section_(b, m, null, r);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
/* ********************************************************** */
|
/* ********************************************************** */
|
||||||
// REG_CCR | REG_SR | REG_USP | REG_VBR
|
// REG_CCR | REG_SR | REG_USP | REG_VBR
|
||||||
public static boolean SpecialRegister(PsiBuilder b, int l) {
|
public static boolean SpecialRegister(PsiBuilder b, int l) {
|
||||||
@ -1099,7 +955,6 @@ public class M68kParser implements PsiParser, LightPsiParser {
|
|||||||
// Assignment
|
// Assignment
|
||||||
// | PreprocessorDirective
|
// | PreprocessorDirective
|
||||||
// | LabelInsts
|
// | LabelInsts
|
||||||
// | BlankLine
|
|
||||||
public static boolean statement(PsiBuilder b, int l) {
|
public static boolean statement(PsiBuilder b, int l) {
|
||||||
if (!recursion_guard_(b, l, "statement")) return false;
|
if (!recursion_guard_(b, l, "statement")) return false;
|
||||||
boolean r;
|
boolean r;
|
||||||
@ -1107,7 +962,6 @@ public class M68kParser implements PsiParser, LightPsiParser {
|
|||||||
r = Assignment(b, l + 1);
|
r = Assignment(b, l + 1);
|
||||||
if (!r) r = PreprocessorDirective(b, l + 1);
|
if (!r) r = PreprocessorDirective(b, l + 1);
|
||||||
if (!r) r = LabelInsts(b, l + 1);
|
if (!r) r = LabelInsts(b, l + 1);
|
||||||
if (!r) r = BlankLine(b, l + 1);
|
|
||||||
exit_section_(b, l, m, r, false, M68kParser::statement_recover);
|
exit_section_(b, l, m, r, false, M68kParser::statement_recover);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
@ -1170,7 +1024,7 @@ public class M68kParser implements PsiParser, LightPsiParser {
|
|||||||
} else if (g < 2 && consumeTokenSmart(b, OP_CMP_EQ)) {
|
} else if (g < 2 && consumeTokenSmart(b, OP_CMP_EQ)) {
|
||||||
r = expr(b, l, 2);
|
r = expr(b, l, 2);
|
||||||
exit_section_(b, l, m, BINARY_CMP_EQ_EXPR, r, true, null);
|
exit_section_(b, l, m, BINARY_CMP_EQ_EXPR, r, true, null);
|
||||||
} else if (g < 2 && binary_cmp_ne_expr_0(b, l + 1)) {
|
} else if (g < 2 && consumeTokenSmart(b, OP_CMP_NOT_EQ)) {
|
||||||
r = expr(b, l, 2);
|
r = expr(b, l, 2);
|
||||||
exit_section_(b, l, m, BINARY_CMP_NE_EXPR, r, true, null);
|
exit_section_(b, l, m, BINARY_CMP_NE_EXPR, r, true, null);
|
||||||
} else if (g < 3 && consumeTokenSmart(b, OP_CMP_LT)) {
|
} else if (g < 3 && consumeTokenSmart(b, OP_CMP_LT)) {
|
||||||
@ -1223,15 +1077,6 @@ public class M68kParser implements PsiParser, LightPsiParser {
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
// OP_CMP_NOT_EQ|OP_CMP_NOT_EQ2
|
|
||||||
private static boolean binary_cmp_ne_expr_0(PsiBuilder b, int l) {
|
|
||||||
if (!recursion_guard_(b, l, "binary_cmp_ne_expr_0")) return false;
|
|
||||||
boolean r;
|
|
||||||
r = consumeTokenSmart(b, OP_CMP_NOT_EQ);
|
|
||||||
if (!r) r = consumeTokenSmart(b, OP_CMP_NOT_EQ2);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean unary_plus_expr(PsiBuilder b, int l) {
|
public static boolean unary_plus_expr(PsiBuilder b, int l) {
|
||||||
if (!recursion_guard_(b, l, "unary_plus_expr")) return false;
|
if (!recursion_guard_(b, l, "unary_plus_expr")) return false;
|
||||||
if (!nextTokenIsSmart(b, OP_PLUS)) return false;
|
if (!nextTokenIsSmart(b, OP_PLUS)) return false;
|
||||||
|
@ -13,7 +13,4 @@ public interface M68kAsmInstruction extends PsiElement {
|
|||||||
@Nullable
|
@Nullable
|
||||||
M68kAsmOperands getAsmOperands();
|
M68kAsmOperands getAsmOperands();
|
||||||
|
|
||||||
@Nullable
|
|
||||||
PsiElement getWhiteSpace();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,6 @@ public interface M68kAsmOp extends PsiElement {
|
|||||||
M68kOperandSize getOperandSize();
|
M68kOperandSize getOperandSize();
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
PsiElement getSymbol();
|
PsiElement getMnemonic();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,17 +3,10 @@ package de.platon42.intellij.plugins.m68k.psi;
|
|||||||
|
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
public interface M68kAssignment extends PsiElement {
|
public interface M68kAssignment extends PsiElement {
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
M68kExpr getExpr();
|
M68kExpr getExpr();
|
||||||
|
|
||||||
@Nullable
|
|
||||||
PsiElement getEqu();
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
PsiElement getSymbol();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,16 +1,6 @@
|
|||||||
// This is a generated file. Not intended for manual editing.
|
// This is a generated file. Not intended for manual editing.
|
||||||
package de.platon42.intellij.plugins.m68k.psi;
|
package de.platon42.intellij.plugins.m68k.psi;
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement;
|
public interface M68kGlobalLabel extends M68kLabel {
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
public interface M68kGlobalLabel extends PsiElement {
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
PsiElement getSymbol();
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
PsiElement getWhiteSpace();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
// This is a generated file. Not intended for manual editing.
|
||||||
|
package de.platon42.intellij.plugins.m68k.psi;
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiElement;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
public interface M68kInstruction extends PsiElement {
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
M68kAsmInstruction getAsmInstruction();
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
M68kMacroCall getMacroCall();
|
||||||
|
|
||||||
|
}
|
@ -2,14 +2,7 @@
|
|||||||
package de.platon42.intellij.plugins.m68k.psi;
|
package de.platon42.intellij.plugins.m68k.psi;
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
public interface M68kLabel extends PsiElement {
|
public interface M68kLabel extends PsiElement {
|
||||||
|
|
||||||
@Nullable
|
|
||||||
M68kGlobalLabel getGlobalLabel();
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
M68kLocalLabel getLocalLabel();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,16 +1,6 @@
|
|||||||
// This is a generated file. Not intended for manual editing.
|
// This is a generated file. Not intended for manual editing.
|
||||||
package de.platon42.intellij.plugins.m68k.psi;
|
package de.platon42.intellij.plugins.m68k.psi;
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement;
|
public interface M68kLocalLabel extends M68kLabel {
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
public interface M68kLocalLabel extends PsiElement {
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
PsiElement getSymbol();
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
PsiElement getWhiteSpace();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -12,52 +12,10 @@ public interface M68kPreprocessorDirective extends PsiElement {
|
|||||||
@NotNull
|
@NotNull
|
||||||
List<M68kExpr> getExprList();
|
List<M68kExpr> getExprList();
|
||||||
|
|
||||||
@Nullable
|
|
||||||
PsiElement getCnopTag();
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
PsiElement getElseTag();
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
PsiElement getEndcTag();
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
PsiElement getEndTag();
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
PsiElement getEvenTag();
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
PsiElement getFailTag();
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
PsiElement getIfTag();
|
PsiElement getIfTag();
|
||||||
|
|
||||||
@Nullable
|
|
||||||
PsiElement getIncbinTag();
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
PsiElement getIncludeTag();
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
PsiElement getMacroEndTag();
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
PsiElement getMacroTag();
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
PsiElement getReptEndTag();
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
PsiElement getReptTag();
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
PsiElement getSectionTag();
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
PsiElement getSymbol();
|
PsiElement getSymbol();
|
||||||
|
|
||||||
@Nullable
|
|
||||||
PsiElement getWhiteSpace();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
// This is a generated file. Not intended for manual editing.
|
// This is a generated file. Not intended for manual editing.
|
||||||
package de.platon42.intellij.plugins.m68k.psi;
|
package de.platon42.intellij.plugins.m68k.psi;
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public interface M68kProgramCounterIndirectWithDisplacementNewAddressingMode extends M68kAddressingMode {
|
public interface M68kProgramCounterIndirectWithDisplacementNewAddressingMode extends M68kAddressingMode {
|
||||||
@ -9,7 +8,4 @@ public interface M68kProgramCounterIndirectWithDisplacementNewAddressingMode ext
|
|||||||
@NotNull
|
@NotNull
|
||||||
M68kExpr getExpr();
|
M68kExpr getExpr();
|
||||||
|
|
||||||
@NotNull
|
|
||||||
PsiElement getPc();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
// This is a generated file. Not intended for manual editing.
|
// This is a generated file. Not intended for manual editing.
|
||||||
package de.platon42.intellij.plugins.m68k.psi;
|
package de.platon42.intellij.plugins.m68k.psi;
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public interface M68kProgramCounterIndirectWithDisplacementOldAddressingMode extends M68kAddressingMode {
|
public interface M68kProgramCounterIndirectWithDisplacementOldAddressingMode extends M68kAddressingMode {
|
||||||
@ -9,7 +8,4 @@ public interface M68kProgramCounterIndirectWithDisplacementOldAddressingMode ext
|
|||||||
@NotNull
|
@NotNull
|
||||||
M68kExpr getExpr();
|
M68kExpr getExpr();
|
||||||
|
|
||||||
@NotNull
|
|
||||||
PsiElement getPc();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
// This is a generated file. Not intended for manual editing.
|
// This is a generated file. Not intended for manual editing.
|
||||||
package de.platon42.intellij.plugins.m68k.psi;
|
package de.platon42.intellij.plugins.m68k.psi;
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@ -16,7 +15,4 @@ public interface M68kProgramCounterIndirectWithIndexNewAddressingMode extends M6
|
|||||||
@NotNull
|
@NotNull
|
||||||
M68kExpr getExpr();
|
M68kExpr getExpr();
|
||||||
|
|
||||||
@NotNull
|
|
||||||
PsiElement getPc();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
// This is a generated file. Not intended for manual editing.
|
// This is a generated file. Not intended for manual editing.
|
||||||
package de.platon42.intellij.plugins.m68k.psi;
|
package de.platon42.intellij.plugins.m68k.psi;
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@ -16,7 +15,4 @@ public interface M68kProgramCounterIndirectWithIndexOldAddressingMode extends M6
|
|||||||
@NotNull
|
@NotNull
|
||||||
M68kExpr getExpr();
|
M68kExpr getExpr();
|
||||||
|
|
||||||
@NotNull
|
|
||||||
PsiElement getPc();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,21 +1,6 @@
|
|||||||
// This is a generated file. Not intended for manual editing.
|
// This is a generated file. Not intended for manual editing.
|
||||||
package de.platon42.intellij.plugins.m68k.psi;
|
package de.platon42.intellij.plugins.m68k.psi;
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
public interface M68kSpecialRegister extends M68kRegister {
|
public interface M68kSpecialRegister extends M68kRegister {
|
||||||
|
|
||||||
@Nullable
|
|
||||||
PsiElement getRegCcr();
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
PsiElement getRegSr();
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
PsiElement getRegUsp();
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
PsiElement getRegVbr();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,9 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
|
|
||||||
public interface M68kStatement extends PsiElement {
|
public interface M68kStatement extends PsiElement {
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
M68kAsmInstruction getAsmInstruction();
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
M68kAssignment getAssignment();
|
M68kAssignment getAssignment();
|
||||||
|
|
||||||
@ -13,9 +16,9 @@ public interface M68kStatement extends PsiElement {
|
|||||||
M68kLabel getLabel();
|
M68kLabel getLabel();
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
M68kPreprocessorDirective getPreprocessorDirective();
|
M68kMacroCall getMacroCall();
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
PsiElement getWhiteSpace();
|
M68kPreprocessorDirective getPreprocessorDirective();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -61,6 +61,7 @@ public interface M68kTypes {
|
|||||||
IElementType PROGRAM_COUNTER_INDIRECT_WITH_INDEX_OLD_ADDRESSING_MODE = new M68kElementType("PROGRAM_COUNTER_INDIRECT_WITH_INDEX_OLD_ADDRESSING_MODE");
|
IElementType PROGRAM_COUNTER_INDIRECT_WITH_INDEX_OLD_ADDRESSING_MODE = new M68kElementType("PROGRAM_COUNTER_INDIRECT_WITH_INDEX_OLD_ADDRESSING_MODE");
|
||||||
IElementType REF_EXPR = new M68kElementType("REF_EXPR");
|
IElementType REF_EXPR = new M68kElementType("REF_EXPR");
|
||||||
IElementType REGISTER = new M68kElementType("REGISTER");
|
IElementType REGISTER = new M68kElementType("REGISTER");
|
||||||
|
IElementType REGISTER_LIST_ADDRESSING_MODE = new M68kElementType("REGISTER_LIST_ADDRESSING_MODE");
|
||||||
IElementType SPECIAL_REGISTER = new M68kElementType("SPECIAL_REGISTER");
|
IElementType SPECIAL_REGISTER = new M68kElementType("SPECIAL_REGISTER");
|
||||||
IElementType SPECIAL_REGISTER_DIRECT_ADDRESSING_MODE = new M68kElementType("SPECIAL_REGISTER_DIRECT_ADDRESSING_MODE");
|
IElementType SPECIAL_REGISTER_DIRECT_ADDRESSING_MODE = new M68kElementType("SPECIAL_REGISTER_DIRECT_ADDRESSING_MODE");
|
||||||
IElementType STATEMENT = new M68kElementType("STATEMENT");
|
IElementType STATEMENT = new M68kElementType("STATEMENT");
|
||||||
@ -71,27 +72,30 @@ public interface M68kTypes {
|
|||||||
|
|
||||||
IElementType AREG = new M68kTokenType("AREG");
|
IElementType AREG = new M68kTokenType("AREG");
|
||||||
IElementType BINARY = new M68kTokenType("BINARY");
|
IElementType BINARY = new M68kTokenType("BINARY");
|
||||||
IElementType CNOP_TAG = new M68kTokenType("CNOP_TAG");
|
IElementType CNOP_TAG = new M68kTokenType("cnop");
|
||||||
IElementType COLON = new M68kTokenType(":");
|
IElementType COLON = new M68kTokenType(":");
|
||||||
IElementType COMMENT = new M68kTokenType("COMMENT");
|
IElementType COMMENT = new M68kTokenType("COMMENT");
|
||||||
IElementType DECIMAL = new M68kTokenType("DECIMAL");
|
IElementType DECIMAL = new M68kTokenType("DECIMAL");
|
||||||
IElementType DOLLAR = new M68kTokenType("$");
|
IElementType DOLLAR = new M68kTokenType("$");
|
||||||
IElementType DOT = new M68kTokenType(".");
|
IElementType DOT = new M68kTokenType(".");
|
||||||
IElementType DREG = new M68kTokenType("DREG");
|
IElementType DREG = new M68kTokenType("DREG");
|
||||||
IElementType ELSE_TAG = new M68kTokenType("ELSE_TAG");
|
IElementType ELSE_TAG = new M68kTokenType("else");
|
||||||
IElementType ENDC_TAG = new M68kTokenType("ENDC_TAG");
|
IElementType ENDC_TAG = new M68kTokenType("endc");
|
||||||
IElementType END_TAG = new M68kTokenType("END_TAG");
|
IElementType END_TAG = new M68kTokenType("end");
|
||||||
IElementType EOL = new M68kTokenType("EOL");
|
IElementType EOL = new M68kTokenType("EOL");
|
||||||
IElementType EQU = new M68kTokenType("EQU");
|
IElementType EQU = new M68kTokenType("equ");
|
||||||
IElementType EVEN_TAG = new M68kTokenType("EVEN_TAG");
|
IElementType EVEN_TAG = new M68kTokenType("even");
|
||||||
IElementType FAIL_TAG = new M68kTokenType("FAIL_TAG");
|
IElementType FAIL_TAG = new M68kTokenType("fail");
|
||||||
|
IElementType GLOBAL_LABEL_DEF = new M68kTokenType("GLOBAL_LABEL_DEF");
|
||||||
IElementType HASH = new M68kTokenType("#");
|
IElementType HASH = new M68kTokenType("#");
|
||||||
IElementType HEXADECIMAL = new M68kTokenType("HEXADECIMAL");
|
IElementType HEXADECIMAL = new M68kTokenType("HEXADECIMAL");
|
||||||
IElementType IF_TAG = new M68kTokenType("IF_TAG");
|
IElementType IF_TAG = new M68kTokenType("IF_TAG");
|
||||||
IElementType INCBIN_TAG = new M68kTokenType("INCBIN_TAG");
|
IElementType INCBIN_TAG = new M68kTokenType("incbin");
|
||||||
IElementType INCLUDE_TAG = new M68kTokenType("INCLUDE_TAG");
|
IElementType INCLUDE_TAG = new M68kTokenType("include");
|
||||||
IElementType MACRO_END_TAG = new M68kTokenType("MACRO_END_TAG");
|
IElementType LOCAL_LABEL_DEF = new M68kTokenType("LOCAL_LABEL_DEF");
|
||||||
IElementType MACRO_TAG = new M68kTokenType("MACRO_TAG");
|
IElementType MACRO_END_TAG = new M68kTokenType("endm");
|
||||||
|
IElementType MACRO_TAG = new M68kTokenType("macro");
|
||||||
|
IElementType MNEMONIC = new M68kTokenType("MNEMONIC");
|
||||||
IElementType OCTAL = new M68kTokenType("OCTAL");
|
IElementType OCTAL = new M68kTokenType("OCTAL");
|
||||||
IElementType OPSIZE_BS = new M68kTokenType("OPSIZE_BS");
|
IElementType OPSIZE_BS = new M68kTokenType("OPSIZE_BS");
|
||||||
IElementType OPSIZE_WL = new M68kTokenType("OPSIZE_WL");
|
IElementType OPSIZE_WL = new M68kTokenType("OPSIZE_WL");
|
||||||
@ -110,105 +114,148 @@ public interface M68kTypes {
|
|||||||
IElementType OP_CMP_LT = new M68kTokenType("<");
|
IElementType OP_CMP_LT = new M68kTokenType("<");
|
||||||
IElementType OP_CMP_LT_EQ = new M68kTokenType("<=");
|
IElementType OP_CMP_LT_EQ = new M68kTokenType("<=");
|
||||||
IElementType OP_CMP_NOT_EQ = new M68kTokenType("!=");
|
IElementType OP_CMP_NOT_EQ = new M68kTokenType("!=");
|
||||||
IElementType OP_CMP_NOT_EQ2 = new M68kTokenType("<>");
|
|
||||||
IElementType OP_LOGICAL_AND = new M68kTokenType("&&");
|
IElementType OP_LOGICAL_AND = new M68kTokenType("&&");
|
||||||
IElementType OP_LOGICAL_OR = new M68kTokenType("||");
|
IElementType OP_LOGICAL_OR = new M68kTokenType("||");
|
||||||
IElementType OP_MINUS = new M68kTokenType("-");
|
IElementType OP_MINUS = new M68kTokenType("-");
|
||||||
IElementType OP_PLUS = new M68kTokenType("+");
|
IElementType OP_PLUS = new M68kTokenType("+");
|
||||||
IElementType OP_UNARY_COMPL = new M68kTokenType("~");
|
IElementType OP_UNARY_COMPL = new M68kTokenType("~");
|
||||||
IElementType OP_UNARY_NOT = new M68kTokenType("!");
|
IElementType OP_UNARY_NOT = new M68kTokenType("!");
|
||||||
IElementType PC = new M68kTokenType("PC");
|
IElementType PC = new M68kTokenType("pc");
|
||||||
IElementType REG_CCR = new M68kTokenType("REG_CCR");
|
IElementType REG_CCR = new M68kTokenType("ccr");
|
||||||
IElementType REG_SR = new M68kTokenType("REG_SR");
|
IElementType REG_SR = new M68kTokenType("sr");
|
||||||
IElementType REG_USP = new M68kTokenType("REG_USP");
|
IElementType REG_USP = new M68kTokenType("usp");
|
||||||
IElementType REG_VBR = new M68kTokenType("REG_VBR");
|
IElementType REG_VBR = new M68kTokenType("vbr");
|
||||||
IElementType REPT_END_TAG = new M68kTokenType("REPT_END_TAG");
|
IElementType REPT_END_TAG = new M68kTokenType("endr");
|
||||||
IElementType REPT_TAG = new M68kTokenType("REPT_TAG");
|
IElementType REPT_TAG = new M68kTokenType("rept");
|
||||||
IElementType ROUND_L = new M68kTokenType("(");
|
IElementType ROUND_L = new M68kTokenType("(");
|
||||||
IElementType ROUND_R = new M68kTokenType(")");
|
IElementType ROUND_R = new M68kTokenType(")");
|
||||||
IElementType SECTION_TAG = new M68kTokenType("SECTION_TAG");
|
IElementType SECTION_TAG = new M68kTokenType("section");
|
||||||
IElementType SEMICOLON = new M68kTokenType(";");
|
IElementType SEMICOLON = new M68kTokenType(";");
|
||||||
IElementType SEPARATOR = new M68kTokenType(",");
|
IElementType SEPARATOR = new M68kTokenType(",");
|
||||||
IElementType SQUARE_L = new M68kTokenType("[");
|
IElementType SQUARE_L = new M68kTokenType("[");
|
||||||
IElementType SQUARE_R = new M68kTokenType("]");
|
IElementType SQUARE_R = new M68kTokenType("]");
|
||||||
IElementType STRINGLIT = new M68kTokenType("STRINGLIT");
|
IElementType STRINGLIT = new M68kTokenType("STRINGLIT");
|
||||||
IElementType SYMBOL = new M68kTokenType("SYMBOL");
|
IElementType SYMBOL = new M68kTokenType("SYMBOL");
|
||||||
IElementType WHITE_SPACE = new M68kTokenType("WHITE_SPACE");
|
IElementType SYMBOLDEF = new M68kTokenType("SYMBOLDEF");
|
||||||
|
|
||||||
class Factory {
|
class Factory {
|
||||||
public static PsiElement createElement(ASTNode node) {
|
public static PsiElement createElement(ASTNode node) {
|
||||||
IElementType type = node.getElementType();
|
IElementType type = node.getElementType();
|
||||||
if (type == ABSOLUTE_ADDRESS_ADDRESSING_MODE) return new M68kAbsoluteAddressAddressingModeImpl(node);
|
if (type == ABSOLUTE_ADDRESS_ADDRESSING_MODE) {
|
||||||
else if (type == ADDRESS_REGISTER) return new M68kAddressRegisterImpl(node);
|
return new M68kAbsoluteAddressAddressingModeImpl(node);
|
||||||
else if (type == ADDRESS_REGISTER_DIRECT_ADDRESSING_MODE)
|
} else if (type == ADDRESS_REGISTER) {
|
||||||
|
return new M68kAddressRegisterImpl(node);
|
||||||
|
} else if (type == ADDRESS_REGISTER_DIRECT_ADDRESSING_MODE) {
|
||||||
return new M68kAddressRegisterDirectAddressingModeImpl(node);
|
return new M68kAddressRegisterDirectAddressingModeImpl(node);
|
||||||
else if (type == ADDRESS_REGISTER_INDIRECT_ADDRESSING_MODE)
|
} else if (type == ADDRESS_REGISTER_INDIRECT_ADDRESSING_MODE) {
|
||||||
return new M68kAddressRegisterIndirectAddressingModeImpl(node);
|
return new M68kAddressRegisterIndirectAddressingModeImpl(node);
|
||||||
else if (type == ADDRESS_REGISTER_INDIRECT_POST_INC_ADDRESSING_MODE)
|
} else if (type == ADDRESS_REGISTER_INDIRECT_POST_INC_ADDRESSING_MODE) {
|
||||||
return new M68kAddressRegisterIndirectPostIncAddressingModeImpl(node);
|
return new M68kAddressRegisterIndirectPostIncAddressingModeImpl(node);
|
||||||
else if (type == ADDRESS_REGISTER_INDIRECT_PRE_DEC_ADDRESSING_MODE)
|
} else if (type == ADDRESS_REGISTER_INDIRECT_PRE_DEC_ADDRESSING_MODE) {
|
||||||
return new M68kAddressRegisterIndirectPreDecAddressingModeImpl(node);
|
return new M68kAddressRegisterIndirectPreDecAddressingModeImpl(node);
|
||||||
else if (type == ADDRESS_REGISTER_INDIRECT_WITH_DISPLACEMENT_NEW_ADDRESSING_MODE)
|
} else if (type == ADDRESS_REGISTER_INDIRECT_WITH_DISPLACEMENT_NEW_ADDRESSING_MODE) {
|
||||||
return new M68kAddressRegisterIndirectWithDisplacementNewAddressingModeImpl(node);
|
return new M68kAddressRegisterIndirectWithDisplacementNewAddressingModeImpl(node);
|
||||||
else if (type == ADDRESS_REGISTER_INDIRECT_WITH_DISPLACEMENT_OLD_ADDRESSING_MODE)
|
} else if (type == ADDRESS_REGISTER_INDIRECT_WITH_DISPLACEMENT_OLD_ADDRESSING_MODE) {
|
||||||
return new M68kAddressRegisterIndirectWithDisplacementOldAddressingModeImpl(node);
|
return new M68kAddressRegisterIndirectWithDisplacementOldAddressingModeImpl(node);
|
||||||
else if (type == ADDRESS_REGISTER_INDIRECT_WITH_INDEX_NEW_ADDRESSING_MODE)
|
} else if (type == ADDRESS_REGISTER_INDIRECT_WITH_INDEX_NEW_ADDRESSING_MODE) {
|
||||||
return new M68kAddressRegisterIndirectWithIndexNewAddressingModeImpl(node);
|
return new M68kAddressRegisterIndirectWithIndexNewAddressingModeImpl(node);
|
||||||
else if (type == ADDRESS_REGISTER_INDIRECT_WITH_INDEX_OLD_ADDRESSING_MODE)
|
} else if (type == ADDRESS_REGISTER_INDIRECT_WITH_INDEX_OLD_ADDRESSING_MODE) {
|
||||||
return new M68kAddressRegisterIndirectWithIndexOldAddressingModeImpl(node);
|
return new M68kAddressRegisterIndirectWithIndexOldAddressingModeImpl(node);
|
||||||
else if (type == ADDRESS_SIZE) return new M68kAddressSizeImpl(node);
|
} else if (type == ADDRESS_SIZE) {
|
||||||
else if (type == ASM_INSTRUCTION) return new M68kAsmInstructionImpl(node);
|
return new M68kAddressSizeImpl(node);
|
||||||
else if (type == ASM_OP) return new M68kAsmOpImpl(node);
|
} else if (type == ASM_INSTRUCTION) {
|
||||||
else if (type == ASM_OPERANDS) return new M68kAsmOperandsImpl(node);
|
return new M68kAsmInstructionImpl(node);
|
||||||
else if (type == ASSIGNMENT) return new M68kAssignmentImpl(node);
|
} else if (type == ASM_OP) {
|
||||||
else if (type == BINARY_ADD_EXPR) return new M68kBinaryAddExprImpl(node);
|
return new M68kAsmOpImpl(node);
|
||||||
else if (type == BINARY_BITWISE_AND_EXPR) return new M68kBinaryBitwiseAndExprImpl(node);
|
} else if (type == ASM_OPERANDS) {
|
||||||
else if (type == BINARY_BITWISE_OR_EXPR) return new M68kBinaryBitwiseOrExprImpl(node);
|
return new M68kAsmOperandsImpl(node);
|
||||||
else if (type == BINARY_BITWISE_XOR_EXPR) return new M68kBinaryBitwiseXorExprImpl(node);
|
} else if (type == ASSIGNMENT) {
|
||||||
else if (type == BINARY_CMP_EQ_EXPR) return new M68kBinaryCmpEqExprImpl(node);
|
return new M68kAssignmentImpl(node);
|
||||||
else if (type == BINARY_CMP_GE_EXPR) return new M68kBinaryCmpGeExprImpl(node);
|
} else if (type == BINARY_ADD_EXPR) {
|
||||||
else if (type == BINARY_CMP_GT_EXPR) return new M68kBinaryCmpGtExprImpl(node);
|
return new M68kBinaryAddExprImpl(node);
|
||||||
else if (type == BINARY_CMP_LE_EXPR) return new M68kBinaryCmpLeExprImpl(node);
|
} else if (type == BINARY_BITWISE_AND_EXPR) {
|
||||||
else if (type == BINARY_CMP_LT_EXPR) return new M68kBinaryCmpLtExprImpl(node);
|
return new M68kBinaryBitwiseAndExprImpl(node);
|
||||||
else if (type == BINARY_CMP_NE_EXPR) return new M68kBinaryCmpNeExprImpl(node);
|
} else if (type == BINARY_BITWISE_OR_EXPR) {
|
||||||
else if (type == BINARY_DIV_EXPR) return new M68kBinaryDivExprImpl(node);
|
return new M68kBinaryBitwiseOrExprImpl(node);
|
||||||
else if (type == BINARY_LOGICAL_AND_EXPR) return new M68kBinaryLogicalAndExprImpl(node);
|
} else if (type == BINARY_BITWISE_XOR_EXPR) {
|
||||||
else if (type == BINARY_LOGICAL_OR_EXPR) return new M68kBinaryLogicalOrExprImpl(node);
|
return new M68kBinaryBitwiseXorExprImpl(node);
|
||||||
else if (type == BINARY_MOD_EXPR) return new M68kBinaryModExprImpl(node);
|
} else if (type == BINARY_CMP_EQ_EXPR) {
|
||||||
else if (type == BINARY_MUL_EXPR) return new M68kBinaryMulExprImpl(node);
|
return new M68kBinaryCmpEqExprImpl(node);
|
||||||
else if (type == BINARY_SHIFT_L_EXPR) return new M68kBinaryShiftLExprImpl(node);
|
} else if (type == BINARY_CMP_GE_EXPR) {
|
||||||
else if (type == BINARY_SHIFT_R_EXPR) return new M68kBinaryShiftRExprImpl(node);
|
return new M68kBinaryCmpGeExprImpl(node);
|
||||||
else if (type == BINARY_SUB_EXPR) return new M68kBinarySubExprImpl(node);
|
} else if (type == BINARY_CMP_GT_EXPR) {
|
||||||
else if (type == DATA_REGISTER) return new M68kDataRegisterImpl(node);
|
return new M68kBinaryCmpGtExprImpl(node);
|
||||||
else if (type == DATA_REGISTER_DIRECT_ADDRESSING_MODE)
|
} else if (type == BINARY_CMP_LE_EXPR) {
|
||||||
|
return new M68kBinaryCmpLeExprImpl(node);
|
||||||
|
} else if (type == BINARY_CMP_LT_EXPR) {
|
||||||
|
return new M68kBinaryCmpLtExprImpl(node);
|
||||||
|
} else if (type == BINARY_CMP_NE_EXPR) {
|
||||||
|
return new M68kBinaryCmpNeExprImpl(node);
|
||||||
|
} else if (type == BINARY_DIV_EXPR) {
|
||||||
|
return new M68kBinaryDivExprImpl(node);
|
||||||
|
} else if (type == BINARY_LOGICAL_AND_EXPR) {
|
||||||
|
return new M68kBinaryLogicalAndExprImpl(node);
|
||||||
|
} else if (type == BINARY_LOGICAL_OR_EXPR) {
|
||||||
|
return new M68kBinaryLogicalOrExprImpl(node);
|
||||||
|
} else if (type == BINARY_MOD_EXPR) {
|
||||||
|
return new M68kBinaryModExprImpl(node);
|
||||||
|
} else if (type == BINARY_MUL_EXPR) {
|
||||||
|
return new M68kBinaryMulExprImpl(node);
|
||||||
|
} else if (type == BINARY_SHIFT_L_EXPR) {
|
||||||
|
return new M68kBinaryShiftLExprImpl(node);
|
||||||
|
} else if (type == BINARY_SHIFT_R_EXPR) {
|
||||||
|
return new M68kBinaryShiftRExprImpl(node);
|
||||||
|
} else if (type == BINARY_SUB_EXPR) {
|
||||||
|
return new M68kBinarySubExprImpl(node);
|
||||||
|
} else if (type == DATA_REGISTER) {
|
||||||
|
return new M68kDataRegisterImpl(node);
|
||||||
|
} else if (type == DATA_REGISTER_DIRECT_ADDRESSING_MODE) {
|
||||||
return new M68kDataRegisterDirectAddressingModeImpl(node);
|
return new M68kDataRegisterDirectAddressingModeImpl(node);
|
||||||
else if (type == DATA_WIDTH) return new M68kDataWidthImpl(node);
|
} else if (type == DATA_WIDTH) {
|
||||||
else if (type == GLOBAL_LABEL) return new M68kGlobalLabelImpl(node);
|
return new M68kDataWidthImpl(node);
|
||||||
else if (type == IMMEDIATE_DATA) return new M68kImmediateDataImpl(node);
|
} else if (type == GLOBAL_LABEL) {
|
||||||
else if (type == LABEL) return new M68kLabelImpl(node);
|
return new M68kGlobalLabelImpl(node);
|
||||||
else if (type == LITERAL_EXPR) return new M68kLiteralExprImpl(node);
|
} else if (type == IMMEDIATE_DATA) {
|
||||||
else if (type == LOCAL_LABEL) return new M68kLocalLabelImpl(node);
|
return new M68kImmediateDataImpl(node);
|
||||||
else if (type == MACRO_CALL) return new M68kMacroCallImpl(node);
|
} else if (type == LITERAL_EXPR) {
|
||||||
else if (type == OPERAND_SIZE) return new M68kOperandSizeImpl(node);
|
return new M68kLiteralExprImpl(node);
|
||||||
else if (type == PAREN_EXPR) return new M68kParenExprImpl(node);
|
} else if (type == LOCAL_LABEL) {
|
||||||
else if (type == PREPROCESSOR_DIRECTIVE) return new M68kPreprocessorDirectiveImpl(node);
|
return new M68kLocalLabelImpl(node);
|
||||||
else if (type == PROGRAM_COUNTER_INDIRECT_WITH_DISPLACEMENT_NEW_ADDRESSING_MODE)
|
} else if (type == MACRO_CALL) {
|
||||||
|
return new M68kMacroCallImpl(node);
|
||||||
|
} else if (type == OPERAND_SIZE) {
|
||||||
|
return new M68kOperandSizeImpl(node);
|
||||||
|
} else if (type == PAREN_EXPR) {
|
||||||
|
return new M68kParenExprImpl(node);
|
||||||
|
} else if (type == PREPROCESSOR_DIRECTIVE) {
|
||||||
|
return new M68kPreprocessorDirectiveImpl(node);
|
||||||
|
} else if (type == PROGRAM_COUNTER_INDIRECT_WITH_DISPLACEMENT_NEW_ADDRESSING_MODE) {
|
||||||
return new M68kProgramCounterIndirectWithDisplacementNewAddressingModeImpl(node);
|
return new M68kProgramCounterIndirectWithDisplacementNewAddressingModeImpl(node);
|
||||||
else if (type == PROGRAM_COUNTER_INDIRECT_WITH_DISPLACEMENT_OLD_ADDRESSING_MODE)
|
} else if (type == PROGRAM_COUNTER_INDIRECT_WITH_DISPLACEMENT_OLD_ADDRESSING_MODE) {
|
||||||
return new M68kProgramCounterIndirectWithDisplacementOldAddressingModeImpl(node);
|
return new M68kProgramCounterIndirectWithDisplacementOldAddressingModeImpl(node);
|
||||||
else if (type == PROGRAM_COUNTER_INDIRECT_WITH_INDEX_NEW_ADDRESSING_MODE)
|
} else if (type == PROGRAM_COUNTER_INDIRECT_WITH_INDEX_NEW_ADDRESSING_MODE) {
|
||||||
return new M68kProgramCounterIndirectWithIndexNewAddressingModeImpl(node);
|
return new M68kProgramCounterIndirectWithIndexNewAddressingModeImpl(node);
|
||||||
else if (type == PROGRAM_COUNTER_INDIRECT_WITH_INDEX_OLD_ADDRESSING_MODE)
|
} else if (type == PROGRAM_COUNTER_INDIRECT_WITH_INDEX_OLD_ADDRESSING_MODE) {
|
||||||
return new M68kProgramCounterIndirectWithIndexOldAddressingModeImpl(node);
|
return new M68kProgramCounterIndirectWithIndexOldAddressingModeImpl(node);
|
||||||
else if (type == REF_EXPR) return new M68kRefExprImpl(node);
|
} else if (type == REF_EXPR) {
|
||||||
else if (type == SPECIAL_REGISTER) return new M68kSpecialRegisterImpl(node);
|
return new M68kRefExprImpl(node);
|
||||||
else if (type == SPECIAL_REGISTER_DIRECT_ADDRESSING_MODE)
|
} else if (type == REGISTER_LIST_ADDRESSING_MODE) {
|
||||||
|
return new M68kRegisterListAddressingModeImpl(node);
|
||||||
|
} else if (type == SPECIAL_REGISTER) {
|
||||||
|
return new M68kSpecialRegisterImpl(node);
|
||||||
|
} else if (type == SPECIAL_REGISTER_DIRECT_ADDRESSING_MODE) {
|
||||||
return new M68kSpecialRegisterDirectAddressingModeImpl(node);
|
return new M68kSpecialRegisterDirectAddressingModeImpl(node);
|
||||||
else if (type == STATEMENT) return new M68kStatementImpl(node);
|
} else if (type == STATEMENT) {
|
||||||
else if (type == UNARY_COMPL_EXPR) return new M68kUnaryComplExprImpl(node);
|
return new M68kStatementImpl(node);
|
||||||
else if (type == UNARY_MINUS_EXPR) return new M68kUnaryMinusExprImpl(node);
|
} else if (type == UNARY_COMPL_EXPR) {
|
||||||
else if (type == UNARY_NOT_EXPR) return new M68kUnaryNotExprImpl(node);
|
return new M68kUnaryComplExprImpl(node);
|
||||||
else if (type == UNARY_PLUS_EXPR) return new M68kUnaryPlusExprImpl(node);
|
} else if (type == UNARY_MINUS_EXPR) {
|
||||||
|
return new M68kUnaryMinusExprImpl(node);
|
||||||
|
} else if (type == UNARY_NOT_EXPR) {
|
||||||
|
return new M68kUnaryNotExprImpl(node);
|
||||||
|
} else if (type == UNARY_PLUS_EXPR) {
|
||||||
|
return new M68kUnaryPlusExprImpl(node);
|
||||||
|
}
|
||||||
throw new AssertionError("Unknown element type: " + type);
|
throw new AssertionError("Unknown element type: " + type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -84,7 +84,7 @@ public class M68kVisitor extends PsiElementVisitor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void visitGlobalLabel(@NotNull M68kGlobalLabel o) {
|
public void visitGlobalLabel(@NotNull M68kGlobalLabel o) {
|
||||||
visitPsiElement(o);
|
visitLabel(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void visitImmediateData(@NotNull M68kImmediateData o) {
|
public void visitImmediateData(@NotNull M68kImmediateData o) {
|
||||||
@ -96,7 +96,7 @@ public class M68kVisitor extends PsiElementVisitor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void visitLocalLabel(@NotNull M68kLocalLabel o) {
|
public void visitLocalLabel(@NotNull M68kLocalLabel o) {
|
||||||
visitPsiElement(o);
|
visitLabel(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void visitMacroCall(@NotNull M68kMacroCall o) {
|
public void visitMacroCall(@NotNull M68kMacroCall o) {
|
||||||
@ -131,6 +131,10 @@ public class M68kVisitor extends PsiElementVisitor {
|
|||||||
visitPsiElement(o);
|
visitPsiElement(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void visitRegisterListAddressingMode(@NotNull M68kRegisterListAddressingMode o) {
|
||||||
|
visitAddressingMode(o);
|
||||||
|
}
|
||||||
|
|
||||||
public void visitSpecialRegister(@NotNull M68kSpecialRegister o) {
|
public void visitSpecialRegister(@NotNull M68kSpecialRegister o) {
|
||||||
visitRegister(o);
|
visitRegister(o);
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,6 @@ package de.platon42.intellij.plugins.m68k.psi.impl;
|
|||||||
|
|
||||||
import com.intellij.extapi.psi.ASTWrapperPsiElement;
|
import com.intellij.extapi.psi.ASTWrapperPsiElement;
|
||||||
import com.intellij.lang.ASTNode;
|
import com.intellij.lang.ASTNode;
|
||||||
import com.intellij.psi.PsiElement;
|
|
||||||
import com.intellij.psi.PsiElementVisitor;
|
import com.intellij.psi.PsiElementVisitor;
|
||||||
import de.platon42.intellij.plugins.m68k.psi.M68kAsmInstruction;
|
import de.platon42.intellij.plugins.m68k.psi.M68kAsmInstruction;
|
||||||
import de.platon42.intellij.plugins.m68k.psi.M68kAsmOp;
|
import de.platon42.intellij.plugins.m68k.psi.M68kAsmOp;
|
||||||
@ -12,8 +11,6 @@ import de.platon42.intellij.plugins.m68k.psi.M68kVisitor;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import static de.platon42.intellij.plugins.m68k.psi.M68kTypes.WHITE_SPACE;
|
|
||||||
|
|
||||||
public class M68kAsmInstructionImpl extends ASTWrapperPsiElement implements M68kAsmInstruction {
|
public class M68kAsmInstructionImpl extends ASTWrapperPsiElement implements M68kAsmInstruction {
|
||||||
|
|
||||||
public M68kAsmInstructionImpl(@NotNull ASTNode node) {
|
public M68kAsmInstructionImpl(@NotNull ASTNode node) {
|
||||||
@ -42,10 +39,4 @@ public class M68kAsmInstructionImpl extends ASTWrapperPsiElement implements M68k
|
|||||||
return findChildByClass(M68kAsmOperands.class);
|
return findChildByClass(M68kAsmOperands.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public PsiElement getWhiteSpace() {
|
|
||||||
return findChildByType(WHITE_SPACE);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ import de.platon42.intellij.plugins.m68k.psi.M68kVisitor;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import static de.platon42.intellij.plugins.m68k.psi.M68kTypes.SYMBOL;
|
import static de.platon42.intellij.plugins.m68k.psi.M68kTypes.MNEMONIC;
|
||||||
|
|
||||||
public class M68kAsmOpImpl extends ASTWrapperPsiElement implements M68kAsmOp {
|
public class M68kAsmOpImpl extends ASTWrapperPsiElement implements M68kAsmOp {
|
||||||
|
|
||||||
@ -37,8 +37,8 @@ public class M68kAsmOpImpl extends ASTWrapperPsiElement implements M68kAsmOp {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
public PsiElement getSymbol() {
|
public PsiElement getMnemonic() {
|
||||||
return findNotNullChildByType(SYMBOL);
|
return findNotNullChildByType(MNEMONIC);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,16 +3,11 @@ package de.platon42.intellij.plugins.m68k.psi.impl;
|
|||||||
|
|
||||||
import com.intellij.extapi.psi.ASTWrapperPsiElement;
|
import com.intellij.extapi.psi.ASTWrapperPsiElement;
|
||||||
import com.intellij.lang.ASTNode;
|
import com.intellij.lang.ASTNode;
|
||||||
import com.intellij.psi.PsiElement;
|
|
||||||
import com.intellij.psi.PsiElementVisitor;
|
import com.intellij.psi.PsiElementVisitor;
|
||||||
import de.platon42.intellij.plugins.m68k.psi.M68kAssignment;
|
import de.platon42.intellij.plugins.m68k.psi.M68kAssignment;
|
||||||
import de.platon42.intellij.plugins.m68k.psi.M68kExpr;
|
import de.platon42.intellij.plugins.m68k.psi.M68kExpr;
|
||||||
import de.platon42.intellij.plugins.m68k.psi.M68kVisitor;
|
import de.platon42.intellij.plugins.m68k.psi.M68kVisitor;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import static de.platon42.intellij.plugins.m68k.psi.M68kTypes.EQU;
|
|
||||||
import static de.platon42.intellij.plugins.m68k.psi.M68kTypes.SYMBOL;
|
|
||||||
|
|
||||||
public class M68kAssignmentImpl extends ASTWrapperPsiElement implements M68kAssignment {
|
public class M68kAssignmentImpl extends ASTWrapperPsiElement implements M68kAssignment {
|
||||||
|
|
||||||
@ -36,16 +31,4 @@ public class M68kAssignmentImpl extends ASTWrapperPsiElement implements M68kAssi
|
|||||||
return findNotNullChildByClass(M68kExpr.class);
|
return findNotNullChildByClass(M68kExpr.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public PsiElement getEqu() {
|
|
||||||
return findChildByType(EQU);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@NotNull
|
|
||||||
public PsiElement getSymbol() {
|
|
||||||
return findNotNullChildByType(SYMBOL);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,24 +1,19 @@
|
|||||||
// This is a generated file. Not intended for manual editing.
|
// This is a generated file. Not intended for manual editing.
|
||||||
package de.platon42.intellij.plugins.m68k.psi.impl;
|
package de.platon42.intellij.plugins.m68k.psi.impl;
|
||||||
|
|
||||||
import com.intellij.extapi.psi.ASTWrapperPsiElement;
|
|
||||||
import com.intellij.lang.ASTNode;
|
import com.intellij.lang.ASTNode;
|
||||||
import com.intellij.psi.PsiElement;
|
|
||||||
import com.intellij.psi.PsiElementVisitor;
|
import com.intellij.psi.PsiElementVisitor;
|
||||||
import de.platon42.intellij.plugins.m68k.psi.M68kGlobalLabel;
|
import de.platon42.intellij.plugins.m68k.psi.M68kGlobalLabel;
|
||||||
import de.platon42.intellij.plugins.m68k.psi.M68kVisitor;
|
import de.platon42.intellij.plugins.m68k.psi.M68kVisitor;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import static de.platon42.intellij.plugins.m68k.psi.M68kTypes.SYMBOL;
|
public class M68kGlobalLabelImpl extends M68kLabelImpl implements M68kGlobalLabel {
|
||||||
import static de.platon42.intellij.plugins.m68k.psi.M68kTypes.WHITE_SPACE;
|
|
||||||
|
|
||||||
public class M68kGlobalLabelImpl extends ASTWrapperPsiElement implements M68kGlobalLabel {
|
|
||||||
|
|
||||||
public M68kGlobalLabelImpl(@NotNull ASTNode node) {
|
public M68kGlobalLabelImpl(@NotNull ASTNode node) {
|
||||||
super(node);
|
super(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void accept(@NotNull M68kVisitor visitor) {
|
public void accept(@NotNull M68kVisitor visitor) {
|
||||||
visitor.visitGlobalLabel(this);
|
visitor.visitGlobalLabel(this);
|
||||||
}
|
}
|
||||||
@ -29,16 +24,4 @@ public class M68kGlobalLabelImpl extends ASTWrapperPsiElement implements M68kGlo
|
|||||||
else super.accept(visitor);
|
else super.accept(visitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@NotNull
|
|
||||||
public PsiElement getSymbol() {
|
|
||||||
return findNotNullChildByType(SYMBOL);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public PsiElement getWhiteSpace() {
|
|
||||||
return findChildByType(WHITE_SPACE);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -4,14 +4,11 @@ package de.platon42.intellij.plugins.m68k.psi.impl;
|
|||||||
import com.intellij.extapi.psi.ASTWrapperPsiElement;
|
import com.intellij.extapi.psi.ASTWrapperPsiElement;
|
||||||
import com.intellij.lang.ASTNode;
|
import com.intellij.lang.ASTNode;
|
||||||
import com.intellij.psi.PsiElementVisitor;
|
import com.intellij.psi.PsiElementVisitor;
|
||||||
import de.platon42.intellij.plugins.m68k.psi.M68kGlobalLabel;
|
|
||||||
import de.platon42.intellij.plugins.m68k.psi.M68kLabel;
|
import de.platon42.intellij.plugins.m68k.psi.M68kLabel;
|
||||||
import de.platon42.intellij.plugins.m68k.psi.M68kLocalLabel;
|
|
||||||
import de.platon42.intellij.plugins.m68k.psi.M68kVisitor;
|
import de.platon42.intellij.plugins.m68k.psi.M68kVisitor;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
public class M68kLabelImpl extends ASTWrapperPsiElement implements M68kLabel {
|
public abstract class M68kLabelImpl extends ASTWrapperPsiElement implements M68kLabel {
|
||||||
|
|
||||||
public M68kLabelImpl(@NotNull ASTNode node) {
|
public M68kLabelImpl(@NotNull ASTNode node) {
|
||||||
super(node);
|
super(node);
|
||||||
@ -27,16 +24,4 @@ public class M68kLabelImpl extends ASTWrapperPsiElement implements M68kLabel {
|
|||||||
else super.accept(visitor);
|
else super.accept(visitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public M68kGlobalLabel getGlobalLabel() {
|
|
||||||
return findChildByClass(M68kGlobalLabel.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public M68kLocalLabel getLocalLabel() {
|
|
||||||
return findChildByClass(M68kLocalLabel.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,24 +1,19 @@
|
|||||||
// This is a generated file. Not intended for manual editing.
|
// This is a generated file. Not intended for manual editing.
|
||||||
package de.platon42.intellij.plugins.m68k.psi.impl;
|
package de.platon42.intellij.plugins.m68k.psi.impl;
|
||||||
|
|
||||||
import com.intellij.extapi.psi.ASTWrapperPsiElement;
|
|
||||||
import com.intellij.lang.ASTNode;
|
import com.intellij.lang.ASTNode;
|
||||||
import com.intellij.psi.PsiElement;
|
|
||||||
import com.intellij.psi.PsiElementVisitor;
|
import com.intellij.psi.PsiElementVisitor;
|
||||||
import de.platon42.intellij.plugins.m68k.psi.M68kLocalLabel;
|
import de.platon42.intellij.plugins.m68k.psi.M68kLocalLabel;
|
||||||
import de.platon42.intellij.plugins.m68k.psi.M68kVisitor;
|
import de.platon42.intellij.plugins.m68k.psi.M68kVisitor;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import static de.platon42.intellij.plugins.m68k.psi.M68kTypes.SYMBOL;
|
public class M68kLocalLabelImpl extends M68kLabelImpl implements M68kLocalLabel {
|
||||||
import static de.platon42.intellij.plugins.m68k.psi.M68kTypes.WHITE_SPACE;
|
|
||||||
|
|
||||||
public class M68kLocalLabelImpl extends ASTWrapperPsiElement implements M68kLocalLabel {
|
|
||||||
|
|
||||||
public M68kLocalLabelImpl(@NotNull ASTNode node) {
|
public M68kLocalLabelImpl(@NotNull ASTNode node) {
|
||||||
super(node);
|
super(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void accept(@NotNull M68kVisitor visitor) {
|
public void accept(@NotNull M68kVisitor visitor) {
|
||||||
visitor.visitLocalLabel(this);
|
visitor.visitLocalLabel(this);
|
||||||
}
|
}
|
||||||
@ -29,16 +24,4 @@ public class M68kLocalLabelImpl extends ASTWrapperPsiElement implements M68kLoca
|
|||||||
else super.accept(visitor);
|
else super.accept(visitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@NotNull
|
|
||||||
public PsiElement getSymbol() {
|
|
||||||
return findNotNullChildByType(SYMBOL);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public PsiElement getWhiteSpace() {
|
|
||||||
return findChildByType(WHITE_SPACE);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,8 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static de.platon42.intellij.plugins.m68k.psi.M68kTypes.*;
|
import static de.platon42.intellij.plugins.m68k.psi.M68kTypes.IF_TAG;
|
||||||
|
import static de.platon42.intellij.plugins.m68k.psi.M68kTypes.SYMBOL;
|
||||||
|
|
||||||
public class M68kPreprocessorDirectiveImpl extends ASTWrapperPsiElement implements M68kPreprocessorDirective {
|
public class M68kPreprocessorDirectiveImpl extends ASTWrapperPsiElement implements M68kPreprocessorDirective {
|
||||||
|
|
||||||
@ -38,100 +39,16 @@ public class M68kPreprocessorDirectiveImpl extends ASTWrapperPsiElement implemen
|
|||||||
return PsiTreeUtil.getChildrenOfTypeAsList(this, M68kExpr.class);
|
return PsiTreeUtil.getChildrenOfTypeAsList(this, M68kExpr.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public PsiElement getCnopTag() {
|
|
||||||
return findChildByType(CNOP_TAG);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public PsiElement getElseTag() {
|
|
||||||
return findChildByType(ELSE_TAG);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public PsiElement getEndcTag() {
|
|
||||||
return findChildByType(ENDC_TAG);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public PsiElement getEndTag() {
|
|
||||||
return findChildByType(END_TAG);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public PsiElement getEvenTag() {
|
|
||||||
return findChildByType(EVEN_TAG);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public PsiElement getFailTag() {
|
|
||||||
return findChildByType(FAIL_TAG);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public PsiElement getIfTag() {
|
public PsiElement getIfTag() {
|
||||||
return findChildByType(IF_TAG);
|
return findChildByType(IF_TAG);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public PsiElement getIncbinTag() {
|
|
||||||
return findChildByType(INCBIN_TAG);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public PsiElement getIncludeTag() {
|
|
||||||
return findChildByType(INCLUDE_TAG);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public PsiElement getMacroEndTag() {
|
|
||||||
return findChildByType(MACRO_END_TAG);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public PsiElement getMacroTag() {
|
|
||||||
return findChildByType(MACRO_TAG);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public PsiElement getReptEndTag() {
|
|
||||||
return findChildByType(REPT_END_TAG);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public PsiElement getReptTag() {
|
|
||||||
return findChildByType(REPT_TAG);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public PsiElement getSectionTag() {
|
|
||||||
return findChildByType(SECTION_TAG);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public PsiElement getSymbol() {
|
public PsiElement getSymbol() {
|
||||||
return findChildByType(SYMBOL);
|
return findChildByType(SYMBOL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public PsiElement getWhiteSpace() {
|
|
||||||
return findChildByType(WHITE_SPACE);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,15 +2,12 @@
|
|||||||
package de.platon42.intellij.plugins.m68k.psi.impl;
|
package de.platon42.intellij.plugins.m68k.psi.impl;
|
||||||
|
|
||||||
import com.intellij.lang.ASTNode;
|
import com.intellij.lang.ASTNode;
|
||||||
import com.intellij.psi.PsiElement;
|
|
||||||
import com.intellij.psi.PsiElementVisitor;
|
import com.intellij.psi.PsiElementVisitor;
|
||||||
import de.platon42.intellij.plugins.m68k.psi.M68kExpr;
|
import de.platon42.intellij.plugins.m68k.psi.M68kExpr;
|
||||||
import de.platon42.intellij.plugins.m68k.psi.M68kProgramCounterIndirectWithDisplacementNewAddressingMode;
|
import de.platon42.intellij.plugins.m68k.psi.M68kProgramCounterIndirectWithDisplacementNewAddressingMode;
|
||||||
import de.platon42.intellij.plugins.m68k.psi.M68kVisitor;
|
import de.platon42.intellij.plugins.m68k.psi.M68kVisitor;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import static de.platon42.intellij.plugins.m68k.psi.M68kTypes.PC;
|
|
||||||
|
|
||||||
public class M68kProgramCounterIndirectWithDisplacementNewAddressingModeImpl extends M68kAddressingModeImpl implements M68kProgramCounterIndirectWithDisplacementNewAddressingMode {
|
public class M68kProgramCounterIndirectWithDisplacementNewAddressingModeImpl extends M68kAddressingModeImpl implements M68kProgramCounterIndirectWithDisplacementNewAddressingMode {
|
||||||
|
|
||||||
public M68kProgramCounterIndirectWithDisplacementNewAddressingModeImpl(@NotNull ASTNode node) {
|
public M68kProgramCounterIndirectWithDisplacementNewAddressingModeImpl(@NotNull ASTNode node) {
|
||||||
@ -34,10 +31,4 @@ public class M68kProgramCounterIndirectWithDisplacementNewAddressingModeImpl ext
|
|||||||
return findNotNullChildByClass(M68kExpr.class);
|
return findNotNullChildByClass(M68kExpr.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@NotNull
|
|
||||||
public PsiElement getPc() {
|
|
||||||
return findNotNullChildByType(PC);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,15 +2,12 @@
|
|||||||
package de.platon42.intellij.plugins.m68k.psi.impl;
|
package de.platon42.intellij.plugins.m68k.psi.impl;
|
||||||
|
|
||||||
import com.intellij.lang.ASTNode;
|
import com.intellij.lang.ASTNode;
|
||||||
import com.intellij.psi.PsiElement;
|
|
||||||
import com.intellij.psi.PsiElementVisitor;
|
import com.intellij.psi.PsiElementVisitor;
|
||||||
import de.platon42.intellij.plugins.m68k.psi.M68kExpr;
|
import de.platon42.intellij.plugins.m68k.psi.M68kExpr;
|
||||||
import de.platon42.intellij.plugins.m68k.psi.M68kProgramCounterIndirectWithDisplacementOldAddressingMode;
|
import de.platon42.intellij.plugins.m68k.psi.M68kProgramCounterIndirectWithDisplacementOldAddressingMode;
|
||||||
import de.platon42.intellij.plugins.m68k.psi.M68kVisitor;
|
import de.platon42.intellij.plugins.m68k.psi.M68kVisitor;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import static de.platon42.intellij.plugins.m68k.psi.M68kTypes.PC;
|
|
||||||
|
|
||||||
public class M68kProgramCounterIndirectWithDisplacementOldAddressingModeImpl extends M68kAddressingModeImpl implements M68kProgramCounterIndirectWithDisplacementOldAddressingMode {
|
public class M68kProgramCounterIndirectWithDisplacementOldAddressingModeImpl extends M68kAddressingModeImpl implements M68kProgramCounterIndirectWithDisplacementOldAddressingMode {
|
||||||
|
|
||||||
public M68kProgramCounterIndirectWithDisplacementOldAddressingModeImpl(@NotNull ASTNode node) {
|
public M68kProgramCounterIndirectWithDisplacementOldAddressingModeImpl(@NotNull ASTNode node) {
|
||||||
@ -34,10 +31,4 @@ public class M68kProgramCounterIndirectWithDisplacementOldAddressingModeImpl ext
|
|||||||
return findNotNullChildByClass(M68kExpr.class);
|
return findNotNullChildByClass(M68kExpr.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@NotNull
|
|
||||||
public PsiElement getPc() {
|
|
||||||
return findNotNullChildByType(PC);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,14 +2,11 @@
|
|||||||
package de.platon42.intellij.plugins.m68k.psi.impl;
|
package de.platon42.intellij.plugins.m68k.psi.impl;
|
||||||
|
|
||||||
import com.intellij.lang.ASTNode;
|
import com.intellij.lang.ASTNode;
|
||||||
import com.intellij.psi.PsiElement;
|
|
||||||
import com.intellij.psi.PsiElementVisitor;
|
import com.intellij.psi.PsiElementVisitor;
|
||||||
import de.platon42.intellij.plugins.m68k.psi.*;
|
import de.platon42.intellij.plugins.m68k.psi.*;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import static de.platon42.intellij.plugins.m68k.psi.M68kTypes.PC;
|
|
||||||
|
|
||||||
public class M68kProgramCounterIndirectWithIndexNewAddressingModeImpl extends M68kAddressingModeImpl implements M68kProgramCounterIndirectWithIndexNewAddressingMode {
|
public class M68kProgramCounterIndirectWithIndexNewAddressingModeImpl extends M68kAddressingModeImpl implements M68kProgramCounterIndirectWithIndexNewAddressingMode {
|
||||||
|
|
||||||
public M68kProgramCounterIndirectWithIndexNewAddressingModeImpl(@NotNull ASTNode node) {
|
public M68kProgramCounterIndirectWithIndexNewAddressingModeImpl(@NotNull ASTNode node) {
|
||||||
@ -45,10 +42,4 @@ public class M68kProgramCounterIndirectWithIndexNewAddressingModeImpl extends M6
|
|||||||
return findNotNullChildByClass(M68kExpr.class);
|
return findNotNullChildByClass(M68kExpr.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@NotNull
|
|
||||||
public PsiElement getPc() {
|
|
||||||
return findNotNullChildByType(PC);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,14 +2,11 @@
|
|||||||
package de.platon42.intellij.plugins.m68k.psi.impl;
|
package de.platon42.intellij.plugins.m68k.psi.impl;
|
||||||
|
|
||||||
import com.intellij.lang.ASTNode;
|
import com.intellij.lang.ASTNode;
|
||||||
import com.intellij.psi.PsiElement;
|
|
||||||
import com.intellij.psi.PsiElementVisitor;
|
import com.intellij.psi.PsiElementVisitor;
|
||||||
import de.platon42.intellij.plugins.m68k.psi.*;
|
import de.platon42.intellij.plugins.m68k.psi.*;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import static de.platon42.intellij.plugins.m68k.psi.M68kTypes.PC;
|
|
||||||
|
|
||||||
public class M68kProgramCounterIndirectWithIndexOldAddressingModeImpl extends M68kAddressingModeImpl implements M68kProgramCounterIndirectWithIndexOldAddressingMode {
|
public class M68kProgramCounterIndirectWithIndexOldAddressingModeImpl extends M68kAddressingModeImpl implements M68kProgramCounterIndirectWithIndexOldAddressingMode {
|
||||||
|
|
||||||
public M68kProgramCounterIndirectWithIndexOldAddressingModeImpl(@NotNull ASTNode node) {
|
public M68kProgramCounterIndirectWithIndexOldAddressingModeImpl(@NotNull ASTNode node) {
|
||||||
@ -45,10 +42,4 @@ public class M68kProgramCounterIndirectWithIndexOldAddressingModeImpl extends M6
|
|||||||
return findNotNullChildByClass(M68kExpr.class);
|
return findNotNullChildByClass(M68kExpr.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@NotNull
|
|
||||||
public PsiElement getPc() {
|
|
||||||
return findNotNullChildByType(PC);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,14 +2,10 @@
|
|||||||
package de.platon42.intellij.plugins.m68k.psi.impl;
|
package de.platon42.intellij.plugins.m68k.psi.impl;
|
||||||
|
|
||||||
import com.intellij.lang.ASTNode;
|
import com.intellij.lang.ASTNode;
|
||||||
import com.intellij.psi.PsiElement;
|
|
||||||
import com.intellij.psi.PsiElementVisitor;
|
import com.intellij.psi.PsiElementVisitor;
|
||||||
import de.platon42.intellij.plugins.m68k.psi.M68kSpecialRegister;
|
import de.platon42.intellij.plugins.m68k.psi.M68kSpecialRegister;
|
||||||
import de.platon42.intellij.plugins.m68k.psi.M68kVisitor;
|
import de.platon42.intellij.plugins.m68k.psi.M68kVisitor;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import static de.platon42.intellij.plugins.m68k.psi.M68kTypes.*;
|
|
||||||
|
|
||||||
public class M68kSpecialRegisterImpl extends M68kRegisterImpl implements M68kSpecialRegister {
|
public class M68kSpecialRegisterImpl extends M68kRegisterImpl implements M68kSpecialRegister {
|
||||||
|
|
||||||
@ -28,28 +24,4 @@ public class M68kSpecialRegisterImpl extends M68kRegisterImpl implements M68kSpe
|
|||||||
else super.accept(visitor);
|
else super.accept(visitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public PsiElement getRegCcr() {
|
|
||||||
return findChildByType(REG_CCR);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public PsiElement getRegSr() {
|
|
||||||
return findChildByType(REG_SR);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public PsiElement getRegUsp() {
|
|
||||||
return findChildByType(REG_USP);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Nullable
|
|
||||||
public PsiElement getRegVbr() {
|
|
||||||
return findChildByType(REG_VBR);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,14 +3,11 @@ package de.platon42.intellij.plugins.m68k.psi.impl;
|
|||||||
|
|
||||||
import com.intellij.extapi.psi.ASTWrapperPsiElement;
|
import com.intellij.extapi.psi.ASTWrapperPsiElement;
|
||||||
import com.intellij.lang.ASTNode;
|
import com.intellij.lang.ASTNode;
|
||||||
import com.intellij.psi.PsiElement;
|
|
||||||
import com.intellij.psi.PsiElementVisitor;
|
import com.intellij.psi.PsiElementVisitor;
|
||||||
import de.platon42.intellij.plugins.m68k.psi.*;
|
import de.platon42.intellij.plugins.m68k.psi.*;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import static de.platon42.intellij.plugins.m68k.psi.M68kTypes.WHITE_SPACE;
|
|
||||||
|
|
||||||
public class M68kStatementImpl extends ASTWrapperPsiElement implements M68kStatement {
|
public class M68kStatementImpl extends ASTWrapperPsiElement implements M68kStatement {
|
||||||
|
|
||||||
public M68kStatementImpl(@NotNull ASTNode node) {
|
public M68kStatementImpl(@NotNull ASTNode node) {
|
||||||
@ -27,6 +24,12 @@ public class M68kStatementImpl extends ASTWrapperPsiElement implements M68kState
|
|||||||
else super.accept(visitor);
|
else super.accept(visitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Nullable
|
||||||
|
public M68kAsmInstruction getAsmInstruction() {
|
||||||
|
return findChildByClass(M68kAsmInstruction.class);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public M68kAssignment getAssignment() {
|
public M68kAssignment getAssignment() {
|
||||||
@ -41,14 +44,14 @@ public class M68kStatementImpl extends ASTWrapperPsiElement implements M68kState
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public M68kPreprocessorDirective getPreprocessorDirective() {
|
public M68kMacroCall getMacroCall() {
|
||||||
return findChildByClass(M68kPreprocessorDirective.class);
|
return findChildByClass(M68kMacroCall.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public PsiElement getWhiteSpace() {
|
public M68kPreprocessorDirective getPreprocessorDirective() {
|
||||||
return findChildByType(WHITE_SPACE);
|
return findChildByClass(M68kPreprocessorDirective.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@ import javax.swing.Icon
|
|||||||
class M68kFileType private constructor() : LanguageFileType(M68kLanguage.INSTANCE, true) {
|
class M68kFileType private constructor() : LanguageFileType(M68kLanguage.INSTANCE, true) {
|
||||||
@NonNls
|
@NonNls
|
||||||
override fun getName(): String {
|
override fun getName(): String {
|
||||||
return "M68k"
|
return "M68k Assembler"
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getDescription(): String {
|
override fun getDescription(): String {
|
||||||
|
@ -1,6 +0,0 @@
|
|||||||
package de.platon42.intellij.plugins.m68k
|
|
||||||
|
|
||||||
object M68kMnemonics {
|
|
||||||
val mnemonics =
|
|
||||||
setOf("move", "moveq", "add", "addi", "adda", "addq", "sub", "sub", "subi", "suba", "subq", "rts", "jsr")
|
|
||||||
}
|
|
121
src/main/java/de/platon42/intellij/plugins/m68k/asm/M68kIsa.kt
Normal file
121
src/main/java/de/platon42/intellij/plugins/m68k/asm/M68kIsa.kt
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
package de.platon42.intellij.plugins.m68k.asm
|
||||||
|
|
||||||
|
enum class Machine {
|
||||||
|
MC68000
|
||||||
|
}
|
||||||
|
|
||||||
|
data class IsaData(
|
||||||
|
val mnemonic: String,
|
||||||
|
val description: String,
|
||||||
|
val machine: Machine = Machine.MC68000,
|
||||||
|
val altMnemonics: List<String> = emptyList(),
|
||||||
|
val conditionCodes: List<String> = emptyList()
|
||||||
|
)
|
||||||
|
|
||||||
|
object M68kIsa {
|
||||||
|
val conditionCodes =
|
||||||
|
listOf("cc", "ls", "cs", "lt", "eq", "mi", "f", "ne", "ge", "pl", "gt", "t", "hi", "vc", "le", "vs")
|
||||||
|
val conditionCodesBcc = conditionCodes.filterNot { it == "f" || it == "t" }
|
||||||
|
|
||||||
|
val isaData = listOf(
|
||||||
|
IsaData("abcd", "Add Decimal with Extend"),
|
||||||
|
IsaData("add", "Add"),
|
||||||
|
IsaData("adda", "Add Address"),
|
||||||
|
IsaData("addi", "Add Immediate"),
|
||||||
|
IsaData("addq", "Add Quick"),
|
||||||
|
IsaData("addx", "Add with Extend"),
|
||||||
|
IsaData("and", "Logical AND"),
|
||||||
|
IsaData("andi", "Logical AND Immediate"),
|
||||||
|
IsaData("andi", "to CCR AND Immediate to Condition Code Register"),
|
||||||
|
IsaData("andi", "to SR AND Immediate to Status Register"),
|
||||||
|
IsaData("asl", "Arithmetic Shift Left"),
|
||||||
|
IsaData("asr", "Arithmetic Shift Right"),
|
||||||
|
IsaData("bCC", "Branch Conditionally", conditionCodes = conditionCodesBcc),
|
||||||
|
IsaData("bchg", "Test Bit and Change"),
|
||||||
|
IsaData("bclr", "Test Bit and Clear"),
|
||||||
|
IsaData("bra", "Branch"),
|
||||||
|
IsaData("bset", "Test Bit and Set"),
|
||||||
|
IsaData("bsr", "Branch to Subroutine"),
|
||||||
|
IsaData("btst", "Test Bit"),
|
||||||
|
IsaData("chk", "Check Register Against Bound"),
|
||||||
|
IsaData("clr", "Clear"),
|
||||||
|
IsaData("cmp", "Compare"),
|
||||||
|
IsaData("cmpa", "Compare Address"),
|
||||||
|
IsaData("cmpi", "Compare Immediate"),
|
||||||
|
IsaData("cmpm", "Compare Memory to Memory"),
|
||||||
|
IsaData(
|
||||||
|
"dbCC",
|
||||||
|
"Test Condition, Decrement, and Branch",
|
||||||
|
altMnemonics = listOf("dbra"),
|
||||||
|
conditionCodes = conditionCodes
|
||||||
|
),
|
||||||
|
IsaData("divs", "Signed Divide"),
|
||||||
|
IsaData("divu", "Unsigned Divide"),
|
||||||
|
IsaData("eor", "Logical Exclusive-OR"),
|
||||||
|
IsaData("eori", "Logical Exclusive-OR Immediate"),
|
||||||
|
IsaData("eori", "to CCR Exclusive-OR Immediate to Condition Code Register"),
|
||||||
|
IsaData("eori", "to SR Exclusive-OR Immediate to Status Register"),
|
||||||
|
IsaData("exg", "Exchange Registers"),
|
||||||
|
IsaData("ext", "Sign Extend"),
|
||||||
|
IsaData("illegal", "Take Illegal Instruction Trap"),
|
||||||
|
IsaData("jmp", "Jump"),
|
||||||
|
IsaData("jsr", "Jump to Subroutine"),
|
||||||
|
IsaData("lea", "Load Effective Address"),
|
||||||
|
IsaData("link", "Link and Allocate"),
|
||||||
|
IsaData("lsl", "Logical Shift Left"),
|
||||||
|
IsaData("lsr", "Logical Shift Right"),
|
||||||
|
IsaData("move", "Move"),
|
||||||
|
IsaData("movea", "Move Address"),
|
||||||
|
IsaData("move", "to CCR Move to Condition Code Register"),
|
||||||
|
IsaData("move", "from SR Move from Status Register"),
|
||||||
|
IsaData("move", "to SR Move to Status Register"),
|
||||||
|
IsaData("move", "USP Move User Stack Pointer"),
|
||||||
|
IsaData("movem", "Move Multiple Registers"),
|
||||||
|
IsaData("movep", "Move Peripheral"),
|
||||||
|
IsaData("moveq", "Move Quick"),
|
||||||
|
IsaData("muls", "Signed Multiply"),
|
||||||
|
IsaData("mulu", "Unsigned Multiply"),
|
||||||
|
IsaData("nbcd", "Negate Decimal with Extend"),
|
||||||
|
IsaData("neg", "Negate"),
|
||||||
|
IsaData("negx", "Negate with Extend"),
|
||||||
|
IsaData("nop", "No Operation"),
|
||||||
|
IsaData("not", "Logical Complement"),
|
||||||
|
IsaData("or", "Logical Inclusive-OR"),
|
||||||
|
IsaData("ori", "Logical Inclusive-OR Immediate"),
|
||||||
|
IsaData("ori", "to CCR Inclusive-OR Immediate to Condition Code Register"),
|
||||||
|
IsaData("ori", "to SR Inclusive-OR Immediate to Status Register"),
|
||||||
|
IsaData("pea", "Push Effective Address"),
|
||||||
|
IsaData("reset", "Reset External Devices"),
|
||||||
|
IsaData("rol", "Rotate Left"),
|
||||||
|
IsaData("ror", "Rotate Right"),
|
||||||
|
IsaData("roxl", "Rotate with Extend Left"),
|
||||||
|
IsaData("roxr", "Rotate with Extend Right"),
|
||||||
|
IsaData("rte", "Return from Exception"),
|
||||||
|
IsaData("rtr", "Return and Restore"),
|
||||||
|
IsaData("rts", "Return from Subroutine"),
|
||||||
|
IsaData("sbcd", "Subtract Decimal with Extend"),
|
||||||
|
IsaData("sCC", "Set Conditionally", conditionCodes = conditionCodes),
|
||||||
|
IsaData("stop", "Stop"),
|
||||||
|
IsaData("sub", "Subtract"),
|
||||||
|
IsaData("suba", "Subtract Address"),
|
||||||
|
IsaData("subi", "Subtract Immediate"),
|
||||||
|
IsaData("subq", "Subtract Quick"),
|
||||||
|
IsaData("subx", "Subtract with Extend"),
|
||||||
|
IsaData("swap", "Swap Register Words"),
|
||||||
|
IsaData("tas", "Test Operand and Set"),
|
||||||
|
IsaData("trap", "Trap"),
|
||||||
|
IsaData("trapv", "Trap on Overflow"),
|
||||||
|
IsaData("tst", "Test Operand"),
|
||||||
|
IsaData("unlk", "Unlink "),
|
||||||
|
)
|
||||||
|
|
||||||
|
val mnemonics =
|
||||||
|
isaData.asSequence()
|
||||||
|
.flatMap {
|
||||||
|
if (it.conditionCodes.isEmpty()) it.altMnemonics.plus(it.mnemonic) else it.altMnemonics.plus(it.conditionCodes
|
||||||
|
.map { cc ->
|
||||||
|
it.mnemonic.replace("CC", cc)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
.toSet()
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package de.platon42.intellij.plugins.m68k.lexer
|
||||||
|
|
||||||
|
import de.platon42.intellij.plugins.m68k.asm.M68kIsa.mnemonics
|
||||||
|
|
||||||
|
object LexerUtil {
|
||||||
|
private val ASSIGNMENT_SEPARATORS = charArrayOf('=', ' ', '\t')
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
fun isAsmMnemonic(text: CharSequence) = mnemonics.contains(text.toString().lowercase())
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
fun pushbackAssignment(text: CharSequence) = text.length - 1 - text.indexOfAny(ASSIGNMENT_SEPARATORS)
|
||||||
|
}
|
@ -6,6 +6,7 @@ import com.intellij.psi.tree.IElementType;
|
|||||||
import static com.intellij.psi.TokenType.BAD_CHARACTER;
|
import static com.intellij.psi.TokenType.BAD_CHARACTER;
|
||||||
import static com.intellij.psi.TokenType.WHITE_SPACE;
|
import static com.intellij.psi.TokenType.WHITE_SPACE;
|
||||||
import static de.platon42.intellij.plugins.m68k.psi.M68kTypes.*;
|
import static de.platon42.intellij.plugins.m68k.psi.M68kTypes.*;
|
||||||
|
import static de.platon42.intellij.plugins.m68k.lexer.LexerUtil.*;
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
@ -21,48 +22,169 @@ import static de.platon42.intellij.plugins.m68k.psi.M68kTypes.*;
|
|||||||
%function advance
|
%function advance
|
||||||
%type IElementType
|
%type IElementType
|
||||||
%unicode
|
%unicode
|
||||||
|
%ignorecase
|
||||||
|
|
||||||
EOL=\R
|
EOL=\R
|
||||||
WHITE_SPACE=\s+
|
WHITE_SPACE=\s+
|
||||||
|
|
||||||
EOL=\R
|
EOL=\R
|
||||||
WHITE_SPACE=\p{Blank}+
|
WHITE_SPACE=\p{Blank}+
|
||||||
EQU=([eE][qQ][uU])
|
IF_TAG=(if[:letter:]*)
|
||||||
EVEN_TAG=((\p{Blank}+)?[eE][vV][eE][nN])
|
AREG=((a[0-7])|sp)
|
||||||
CNOP_TAG=((\p{Blank}+)?[cC][nN][oO][pP])
|
DREG=(d[0-7])
|
||||||
SECTION_TAG=((\p{Blank}+)?[sS][eE][cC][tT][iI][oO][nN])
|
ASSIGNMENT=(([:letter:]|_)(([:letter:]|[:digit:])|_)*((\p{Blank}+equ\p{Blank}+)|(\p{Blank}+set\p{Blank}+)|\p{Blank}*=\p{Blank}*))
|
||||||
INCLUDE_TAG=((\p{Blank}+)?[iI][nN][cC][lL][uU][dD][eE])
|
LOCAL_LABEL=(\.([:letter:]|_)(([:letter:]|[:digit:])|_)*:?)|(([:letter:]|_)(([:letter:]|[:digit:])|_)*\$:?)
|
||||||
INCBIN_TAG=((\p{Blank}+)?[iI][nN][cC][bB][iI][nN])
|
LOCAL_LABEL_WC=(\.([:letter:]|_)(([:letter:]|[:digit:])|_)*:)|(([:letter:]|_)(([:letter:]|[:digit:])|_)*\$:)
|
||||||
IF_TAG=((\p{Blank}+)?[iI][fF][:letter:]*)
|
GLOBAL_LABEL=(([:letter:]|_)(([:letter:]|[:digit:])|_)*:?:?)
|
||||||
ELSE_TAG=((\p{Blank}+)?[eE][lL][sS][eE])
|
GLOBAL_LABEL_WC=(([:letter:]|_)(([:letter:]|[:digit:])|_)*::?)
|
||||||
ENDC_TAG=((\p{Blank}+)?[eE][nN][dD][cC])
|
MNEMONIC=(([:letter:])+)
|
||||||
MACRO_TAG=((\p{Blank}+)?[mM][aA][cC][rR][oO])
|
SYMBOL=(([:letter:]|_|.)(([:letter:]|[:digit:])|_|\$)*)
|
||||||
MACRO_END_TAG=((\p{Blank}+)?[eE][nN][dD][mM])
|
OPSIZE_BS=(\.[bs])
|
||||||
REPT_TAG=((\p{Blank}+)?[rR][eE][pP][tT])
|
OPSIZE_WL=(\.[wl])
|
||||||
REPT_END_TAG=((\p{Blank}+)?[eE][nN][dD][rR])
|
|
||||||
FAIL_TAG=((\p{Blank}+)?[fF][aA][iI][lL])
|
|
||||||
END_TAG=((\p{Blank}+)?[eE][nN][dD]).*
|
|
||||||
AREG=(([aA][0-7])|sp|SP)
|
|
||||||
DREG=([dD][0-7])
|
|
||||||
PC=([pP][cC])
|
|
||||||
REG_CCR=([cC][cC][rR])
|
|
||||||
REG_SR=([sS][rR])
|
|
||||||
REG_USP=([uU][sS][pP])
|
|
||||||
REG_VBR=([vV][bB][rR])
|
|
||||||
SYMBOL=(([:letter:]|_)(([:letter:]|[:digit:])|_)*)
|
|
||||||
OPSIZE_BS=(\.([bB]|[sS]))
|
|
||||||
OPSIZE_WL=(\.([wW]|[lL]))
|
|
||||||
BINARY=(%[01]+)
|
BINARY=(%[01]+)
|
||||||
HEXADECIMAL=(\$[0-9a-fA-F]+)
|
HEXADECIMAL=(\$[0-9a-f]+)
|
||||||
OCTAL=(@[0-7]+)
|
OCTAL=(@[0-7]+)
|
||||||
DECIMAL=([0-9]+)
|
DECIMAL=([0-9]+)
|
||||||
STRINGLIT=(`([^`\\]|\\.)*`|'([^'\\]|\\.)*'|\"([^\"\\]|\\.)*\")|<([^`\\]|\\.)*>
|
STRINGLIT=(`([^`\\]|\\.)*`|'([^'\\]|\\.)*'|\"([^\"\\]|\\.)*\")|<([^`\\]|\\.)*>
|
||||||
COMMENT=(\p{Blank}*?[;*].*+)
|
COMMENT=([;].*+)
|
||||||
|
HASH_COMMENT=([#;*].*+)
|
||||||
|
|
||||||
|
%state NOSOL,INSTRPART,ASMINSTR,ASMOPS,ASSIGNMENT
|
||||||
|
|
||||||
%%
|
%%
|
||||||
<YYINITIAL> {
|
<YYINITIAL> {
|
||||||
{WHITE_SPACE} { return WHITE_SPACE; }
|
{WHITE_SPACE} { yybegin(NOSOL); return WHITE_SPACE; }
|
||||||
|
{EOL} { return WHITE_SPACE; }
|
||||||
|
{ASSIGNMENT} { yybegin(ASSIGNMENT); yypushback(pushbackAssignment(yytext())); return SYMBOLDEF; }
|
||||||
|
{LOCAL_LABEL} { yybegin(INSTRPART); return LOCAL_LABEL_DEF; }
|
||||||
|
{GLOBAL_LABEL} { yybegin(INSTRPART); return GLOBAL_LABEL_DEF; }
|
||||||
|
|
||||||
|
{HASH_COMMENT} { return COMMENT; }
|
||||||
|
}
|
||||||
|
|
||||||
|
<NOSOL> {
|
||||||
|
{WHITE_SPACE} { return WHITE_SPACE; }
|
||||||
|
{EOL} { yybegin(YYINITIAL); return WHITE_SPACE; }
|
||||||
|
{LOCAL_LABEL_WC} { yybegin(INSTRPART); return LOCAL_LABEL_DEF; }
|
||||||
|
{GLOBAL_LABEL_WC} { yybegin(INSTRPART); return GLOBAL_LABEL_DEF; }
|
||||||
|
{MNEMONIC} { yybegin(ASMINSTR); return isAsmMnemonic(yytext()) ? MNEMONIC : SYMBOL; }
|
||||||
|
{SYMBOL} { return SYMBOL; }
|
||||||
|
|
||||||
|
{HASH_COMMENT} { yybegin(YYINITIAL); return COMMENT; }
|
||||||
|
}
|
||||||
|
|
||||||
|
<INSTRPART> {
|
||||||
|
{WHITE_SPACE} { return WHITE_SPACE; }
|
||||||
|
{EOL} { yybegin(YYINITIAL); return EOL; }
|
||||||
|
|
||||||
|
"even" { return EVEN_TAG; }
|
||||||
|
"cnop" { return CNOP_TAG; }
|
||||||
|
"section" { return SECTION_TAG; }
|
||||||
|
"include" { return INCLUDE_TAG; }
|
||||||
|
"incbin" { return INCBIN_TAG; }
|
||||||
|
"else" { return ELSE_TAG; }
|
||||||
|
"endc" { return ENDC_TAG; }
|
||||||
|
"macro" { return MACRO_TAG; }
|
||||||
|
"endm" { return MACRO_END_TAG; }
|
||||||
|
"rept" { return REPT_TAG; }
|
||||||
|
"endr" { return REPT_END_TAG; }
|
||||||
|
"fail" { return FAIL_TAG; }
|
||||||
|
"end" { return END_TAG; }
|
||||||
|
|
||||||
|
{IF_TAG} { return IF_TAG; }
|
||||||
|
|
||||||
|
{MNEMONIC} { return isAsmMnemonic(yytext()) ? MNEMONIC : SYMBOL; }
|
||||||
|
{SYMBOL} { return SYMBOL; }
|
||||||
|
|
||||||
|
{COMMENT} { yybegin(YYINITIAL); return COMMENT; }
|
||||||
|
}
|
||||||
|
|
||||||
|
<ASMINSTR> {
|
||||||
|
{WHITE_SPACE} { yybegin(ASMOPS); return WHITE_SPACE; }
|
||||||
|
{EOL} { yybegin(YYINITIAL); return EOL; }
|
||||||
|
|
||||||
|
{OPSIZE_BS} { return OPSIZE_BS; }
|
||||||
|
{OPSIZE_WL} { return OPSIZE_WL; }
|
||||||
|
|
||||||
|
{COMMENT} { yybegin(YYINITIAL); return COMMENT; }
|
||||||
|
}
|
||||||
|
|
||||||
|
<ASSIGNMENT> {
|
||||||
|
{WHITE_SPACE} { return WHITE_SPACE; } // FIXME space optionally introduces comment
|
||||||
|
{EOL} { yybegin(YYINITIAL); return EOL; }
|
||||||
|
|
||||||
|
{BINARY} { return BINARY; }
|
||||||
|
{HEXADECIMAL} { return HEXADECIMAL; }
|
||||||
|
{OCTAL} { return OCTAL; }
|
||||||
|
{DECIMAL} { return DECIMAL; }
|
||||||
|
{STRINGLIT} { return STRINGLIT; }
|
||||||
|
|
||||||
|
"equ" { return EQU; }
|
||||||
|
"set" { return EQU; }
|
||||||
|
|
||||||
|
"<<" { return OP_AR_SHIFT_L; }
|
||||||
|
">>" { return OP_AR_SHIFT_R; }
|
||||||
|
"&&" { return OP_LOGICAL_AND; }
|
||||||
|
"||" { return OP_LOGICAL_OR; }
|
||||||
|
"==" { return OP_CMP_EQ; }
|
||||||
|
"<>" { return OP_CMP_NOT_EQ; }
|
||||||
|
">=" { return OP_CMP_GT_EQ; }
|
||||||
|
"<=" { return OP_CMP_LT_EQ; }
|
||||||
|
"!=" { return OP_CMP_NOT_EQ; }
|
||||||
|
"<" { return OP_CMP_LT; }
|
||||||
|
">" { return OP_CMP_GT; }
|
||||||
|
"&" { return OP_BITWISE_AND; }
|
||||||
|
"|" { return OP_BITWISE_OR; }
|
||||||
|
"^" { return OP_BITWISE_XOR; }
|
||||||
|
":" { return COLON; }
|
||||||
|
";" { return SEMICOLON; }
|
||||||
|
"[" { return SQUARE_L; }
|
||||||
|
"]" { return SQUARE_R; }
|
||||||
|
"(" { return ROUND_L; }
|
||||||
|
")" { return ROUND_R; }
|
||||||
|
"." { return DOT; }
|
||||||
|
"$" { return DOLLAR; }
|
||||||
|
"=" { return OP_ASSIGN; }
|
||||||
|
"!" { return OP_UNARY_NOT; }
|
||||||
|
"~" { return OP_UNARY_COMPL; }
|
||||||
|
"+" { return OP_PLUS; }
|
||||||
|
"-" { return OP_MINUS; }
|
||||||
|
"*" { return OP_AR_MUL; }
|
||||||
|
"/" { return OP_AR_DIV; }
|
||||||
|
"%" { return OP_AR_MOD; }
|
||||||
|
|
||||||
|
{SYMBOL} { return SYMBOL; }
|
||||||
|
|
||||||
|
{COMMENT} { return COMMENT; }
|
||||||
|
}
|
||||||
|
|
||||||
|
<ASMOPS> {
|
||||||
|
{WHITE_SPACE} { return WHITE_SPACE; } // FIXME space optionally introduces comment
|
||||||
|
{EOL} { yybegin(YYINITIAL); return EOL; }
|
||||||
|
|
||||||
|
{BINARY} { return BINARY; }
|
||||||
|
{HEXADECIMAL} { return HEXADECIMAL; }
|
||||||
|
{OCTAL} { return OCTAL; }
|
||||||
|
{DECIMAL} { return DECIMAL; }
|
||||||
|
{STRINGLIT} { return STRINGLIT; }
|
||||||
|
|
||||||
|
{OPSIZE_BS} { return OPSIZE_BS; }
|
||||||
|
{OPSIZE_WL} { return OPSIZE_WL; }
|
||||||
|
|
||||||
|
"<<" { return OP_AR_SHIFT_L; }
|
||||||
|
">>" { return OP_AR_SHIFT_R; }
|
||||||
|
"&&" { return OP_LOGICAL_AND; }
|
||||||
|
"||" { return OP_LOGICAL_OR; }
|
||||||
|
"==" { return OP_CMP_EQ; }
|
||||||
|
"<>" { return OP_CMP_NOT_EQ; }
|
||||||
|
">=" { return OP_CMP_GT_EQ; }
|
||||||
|
"<=" { return OP_CMP_LT_EQ; }
|
||||||
|
"!=" { return OP_CMP_NOT_EQ; }
|
||||||
|
"<" { return OP_CMP_LT; }
|
||||||
|
">" { return OP_CMP_GT; }
|
||||||
|
"&" { return OP_BITWISE_AND; }
|
||||||
|
"|" { return OP_BITWISE_OR; }
|
||||||
|
"^" { return OP_BITWISE_XOR; }
|
||||||
":" { return COLON; }
|
":" { return COLON; }
|
||||||
";" { return SEMICOLON; }
|
";" { return SEMICOLON; }
|
||||||
"[" { return SQUARE_L; }
|
"[" { return SQUARE_L; }
|
||||||
@ -81,53 +203,17 @@ COMMENT=(\p{Blank}*?[;*].*+)
|
|||||||
"*" { return OP_AR_MUL; }
|
"*" { return OP_AR_MUL; }
|
||||||
"/" { return OP_AR_DIV; }
|
"/" { return OP_AR_DIV; }
|
||||||
"%" { return OP_AR_MOD; }
|
"%" { return OP_AR_MOD; }
|
||||||
"<<" { return OP_AR_SHIFT_L; }
|
|
||||||
">>" { return OP_AR_SHIFT_R; }
|
|
||||||
"&" { return OP_BITWISE_AND; }
|
|
||||||
"|" { return OP_BITWISE_OR; }
|
|
||||||
"^" { return OP_BITWISE_XOR; }
|
|
||||||
"&&" { return OP_LOGICAL_AND; }
|
|
||||||
"||" { return OP_LOGICAL_OR; }
|
|
||||||
"==" { return OP_CMP_EQ; }
|
|
||||||
"<" { return OP_CMP_LT; }
|
|
||||||
">" { return OP_CMP_GT; }
|
|
||||||
">=" { return OP_CMP_GT_EQ; }
|
|
||||||
"<=" { return OP_CMP_LT_EQ; }
|
|
||||||
"!=" { return OP_CMP_NOT_EQ; }
|
|
||||||
"<>" { return OP_CMP_NOT_EQ2; }
|
|
||||||
|
|
||||||
{EOL} { return EOL; }
|
|
||||||
{WHITE_SPACE} { return WHITE_SPACE; }
|
|
||||||
{EQU} { return EQU; }
|
|
||||||
{EVEN_TAG} { return EVEN_TAG; }
|
|
||||||
{CNOP_TAG} { return CNOP_TAG; }
|
|
||||||
{SECTION_TAG} { return SECTION_TAG; }
|
|
||||||
{INCLUDE_TAG} { return INCLUDE_TAG; }
|
|
||||||
{INCBIN_TAG} { return INCBIN_TAG; }
|
|
||||||
{IF_TAG} { return IF_TAG; }
|
|
||||||
{ELSE_TAG} { return ELSE_TAG; }
|
|
||||||
{ENDC_TAG} { return ENDC_TAG; }
|
|
||||||
{MACRO_TAG} { return MACRO_TAG; }
|
|
||||||
{MACRO_END_TAG} { return MACRO_END_TAG; }
|
|
||||||
{REPT_TAG} { return REPT_TAG; }
|
|
||||||
{REPT_END_TAG} { return REPT_END_TAG; }
|
|
||||||
{FAIL_TAG} { return FAIL_TAG; }
|
|
||||||
{END_TAG} { return END_TAG; }
|
|
||||||
{AREG} { return AREG; }
|
{AREG} { return AREG; }
|
||||||
{DREG} { return DREG; }
|
{DREG} { return DREG; }
|
||||||
{PC} { return PC; }
|
"pc" { return PC; }
|
||||||
{REG_CCR} { return REG_CCR; }
|
"ccr" { return REG_CCR; }
|
||||||
{REG_SR} { return REG_SR; }
|
"sr" { return REG_SR; }
|
||||||
{REG_USP} { return REG_USP; }
|
"usp" { return REG_USP; }
|
||||||
{REG_VBR} { return REG_VBR; }
|
"vbr" { return REG_VBR; }
|
||||||
|
|
||||||
{SYMBOL} { return SYMBOL; }
|
{SYMBOL} { return SYMBOL; }
|
||||||
{OPSIZE_BS} { return OPSIZE_BS; }
|
|
||||||
{OPSIZE_WL} { return OPSIZE_WL; }
|
|
||||||
{BINARY} { return BINARY; }
|
|
||||||
{HEXADECIMAL} { return HEXADECIMAL; }
|
|
||||||
{OCTAL} { return OCTAL; }
|
|
||||||
{DECIMAL} { return DECIMAL; }
|
|
||||||
{STRINGLIT} { return STRINGLIT; }
|
|
||||||
{COMMENT} { return COMMENT; }
|
{COMMENT} { return COMMENT; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -30,43 +30,44 @@
|
|||||||
EOL = 'regexp:\R'
|
EOL = 'regexp:\R'
|
||||||
WHITE_SPACE = 'regexp:\p{Blank}+'
|
WHITE_SPACE = 'regexp:\p{Blank}+'
|
||||||
|
|
||||||
EQU = 'regexp:([eE][qQ][uU])'
|
EQU = 'equ'
|
||||||
|
|
||||||
EVEN_TAG = 'regexp:((\p{Blank}+)?[eE][vV][eE][nN])'
|
EVEN_TAG = 'even'
|
||||||
CNOP_TAG = 'regexp:((\p{Blank}+)?[cC][nN][oO][pP])'
|
CNOP_TAG = 'cnop'
|
||||||
SECTION_TAG = 'regexp:((\p{Blank}+)?[sS][eE][cC][tT][iI][oO][nN])'
|
SECTION_TAG = 'section'
|
||||||
|
|
||||||
INCLUDE_TAG = 'regexp:((\p{Blank}+)?[iI][nN][cC][lL][uU][dD][eE])'
|
INCLUDE_TAG = 'include'
|
||||||
INCBIN_TAG = 'regexp:((\p{Blank}+)?[iI][nN][cC][bB][iI][nN])'
|
INCBIN_TAG = 'incbin'
|
||||||
|
|
||||||
IF_TAG = 'regexp:((\p{Blank}+)?[iI][fF]\p{Alpha}*)'
|
IF_TAG = 'regexp:(if\p{Alpha}*)'
|
||||||
ELSE_TAG = 'regexp:((\p{Blank}+)?[eE][lL][sS][eE])'
|
ELSE_TAG = 'else'
|
||||||
ENDC_TAG = 'regexp:((\p{Blank}+)?[eE][nN][dD][cC])'
|
ENDC_TAG = 'endc'
|
||||||
MACRO_TAG = 'regexp:((\p{Blank}+)?[mM][aA][cC][rR][oO])'
|
MACRO_TAG = 'macro'
|
||||||
MACRO_END_TAG = 'regexp:((\p{Blank}+)?[eE][nN][dD][mM])'
|
MACRO_END_TAG = 'endm'
|
||||||
REPT_TAG = 'regexp:((\p{Blank}+)?[rR][eE][pP][tT])'
|
REPT_TAG = 'rept'
|
||||||
REPT_END_TAG = 'regexp:((\p{Blank}+)?[eE][nN][dD][rR])'
|
REPT_END_TAG = 'endr'
|
||||||
FAIL_TAG = 'regexp:((\p{Blank}+)?[fF][aA][iI][lL])'
|
FAIL_TAG = 'fail'
|
||||||
END_TAG = 'regexp:((\p{Blank}+)?[eE][nN][dD]).*'
|
END_TAG = 'end'
|
||||||
|
|
||||||
AREG = 'regexp:(([aA][0-7])|sp|SP)'
|
AREG = 'regexp:((a[0-7])|sp)'
|
||||||
DREG = 'regexp:([dD][0-7])'
|
DREG = 'regexp:(d[0-7])'
|
||||||
PC = 'regexp:([pP][cC])'
|
PC = 'pc'
|
||||||
REG_CCR = 'regexp:([cC][cC][rR])'
|
REG_CCR = 'ccr'
|
||||||
REG_SR = 'regexp:([sS][rR])'
|
REG_SR = 'sr'
|
||||||
REG_USP = 'regexp:([uU][sS][pP])'
|
REG_USP = 'usp'
|
||||||
REG_VBR = 'regexp:([vV][bB][rR])'
|
REG_VBR = 'vbr'
|
||||||
|
|
||||||
// LOCAL_LABEL = 'regexp:(!(\p{Blank}+)\.(\p{Alpha}|_)(\p{Alnum}|_)*:?)|(!(\p{Blank}+)(\p{Alpha}|_)(\p{Alnum}|_)*\$:?)|((\p{Blank}*)?\.(\p{Alpha}|_)(\p{Alnum}|_)*:)|((\p{Blank}*)?(\p{Alpha}|_)(\p{Alnum}|_)*\$:)|(\.(\p{Alpha}|_)(\p{Alnum}|_)*:)|((\p{Alpha}|_)(\p{Alnum}|_)*\$:)'
|
// ASSIGNMENT = 'regexp:((\p{Alpha}|_)(\p{Alnum}|_)*)((\p{Blank}+equ\p{Blank})|=)'
|
||||||
// GLOBAL_LABEL = 'regexp:(!(\p{Blank}+)(\p{Alpha}|_)(\p{Alnum}|_)*:?:?)|((\p{Blank}*)?(\p{Alpha}|_)(\p{Alnum}|_)*::?)'
|
// LOCAL_LABEL_OC = 'regexp:(!(\p{Blank}+)\.(\p{Alpha}|_)(\p{Alnum}|_)*:?)|(!(\p{Blank}+)(\p{Alpha}|_)(\p{Alnum}|_)*\$:?)|((\p{Blank}*)?\.(\p{Alpha}|_)(\p{Alnum}|_)*:)|((\p{Blank}*)?(\p{Alpha}|_)(\p{Alnum}|_)*\$:)|(\.(\p{Alpha}|_)(\p{Alnum}|_)*:)|((\p{Alpha}|_)(\p{Alnum}|_)*\$:)'
|
||||||
|
// GLOBAL_LABEL_OC = 'regexp:(!(\p{Blank}+)(\p{Alpha}|_)(\p{Alnum}|_)*:?:?)|((\p{Blank}*)?(\p{Alpha}|_)(\p{Alnum}|_)*::?)'
|
||||||
|
|
||||||
// MNEMONIC = 'regexp:((\p{Alpha})+)'
|
MNEMONIC = 'regexp:((\p{Alpha})+)'
|
||||||
SYMBOL = 'regexp:((\p{Alpha}|_)(\p{Alnum}|_)*)'
|
SYMBOL = 'regexp:((\p{Alpha}|_)(\p{Alnum}|_)*)'
|
||||||
OPSIZE_BS = 'regexp:(\.([bB]|[sS]))'
|
OPSIZE_BS = 'regexp:(\.[bs])'
|
||||||
OPSIZE_WL = 'regexp:(\.([wW]|[lL]))'
|
OPSIZE_WL = 'regexp:(\.[wl])'
|
||||||
|
|
||||||
BINARY = 'regexp:(%[01]+)'
|
BINARY = 'regexp:(%[01]+)'
|
||||||
HEXADECIMAL = 'regexp:(\$[0-9a-fA-F]+)'
|
HEXADECIMAL = 'regexp:(\$[0-9a-f]+)'
|
||||||
OCTAL = 'regexp:(@[0-7]+)'
|
OCTAL = 'regexp:(@[0-7]+)'
|
||||||
DECIMAL = 'regexp:([0-9]+)'
|
DECIMAL = 'regexp:([0-9]+)'
|
||||||
|
|
||||||
@ -107,7 +108,7 @@
|
|||||||
OP_CMP_GT_EQ = '>='
|
OP_CMP_GT_EQ = '>='
|
||||||
OP_CMP_LT_EQ = '<='
|
OP_CMP_LT_EQ = '<='
|
||||||
OP_CMP_NOT_EQ = '!='
|
OP_CMP_NOT_EQ = '!='
|
||||||
OP_CMP_NOT_EQ2 = '<>'
|
// OP_CMP_NOT_EQ2 = '<>'
|
||||||
|
|
||||||
COMMENT = 'regexp:(\p{Blank}*?[;*].*+)'//|(!\s#+.*+)'
|
COMMENT = 'regexp:(\p{Blank}*?[;*].*+)'//|(!\s#+.*+)'
|
||||||
// EOL_COMMENT = 'regexp:((\p{Blank}+;.*?)|(\p{Blank}+\.*+))'
|
// EOL_COMMENT = 'regexp:((\p{Blank}+;.*?)|(\p{Blank}+\.*+))'
|
||||||
@ -116,41 +117,32 @@
|
|||||||
|
|
||||||
M68kFile ::= line*
|
M68kFile ::= line*
|
||||||
|
|
||||||
private BlankLine ::= WHITE_SPACE?
|
|
||||||
|
|
||||||
private line ::= !<<eof>> statement EOL
|
private line ::= !<<eof>> statement EOL
|
||||||
|
|
||||||
statement ::= (Assignment
|
statement ::= (Assignment
|
||||||
| PreprocessorDirective
|
| PreprocessorDirective
|
||||||
| LabelInsts
|
| LabelInsts)
|
||||||
| BlankLine)
|
|
||||||
{pin=1 recoverWhile=statement_recover};
|
{pin=1 recoverWhile=statement_recover};
|
||||||
|
|
||||||
private statement_recover ::= !(EOL)
|
private statement_recover ::= !(EOL)
|
||||||
|
|
||||||
Assignment ::= SYMBOL ((WHITE_SPACE? OP_ASSIGN WHITE_SPACE?)|(WHITE_SPACE EQU WHITE_SPACE)) expr
|
Assignment ::= SYMBOLDEF (OP_ASSIGN|EQU) expr
|
||||||
|
|
||||||
private LabelInsts ::= LabelOnly|LabelWithInstruction|InstructionOnly
|
private LabelInsts ::= LabelOnly|LabelWithInstruction|InstructionOnly
|
||||||
|
|
||||||
private LabelOnly ::= Label
|
private LabelOnly ::= Label
|
||||||
private LabelWithInstruction ::= Label WHITE_SPACE Instruction
|
private LabelWithInstruction ::= Label Instruction
|
||||||
private InstructionOnly ::= WHITE_SPACE Instruction
|
private InstructionOnly ::= Instruction
|
||||||
|
|
||||||
LocalLabel ::= (!WHITE_SPACE ((DOT SYMBOL)|(SYMBOL DOLLAR)) COLON?)|(WHITE_SPACE? ((DOT SYMBOL)|(SYMBOL DOLLAR)) COLON)
|
LocalLabel ::= LOCAL_LABEL_DEF {extends=Label}
|
||||||
GlobalLabel ::= (!WHITE_SPACE SYMBOL (COLON? COLON?)?)|(WHITE_SPACE? SYMBOL COLON COLON?)
|
GlobalLabel ::= GLOBAL_LABEL_DEF {extends=Label}
|
||||||
//private Label ::= LocalLabel | GlobalLabel
|
|
||||||
|
|
||||||
//private LabelInsts ::= Label|(Label? WHITE_SPACE Instruction)
|
|
||||||
//
|
|
||||||
//LocalLabel ::= LOCAL_LABEL {extends=Label}
|
|
||||||
//GlobalLabel ::= GLOBAL_LABEL {extends=Label}
|
|
||||||
Label ::= LocalLabel | GlobalLabel
|
Label ::= LocalLabel | GlobalLabel
|
||||||
|
|
||||||
OperandSize ::= (OPSIZE_BS|OPSIZE_WL)
|
OperandSize ::= (OPSIZE_BS|OPSIZE_WL)
|
||||||
AddressSize ::= OPSIZE_WL
|
AddressSize ::= OPSIZE_WL
|
||||||
DataWidth ::= OPSIZE_WL
|
DataWidth ::= OPSIZE_WL
|
||||||
|
|
||||||
AsmOp ::= SYMBOL OperandSize?
|
AsmOp ::= MNEMONIC OperandSize?
|
||||||
|
|
||||||
PreprocessorDirective ::= SYMBOL?
|
PreprocessorDirective ::= SYMBOL?
|
||||||
(END_TAG
|
(END_TAG
|
||||||
@ -167,12 +159,12 @@ PreprocessorDirective ::= SYMBOL?
|
|||||||
| REPT_TAG
|
| REPT_TAG
|
||||||
| REPT_END_TAG
|
| REPT_END_TAG
|
||||||
| FAIL_TAG)
|
| FAIL_TAG)
|
||||||
(WHITE_SPACE PreprocessorOperands)?
|
PreprocessorOperands?
|
||||||
|
|
||||||
MacroCall ::= SYMBOL PreprocessorOperands?
|
MacroCall ::= SYMBOL PreprocessorOperands?
|
||||||
AsmInstruction ::= AsmOp (WHITE_SPACE AsmOperands)?
|
AsmInstruction ::= AsmOp AsmOperands?
|
||||||
//Instruction ::= AsmInstruction | MacroCall
|
private Instruction ::= AsmInstruction | MacroCall
|
||||||
external Instruction ::= parseMacroCallOrAsmInstruction
|
//external Instruction ::= parseMacroCallOrAsmInstruction
|
||||||
|
|
||||||
AsmOperands ::= FirstAsmOperand (SEPARATOR NextAsmOperand)*
|
AsmOperands ::= FirstAsmOperand (SEPARATOR NextAsmOperand)*
|
||||||
|
|
||||||
@ -207,11 +199,12 @@ AddressingMode ::= AbsoluteAddressAddressingMode
|
|||||||
| ProgramCounterIndirectWithIndexNewAddressingMode
|
| ProgramCounterIndirectWithIndexNewAddressingMode
|
||||||
| AddressRegisterIndirectPreDecAddressingMode
|
| AddressRegisterIndirectPreDecAddressingMode
|
||||||
| AddressRegisterIndirectPostIncAddressingMode
|
| AddressRegisterIndirectPostIncAddressingMode
|
||||||
|
| RegisterListAddressingMode
|
||||||
| ImmediateData
|
| ImmediateData
|
||||||
|
|
||||||
SpecialRegisterDirectAddressingMode ::= SpecialRegister
|
SpecialRegisterDirectAddressingMode ::= SpecialRegister
|
||||||
DataRegisterDirectAddressingMode ::= DataRegister
|
DataRegisterDirectAddressingMode ::= DataRegister !(OP_MINUS|OP_AR_DIV)
|
||||||
AddressRegisterDirectAddressingMode ::= AddressRegister
|
AddressRegisterDirectAddressingMode ::= AddressRegister !(OP_MINUS|OP_AR_DIV)
|
||||||
AddressRegisterIndirectAddressingMode ::= ROUND_L AddressRegister ROUND_R !OP_PLUS
|
AddressRegisterIndirectAddressingMode ::= ROUND_L AddressRegister ROUND_R !OP_PLUS
|
||||||
AddressRegisterIndirectPostIncAddressingMode ::= ROUND_L AddressRegister ROUND_R OP_PLUS
|
AddressRegisterIndirectPostIncAddressingMode ::= ROUND_L AddressRegister ROUND_R OP_PLUS
|
||||||
AddressRegisterIndirectPreDecAddressingMode ::= OP_MINUS ROUND_L AddressRegister ROUND_R
|
AddressRegisterIndirectPreDecAddressingMode ::= OP_MINUS ROUND_L AddressRegister ROUND_R
|
||||||
@ -224,6 +217,8 @@ ProgramCounterIndirectWithDisplacementNewAddressingMode ::= ROUND_L expr SEPARAT
|
|||||||
ProgramCounterIndirectWithIndexOldAddressingMode ::= expr ROUND_L PC SEPARATOR DataOrAddressRegister DataWidth? ROUND_R
|
ProgramCounterIndirectWithIndexOldAddressingMode ::= expr ROUND_L PC SEPARATOR DataOrAddressRegister DataWidth? ROUND_R
|
||||||
ProgramCounterIndirectWithIndexNewAddressingMode ::= ROUND_L expr SEPARATOR PC SEPARATOR DataOrAddressRegister DataWidth? ROUND_R
|
ProgramCounterIndirectWithIndexNewAddressingMode ::= ROUND_L expr SEPARATOR PC SEPARATOR DataOrAddressRegister DataWidth? ROUND_R
|
||||||
AbsoluteAddressAddressingMode ::= expr AddressSize? !ROUND_L
|
AbsoluteAddressAddressingMode ::= expr AddressSize? !ROUND_L
|
||||||
|
private RegisterRange ::= (DataOrAddressRegister OP_MINUS DataOrAddressRegister)
|
||||||
|
RegisterListAddressingMode ::= (DataOrAddressRegister|RegisterRange) (OP_AR_DIV (DataOrAddressRegister|RegisterRange))*
|
||||||
ImmediateData ::= HASH expr {extends=AddressingMode}
|
ImmediateData ::= HASH expr {extends=AddressingMode}
|
||||||
|
|
||||||
expr ::= binary_logical_or_expr
|
expr ::= binary_logical_or_expr
|
||||||
@ -268,7 +263,8 @@ binary_cmp_le_expr ::= expr OP_CMP_LT_EQ expr
|
|||||||
binary_cmp_gt_expr ::= expr OP_CMP_GT expr
|
binary_cmp_gt_expr ::= expr OP_CMP_GT expr
|
||||||
binary_cmp_ge_expr ::= expr OP_CMP_GT_EQ expr
|
binary_cmp_ge_expr ::= expr OP_CMP_GT_EQ expr
|
||||||
binary_cmp_eq_expr ::= expr OP_CMP_EQ expr
|
binary_cmp_eq_expr ::= expr OP_CMP_EQ expr
|
||||||
binary_cmp_ne_expr ::= expr (OP_CMP_NOT_EQ|OP_CMP_NOT_EQ2) expr
|
binary_cmp_ne_expr ::= expr OP_CMP_NOT_EQ expr
|
||||||
|
//binary_cmp_ne_expr ::= expr (OP_CMP_NOT_EQ|OP_CMP_NOT_EQ2) expr
|
||||||
binary_logical_and_expr ::= expr OP_LOGICAL_AND expr
|
binary_logical_and_expr ::= expr OP_LOGICAL_AND expr
|
||||||
binary_logical_or_expr ::= expr OP_LOGICAL_OR expr
|
binary_logical_or_expr ::= expr OP_LOGICAL_OR expr
|
||||||
|
|
||||||
|
@ -19,7 +19,6 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
public class M68kParserDefinition implements ParserDefinition {
|
public class M68kParserDefinition implements ParserDefinition {
|
||||||
public static final TokenSet STRING_LITERALS = TokenSet.create(M68kTypes.STRINGLIT);
|
public static final TokenSet STRING_LITERALS = TokenSet.create(M68kTypes.STRINGLIT);
|
||||||
public static final TokenSet COMMENTS = TokenSet.create(M68kTypes.COMMENT);
|
public static final TokenSet COMMENTS = TokenSet.create(M68kTypes.COMMENT);
|
||||||
public static final TokenSet WHITE_SPACE = TokenSet.create(M68kTypes.WHITE_SPACE);
|
|
||||||
|
|
||||||
public M68kParserDefinition() {
|
public M68kParserDefinition() {
|
||||||
}
|
}
|
||||||
@ -39,11 +38,6 @@ public class M68kParserDefinition implements ParserDefinition {
|
|||||||
return M68kFileElementType.INSTANCE;
|
return M68kFileElementType.INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Override
|
|
||||||
// public @NotNull TokenSet getWhitespaceTokens() {
|
|
||||||
// return WHITE_SPACE;
|
|
||||||
// }
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull TokenSet getCommentTokens() {
|
public @NotNull TokenSet getCommentTokens() {
|
||||||
return COMMENTS;
|
return COMMENTS;
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
<depends>com.intellij.modules.lang</depends>
|
<depends>com.intellij.modules.lang</depends>
|
||||||
|
|
||||||
<extensions defaultExtensionNs="com.intellij">
|
<extensions defaultExtensionNs="com.intellij">
|
||||||
<fileType name="M68k" implementationClass="de.platon42.intellij.plugins.m68k.M68kFileType"
|
<fileType name="M68k Assembler" implementationClass="de.platon42.intellij.plugins.m68k.M68kFileType"
|
||||||
fieldName="INSTANCE" language="M68k" extensions="asm;ASM;s;S;i"/>
|
fieldName="INSTANCE" language="M68k" extensions="asm;ASM;s;S;i"/>
|
||||||
<lang.parserDefinition language="M68k"
|
<lang.parserDefinition language="M68k"
|
||||||
implementationClass="de.platon42.intellij.plugins.m68k.parser.M68kParserDefinition"/>
|
implementationClass="de.platon42.intellij.plugins.m68k.parser.M68kParserDefinition"/>
|
||||||
|
Loading…
Reference in New Issue
Block a user