Split up opsizes for better syntax highlighting. Fixed bug in macro-call lexer.

This commit is contained in:
2021-07-15 23:03:31 +02:00
parent beea9b2763
commit e33470ea1a
32 changed files with 286 additions and 269 deletions
@@ -34,10 +34,12 @@ LOCAL_LABEL_WC=(\.([:letter:]|_)(([:letter:]|[:digit:])|_)*:)|(([:letter:]|_)(([
GLOBAL_LABEL=(([:letter:]|_)(([:letter:]|[:digit:])|_)*:?:?)
GLOBAL_LABEL_WC=(([:letter:]|_)(([:letter:]|[:digit:])|_)*::?)
//MNEMONIC=(([:letter:])+)
SYMBOL=(([:letter:]|_|\.)(([:letter:]|[:digit:])|[_\$])*)
SYMBOL=(([:letter:]|_|\.)(([:letter:]|[:digit:]|[_\$]))*)
MACRONAME=(([:letter:]|_)(([:letter:]|[:digit:]|_))*)
DIRECTIVE_KEYWORD=(([:letter:])(([:letter:]))*)(\..)?
OPSIZE_BS=(\.[bs])
OPSIZE_WL=(\.[wl])
OPSIZE_W=(\.w)
OPSIZE_L=(\.l)
BINARY=(%[01]+)
HEXADECIMAL=(\$[0-9a-f]+)
OCTAL=(@[0-7]+)
@@ -73,7 +75,7 @@ HASH_COMMENT=([#;*].*+)
yybegin(MACROCALL); return MACRO_INVOKATION;
}
// {MNEMONIC} { if(isAsmMnemonic(yytext())) { yybegin(ASMINSTR); return MNEMONIC; } else { yybegin(INSTRPART); return SYMBOL; } }
{SYMBOL} { yybegin(MACROCALL); return SYMBOL; }
{MACRONAME} { yybegin(MACROCALL); return MACRO_INVOKATION; }
{HASH_COMMENT} { yybegin(YYINITIAL); return COMMENT; }
}
@@ -89,7 +91,7 @@ HASH_COMMENT=([#;*].*+)
yybegin(MACROCALL); return MACRO_INVOKATION;
}
// {MNEMONIC} { if(isAsmMnemonic(yytext())) { yybegin(ASMINSTR); return MNEMONIC; } else { return SYMBOL; } }
{SYMBOL} { yybegin(MACROCALL); return MACRO_INVOKATION; }
{MACRONAME} { yybegin(MACROCALL); return MACRO_INVOKATION; }
{COMMENT} { yybegin(WAITEOL); return COMMENT; }
}
@@ -99,7 +101,8 @@ HASH_COMMENT=([#;*].*+)
{EOL} { yybegin(YYINITIAL); return EOL; }
{OPSIZE_BS} { return OPSIZE_BS; }
{OPSIZE_WL} { return OPSIZE_WL; }
{OPSIZE_W} { return OPSIZE_W; }
{OPSIZE_L} { return OPSIZE_L; }
{COMMENT} { yybegin(WAITEOL); return COMMENT; }
}
@@ -184,7 +187,8 @@ HASH_COMMENT=([#;*].*+)
{STRINGLIT} { return STRINGLIT; }
{OPSIZE_BS} { return OPSIZE_BS; }
{OPSIZE_WL} { return OPSIZE_WL; }
{OPSIZE_W} { return OPSIZE_W; }
{OPSIZE_L} { return OPSIZE_L; }
{AREG} { return AREG; }
{DREG} { return DREG; }
@@ -138,9 +138,9 @@ LocalLabel ::= LOCAL_LABEL_DEF {extends=Label}
GlobalLabel ::= GLOBAL_LABEL_DEF {extends=Label}
Label ::= LocalLabel | GlobalLabel
OperandSize ::= (OPSIZE_BS|OPSIZE_WL)
AddressSize ::= OPSIZE_WL
DataWidth ::= OPSIZE_WL
OperandSize ::= (OPSIZE_BS|OPSIZE_W|OPSIZE_L)
AddressSize ::= (OPSIZE_W|OPSIZE_L)
DataWidth ::= (OPSIZE_W|OPSIZE_L)
AsmOp ::= MNEMONIC OperandSize?
@@ -11,7 +11,9 @@ import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.BAD_CHARACTER
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.COMMENT
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.DATA_PREPROCESSOR
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.DATA_WIDTH
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.DATA_WIDTH_BS
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.DATA_WIDTH_L
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.DATA_WIDTH_W
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.DREG
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.GLOBAL_LABEL
import de.platon42.intellij.plugins.m68k.syntax.M68kSyntaxHighlighter.Companion.LOCAL_LABEL
@@ -44,19 +46,21 @@ PIC_HEIGHT = 256
include "../includes/hardware/custom.i"
BLTHOGON MACRO
BLTHOGON MACRO ; macro definition
move.w #DMAF_SETCLR|DMAF_BLITHOG,dmacon(a5)
ENDM
demo_init ; global label
PUSHM d0-d7/a0-a6 ; this is a macro
lea pd_ModViewTable(a4),a0
tst.w d1
beq.s .skip
PUSHM d0-d7/a0-a6 ; this is a macro call
lea pd_ModViewTable(a4,d1.w),a0
moveq.l #0,d0
move.w #PIC_HEIGHT-1,d7
.loop move.l d0,(a0)+ ; local label
dbra d7,.loop
POPM
rts
.skip rts
hello: dc.b 'Hello World!',10,0
even
@@ -88,7 +92,9 @@ hello: dc.b 'Hello World!',10,0
AttributesDescriptor("Symbol reference", SYMBOL),
AttributesDescriptor("Assembly mnemonic", MNEMONIC),
AttributesDescriptor("Macro invocation", MACRO_CALL),
AttributesDescriptor("Data/address width", DATA_WIDTH),
AttributesDescriptor("Byte/short data width", DATA_WIDTH_BS),
AttributesDescriptor("Word data width", DATA_WIDTH_W),
AttributesDescriptor("Long data width", DATA_WIDTH_L),
AttributesDescriptor("Data preprocessor directives", DATA_PREPROCESSOR),
AttributesDescriptor("Other preprocessor directives", OTHER_PREPROCESSOR),
AttributesDescriptor("Strings", STRING),
@@ -26,7 +26,9 @@ class M68kSyntaxHighlighter : SyntaxHighlighterBase() {
M68kTypes.MACRO_INVOKATION -> arrayOf(MACRO_CALL)
M68kTypes.DATA_DIRECTIVE -> arrayOf(DATA_PREPROCESSOR)
M68kTypes.OTHER_DIRECTIVE -> arrayOf(OTHER_PREPROCESSOR)
M68kTypes.OPSIZE_BS, M68kTypes.OPSIZE_WL -> arrayOf(DATA_WIDTH)
M68kTypes.OPSIZE_BS -> arrayOf(DATA_WIDTH_BS)
M68kTypes.OPSIZE_W -> arrayOf(DATA_WIDTH_W)
M68kTypes.OPSIZE_L -> arrayOf(DATA_WIDTH_L)
M68kTypes.ADDRESS_REGISTER, M68kTypes.AREG -> arrayOf(AREG)
M68kTypes.DATA_REGISTER, M68kTypes.DREG -> arrayOf(DREG)
M68kTypes.SPECIAL_REGISTER, M68kTypes.REG_USP, M68kTypes.REG_SR, M68kTypes.REG_CCR -> arrayOf(SPECIAL_REG)
@@ -46,7 +48,9 @@ class M68kSyntaxHighlighter : SyntaxHighlighterBase() {
val SYMBOL = TextAttributesKey.createTextAttributesKey("M68K_SYMBOL", DefaultLanguageHighlighterColors.IDENTIFIER)
val MNEMONIC = TextAttributesKey.createTextAttributesKey("M68K_MNEMONIC", DefaultLanguageHighlighterColors.FUNCTION_CALL)
val MACRO_CALL = TextAttributesKey.createTextAttributesKey("M68K_MACRO_CALL", DefaultLanguageHighlighterColors.STATIC_METHOD)
val DATA_WIDTH = TextAttributesKey.createTextAttributesKey("M68K_DATA_WIDTH", DefaultLanguageHighlighterColors.INSTANCE_METHOD)
val DATA_WIDTH_BS = TextAttributesKey.createTextAttributesKey("M68K_DATA_WIDTH_BS", DefaultLanguageHighlighterColors.DOT)
val DATA_WIDTH_L = TextAttributesKey.createTextAttributesKey("M68K_DATA_WIDTH_W", DefaultLanguageHighlighterColors.DOT)
val DATA_WIDTH_W = TextAttributesKey.createTextAttributesKey("M68K_DATA_WIDTH_L", DefaultLanguageHighlighterColors.DOT)
val DATA_PREPROCESSOR = TextAttributesKey.createTextAttributesKey("M68K_DATA_PREPROCESSOR", DefaultLanguageHighlighterColors.CONSTANT)
val OTHER_PREPROCESSOR = TextAttributesKey.createTextAttributesKey("M68K_OTHER_PREPROCESSOR", DefaultLanguageHighlighterColors.KEYWORD)
val STRING = TextAttributesKey.createTextAttributesKey("M68K_STRING", DefaultLanguageHighlighterColors.STRING)