Added first tests, improved BNF and Lexer. Fixed extra space in assignment symbol.

This commit is contained in:
2021-07-15 12:04:05 +02:00
parent 1dc418ae84
commit 2fe70deee2
33 changed files with 982 additions and 464 deletions
@@ -0,0 +1,58 @@
Assembly File: a.asm
PsiWhiteSpace('\t')
M68kStatementImpl(STATEMENT)
M68kAsmInstructionImpl(ASM_INSTRUCTION)
M68kAsmOpImpl(ASM_OP)
PsiElement(M68kTokenType.MNEMONIC)('add')
M68kOperandSizeImpl(OPERAND_SIZE)
PsiElement(M68kTokenType.OPSIZE_WL)('.l')
PsiWhiteSpace(' ')
M68kAsmOperandsImpl(ASM_OPERANDS)
M68kDataRegisterDirectAddressingModeImpl(DATA_REGISTER_DIRECT_ADDRESSING_MODE)
M68kDataRegisterImpl(DATA_REGISTER)
PsiElement(M68kTokenType.DREG)('d0')
PsiElement(M68kTokenType.,)(',')
M68kDataRegisterDirectAddressingModeImpl(DATA_REGISTER_DIRECT_ADDRESSING_MODE)
M68kDataRegisterImpl(DATA_REGISTER)
PsiElement(M68kTokenType.DREG)('d0')
PsiElement(M68kTokenType.EOL)('\n')
PsiWhiteSpace('\t')
M68kStatementImpl(STATEMENT)
M68kAsmInstructionImpl(ASM_INSTRUCTION)
M68kAsmOpImpl(ASM_OP)
PsiElement(M68kTokenType.MNEMONIC)('moveq')
PsiWhiteSpace(' ')
M68kAsmOperandsImpl(ASM_OPERANDS)
M68kImmediateDataImpl(IMMEDIATE_DATA)
PsiElement(M68kTokenType.#)('#')
M68kLiteralExprImpl(LITERAL_EXPR)
PsiElement(M68kTokenType.DECIMAL)('10')
PsiElement(M68kTokenType.,)(',')
M68kDataRegisterDirectAddressingModeImpl(DATA_REGISTER_DIRECT_ADDRESSING_MODE)
M68kDataRegisterImpl(DATA_REGISTER)
PsiElement(M68kTokenType.DREG)('d1')
PsiElement(M68kTokenType.EOL)('\n')
PsiWhiteSpace(' ')
M68kStatementImpl(STATEMENT)
M68kAsmInstructionImpl(ASM_INSTRUCTION)
M68kAsmOpImpl(ASM_OP)
PsiElement(M68kTokenType.MNEMONIC)('rts')
PsiElement(M68kTokenType.EOL)('\n')
PsiWhiteSpace('\n')
PsiComment(M68kTokenType.COMMENT)('; comment')
PsiWhiteSpace('\n')
PsiWhiteSpace(' ')
M68kStatementImpl(STATEMENT)
M68kAsmInstructionImpl(ASM_INSTRUCTION)
M68kAsmOpImpl(ASM_OP)
PsiElement(M68kTokenType.MNEMONIC)('jmp')
PsiWhiteSpace('\t')
M68kAsmOperandsImpl(ASM_OPERANDS)
M68kAbsoluteAddressAddressingModeImpl(ABSOLUTE_ADDRESS_ADDRESSING_MODE)
M68kRefExprImpl(REF_EXPR)
PsiElement(M68kTokenType.SYMBOL)('resetcode')
PsiWhiteSpace(' ')
PsiComment(M68kTokenType.COMMENT)('; unreachable')
PsiElement(M68kTokenType.EOL)('\n')
PsiWhiteSpace(' ')
PsiWhiteSpace('\n')
@@ -0,0 +1,4 @@
Assembly File: a.asm
PsiWhiteSpace(' ')
PsiComment(M68kTokenType.COMMENT)('*********** comment')
PsiWhiteSpace('\n')
@@ -0,0 +1,3 @@
Assembly File: a.asm
PsiComment(M68kTokenType.COMMENT)('*********** comment')
PsiWhiteSpace('\n')
@@ -0,0 +1,17 @@
Assembly File: a.asm
PsiComment(M68kTokenType.COMMENT)('; hi')
PsiWhiteSpace('\n')
PsiWhiteSpace('\n')
PsiWhiteSpace('\n')
PsiWhiteSpace(' ')
PsiComment(M68kTokenType.COMMENT)('* foo')
PsiWhiteSpace('\n')
PsiWhiteSpace('\n')
PsiWhiteSpace('\n')
PsiWhiteSpace(' ')
PsiWhiteSpace('\n')
PsiWhiteSpace('\n')
PsiWhiteSpace(' ')
PsiComment(M68kTokenType.COMMENT)('# bar')
PsiWhiteSpace('\n')
PsiWhiteSpace('\n')
@@ -0,0 +1,39 @@
Assembly File: a.asm
M68kStatementImpl(STATEMENT)
M68kAssignmentImpl(ASSIGNMENT)
PsiElement(M68kTokenType.SYMBOLDEF)('foo')
PsiWhiteSpace(' ')
PsiElement(M68kTokenType.=)('=')
PsiWhiteSpace(' ')
M68kLiteralExprImpl(LITERAL_EXPR)
PsiElement(M68kTokenType.DECIMAL)('1234')
PsiComment(M68kTokenType.COMMENT)('; hi')
PsiElement(M68kTokenType.EOL)('\n')
PsiWhiteSpace('\n')
PsiWhiteSpace('\n')
M68kStatementImpl(STATEMENT)
M68kGlobalLabelImpl(GLOBAL_LABEL)
PsiElement(M68kTokenType.GLOBAL_LABEL_DEF)('label')
PsiComment(M68kTokenType.COMMENT)('; foo')
PsiElement(M68kTokenType.EOL)('\n')
PsiWhiteSpace('\n')
PsiWhiteSpace('\n')
PsiWhiteSpace(' ')
M68kStatementImpl(STATEMENT)
M68kAsmInstructionImpl(ASM_INSTRUCTION)
M68kAsmOpImpl(ASM_OP)
PsiElement(M68kTokenType.MNEMONIC)('add')
M68kOperandSizeImpl(OPERAND_SIZE)
PsiElement(M68kTokenType.OPSIZE_WL)('.w')
PsiWhiteSpace(' ')
M68kAsmOperandsImpl(ASM_OPERANDS)
M68kDataRegisterDirectAddressingModeImpl(DATA_REGISTER_DIRECT_ADDRESSING_MODE)
M68kDataRegisterImpl(DATA_REGISTER)
PsiElement(M68kTokenType.DREG)('d0')
PsiElement(M68kTokenType.,)(',')
M68kDataRegisterDirectAddressingModeImpl(DATA_REGISTER_DIRECT_ADDRESSING_MODE)
M68kDataRegisterImpl(DATA_REGISTER)
PsiElement(M68kTokenType.DREG)('d0')
PsiComment(M68kTokenType.COMMENT)(';narf ')
PsiElement(M68kTokenType.EOL)('\n')
PsiWhiteSpace('\n')
@@ -0,0 +1,4 @@
Assembly File: a.asm
PsiWhiteSpace(' ')
PsiComment(M68kTokenType.COMMENT)('#comment ')
PsiWhiteSpace('\n')
@@ -0,0 +1,3 @@
Assembly File: a.asm
PsiComment(M68kTokenType.COMMENT)('#comment ')
PsiWhiteSpace('\n')
@@ -0,0 +1,4 @@
Assembly File: a.asm
PsiWhiteSpace(' ')
PsiComment(M68kTokenType.COMMENT)('; comment ')
PsiWhiteSpace('\n')
@@ -0,0 +1,3 @@
Assembly File: a.asm
PsiComment(M68kTokenType.COMMENT)('; comment ')
PsiWhiteSpace('\n')
@@ -0,0 +1,6 @@
Assembly File: a.asm
PsiWhiteSpace(' ')
M68kStatementImpl(STATEMENT)
M68kMacroCallImpl(MACRO_CALL)
PsiElement(M68kTokenType.SYMBOL)('.local_label')
PsiElement(M68kTokenType.EOL)('\n')
@@ -0,0 +1,6 @@
Assembly File: a.asm
PsiWhiteSpace(' ')
M68kStatementImpl(STATEMENT)
M68kMacroCallImpl(MACRO_CALL)
PsiElement(M68kTokenType.SYMBOL)('local_label$')
PsiElement(M68kTokenType.EOL)('\n')
@@ -0,0 +1,104 @@
Assembly File: a.asm
M68kStatementImpl(STATEMENT)
M68kGlobalLabelImpl(GLOBAL_LABEL)
PsiElement(M68kTokenType.GLOBAL_LABEL_DEF)('start_demo:')
PsiWhiteSpace(' ')
PsiComment(M68kTokenType.COMMENT)('; here we will do some cool stuff')
PsiElement(M68kTokenType.EOL)('\n')
M68kStatementImpl(STATEMENT)
M68kLocalLabelImpl(LOCAL_LABEL)
PsiElement(M68kTokenType.LOCAL_LABEL_DEF)('.outerloop')
PsiWhiteSpace(' ')
M68kAsmInstructionImpl(ASM_INSTRUCTION)
M68kAsmOpImpl(ASM_OP)
PsiElement(M68kTokenType.MNEMONIC)('moveq')
M68kOperandSizeImpl(OPERAND_SIZE)
PsiElement(M68kTokenType.OPSIZE_WL)('.l')
PsiWhiteSpace(' ')
M68kAsmOperandsImpl(ASM_OPERANDS)
M68kImmediateDataImpl(IMMEDIATE_DATA)
PsiElement(M68kTokenType.#)('#')
M68kBinarySubExprImpl(BINARY_SUB_EXPR)
M68kLiteralExprImpl(LITERAL_EXPR)
PsiElement(M68kTokenType.DECIMAL)('17')
PsiElement(M68kTokenType.-)('-')
M68kLiteralExprImpl(LITERAL_EXPR)
PsiElement(M68kTokenType.DECIMAL)('1')
PsiElement(M68kTokenType.,)(',')
M68kDataRegisterDirectAddressingModeImpl(DATA_REGISTER_DIRECT_ADDRESSING_MODE)
M68kDataRegisterImpl(DATA_REGISTER)
PsiElement(M68kTokenType.DREG)('d7')
PsiWhiteSpace(' ')
PsiComment(M68kTokenType.COMMENT)('; this is the outer loop')
PsiElement(M68kTokenType.EOL)('\n')
M68kStatementImpl(STATEMENT)
M68kLocalLabelImpl(LOCAL_LABEL)
PsiElement(M68kTokenType.LOCAL_LABEL_DEF)('innerloop$')
PsiWhiteSpace(' ')
M68kAsmInstructionImpl(ASM_INSTRUCTION)
M68kAsmOpImpl(ASM_OP)
PsiElement(M68kTokenType.MNEMONIC)('move')
M68kOperandSizeImpl(OPERAND_SIZE)
PsiElement(M68kTokenType.OPSIZE_WL)('.l')
PsiWhiteSpace(' ')
M68kAsmOperandsImpl(ASM_OPERANDS)
M68kAddressRegisterIndirectPostIncAddressingModeImpl(ADDRESS_REGISTER_INDIRECT_POST_INC_ADDRESSING_MODE)
PsiElement(M68kTokenType.()('(')
M68kAddressRegisterImpl(ADDRESS_REGISTER)
PsiElement(M68kTokenType.AREG)('a0')
PsiElement(M68kTokenType.))(')')
PsiElement(M68kTokenType.+)('+')
PsiElement(M68kTokenType.,)(',')
M68kAddressRegisterIndirectPostIncAddressingModeImpl(ADDRESS_REGISTER_INDIRECT_POST_INC_ADDRESSING_MODE)
PsiElement(M68kTokenType.()('(')
M68kAddressRegisterImpl(ADDRESS_REGISTER)
PsiElement(M68kTokenType.AREG)('a1')
PsiElement(M68kTokenType.))(')')
PsiElement(M68kTokenType.+)('+')
PsiWhiteSpace(' ')
PsiComment(M68kTokenType.COMMENT)('; copy stuff')
PsiElement(M68kTokenType.EOL)('\n')
PsiWhiteSpace(' ')
M68kStatementImpl(STATEMENT)
M68kAsmInstructionImpl(ASM_INSTRUCTION)
M68kAsmOpImpl(ASM_OP)
PsiElement(M68kTokenType.MNEMONIC)('dbne')
PsiWhiteSpace(' ')
M68kAsmOperandsImpl(ASM_OPERANDS)
M68kDataRegisterDirectAddressingModeImpl(DATA_REGISTER_DIRECT_ADDRESSING_MODE)
M68kDataRegisterImpl(DATA_REGISTER)
PsiElement(M68kTokenType.DREG)('d7')
PsiElement(M68kTokenType.,)(',')
M68kAbsoluteAddressAddressingModeImpl(ABSOLUTE_ADDRESS_ADDRESSING_MODE)
M68kRefExprImpl(REF_EXPR)
PsiElement(M68kTokenType.SYMBOL)('innerloop$')
PsiWhiteSpace(' ')
PsiComment(M68kTokenType.COMMENT)('; copy more')
PsiElement(M68kTokenType.EOL)('\n')
PsiWhiteSpace(' ')
M68kStatementImpl(STATEMENT)
M68kLocalLabelImpl(LOCAL_LABEL)
PsiElement(M68kTokenType.LOCAL_LABEL_DEF)('.skip:')
PsiWhiteSpace(' ')
M68kAsmInstructionImpl(ASM_INSTRUCTION)
M68kAsmOpImpl(ASM_OP)
PsiElement(M68kTokenType.MNEMONIC)('bne')
M68kOperandSizeImpl(OPERAND_SIZE)
PsiElement(M68kTokenType.OPSIZE_BS)('.s')
PsiWhiteSpace(' ')
M68kAsmOperandsImpl(ASM_OPERANDS)
M68kAbsoluteAddressAddressingModeImpl(ABSOLUTE_ADDRESS_ADDRESSING_MODE)
M68kRefExprImpl(REF_EXPR)
PsiElement(M68kTokenType.SYMBOL)('.outerloop')
PsiWhiteSpace(' ')
PsiComment(M68kTokenType.COMMENT)('; end of chunk?')
PsiElement(M68kTokenType.EOL)('\n')
PsiWhiteSpace(' ')
M68kStatementImpl(STATEMENT)
M68kGlobalLabelImpl(GLOBAL_LABEL)
PsiElement(M68kTokenType.GLOBAL_LABEL_DEF)('GlobalExit::')
PsiWhiteSpace(' ')
M68kAsmInstructionImpl(ASM_INSTRUCTION)
M68kAsmOpImpl(ASM_OP)
PsiElement(M68kTokenType.MNEMONIC)('rts')
PsiElement(M68kTokenType.EOL)('\n')
@@ -0,0 +1,5 @@
Assembly File: a.asm
M68kStatementImpl(STATEMENT)
M68kLocalLabelImpl(LOCAL_LABEL)
PsiElement(M68kTokenType.LOCAL_LABEL_DEF)('.local_label:')
PsiElement(M68kTokenType.EOL)('\n')
@@ -0,0 +1,5 @@
Assembly File: a.asm
M68kStatementImpl(STATEMENT)
M68kGlobalLabelImpl(GLOBAL_LABEL)
PsiElement(M68kTokenType.GLOBAL_LABEL_DEF)('External_Label::')
PsiElement(M68kTokenType.EOL)('\n')
@@ -0,0 +1,5 @@
Assembly File: a.asm
M68kStatementImpl(STATEMENT)
M68kGlobalLabelImpl(GLOBAL_LABEL)
PsiElement(M68kTokenType.GLOBAL_LABEL_DEF)('Global_Label:')
PsiElement(M68kTokenType.EOL)('\n')
@@ -0,0 +1,6 @@
Assembly File: a.asm
PsiWhiteSpace('\t')
M68kStatementImpl(STATEMENT)
M68kLocalLabelImpl(LOCAL_LABEL)
PsiElement(M68kTokenType.LOCAL_LABEL_DEF)('.local_label:')
PsiElement(M68kTokenType.EOL)('\n')
@@ -0,0 +1,6 @@
Assembly File: a.asm
PsiWhiteSpace(' ')
M68kStatementImpl(STATEMENT)
M68kGlobalLabelImpl(GLOBAL_LABEL)
PsiElement(M68kTokenType.GLOBAL_LABEL_DEF)('External_Label::')
PsiElement(M68kTokenType.EOL)('\n')
@@ -0,0 +1,6 @@
Assembly File: a.asm
PsiWhiteSpace(' ')
M68kStatementImpl(STATEMENT)
M68kGlobalLabelImpl(GLOBAL_LABEL)
PsiElement(M68kTokenType.GLOBAL_LABEL_DEF)('Global_Label:')
PsiElement(M68kTokenType.EOL)('\n')
@@ -0,0 +1,6 @@
Assembly File: a.asm
PsiWhiteSpace(' ')
M68kStatementImpl(STATEMENT)
M68kLocalLabelImpl(LOCAL_LABEL)
PsiElement(M68kTokenType.LOCAL_LABEL_DEF)('local_label$:')
PsiElement(M68kTokenType.EOL)('\n')
@@ -0,0 +1,5 @@
Assembly File: a.asm
M68kStatementImpl(STATEMENT)
M68kLocalLabelImpl(LOCAL_LABEL)
PsiElement(M68kTokenType.LOCAL_LABEL_DEF)('local_label$:')
PsiElement(M68kTokenType.EOL)('\n')
@@ -0,0 +1,5 @@
Assembly File: a.asm
M68kStatementImpl(STATEMENT)
M68kLocalLabelImpl(LOCAL_LABEL)
PsiElement(M68kTokenType.LOCAL_LABEL_DEF)('.local_label')
PsiElement(M68kTokenType.EOL)('\n')
@@ -0,0 +1,5 @@
Assembly File: a.asm
M68kStatementImpl(STATEMENT)
M68kGlobalLabelImpl(GLOBAL_LABEL)
PsiElement(M68kTokenType.GLOBAL_LABEL_DEF)('Global_Label')
PsiElement(M68kTokenType.EOL)('\n')
@@ -0,0 +1,5 @@
Assembly File: a.asm
M68kStatementImpl(STATEMENT)
M68kLocalLabelImpl(LOCAL_LABEL)
PsiElement(M68kTokenType.LOCAL_LABEL_DEF)('local_label$')
PsiElement(M68kTokenType.EOL)('\n')