Nosfe also likes to place assignments with colons. Fixed assignment symbol detection (again :-/).

This commit is contained in:
2021-07-16 14:13:29 +02:00
parent 213150e51f
commit d53a1fbac8
10 changed files with 380 additions and 329 deletions
@@ -5,7 +5,7 @@ import de.platon42.intellij.plugins.m68k.asm.M68kIsa.mnemonics
object LexerUtil {
private val ASSIGNMENT_SEPARATORS = charArrayOf(' ', '\t')
private val ASSIGNMENT_SEPARATORS = charArrayOf(' ', '\t', '=', ':')
@JvmStatic
fun isAsmMnemonic(text: CharSequence) = mnemonics.contains(text.toString().lowercase())
@@ -23,10 +23,6 @@ object LexerUtil {
@JvmStatic
fun pushbackAssignment(text: CharSequence): Int {
val spacePos = text.indexOfAny(ASSIGNMENT_SEPARATORS)
if (spacePos > -1) {
return text.length - spacePos
}
return text.length - text.indexOf('=')
return text.length - text.indexOfAny(ASSIGNMENT_SEPARATORS)
}
}
@@ -28,7 +28,7 @@ EOL=\R
WHITE_SPACE=\p{Blank}+
AREG=((a[0-7])|sp)
DREG=(d[0-7])
ASSIGNMENT=(([:letter:]|_)(([:letter:]|[:digit:])|_)*((\p{Blank}+equ\p{Blank}+)|(\p{Blank}+set\p{Blank}+)|\p{Blank}*=\p{Blank}*))
ASSIGNMENT=(([:letter:]|_)(([:letter:]|[:digit:])|_)*:?((\p{Blank}+equ\p{Blank}+)|(\p{Blank}+set\p{Blank}+)|\p{Blank}*=\p{Blank}*))
LOCAL_LABEL=(\.([:letter:]|_)(([:letter:]|[:digit:])|_)*:?)|(([:letter:]|_)(([:letter:]|[:digit:])|_)*\$:?)
LOCAL_LABEL_WC=(\.([:letter:]|_)(([:letter:]|[:digit:])|_)*:)|(([:letter:]|_)(([:letter:]|[:digit:])|_)*\$:)
GLOBAL_LABEL=(([:letter:]|_)(([:letter:]|[:digit:])|_)*:?:?)
@@ -125,6 +125,7 @@ HASH_COMMENT=([#;*].*+)
"equ"|"set" { yybegin(EXPR); return EQU; }
":" { return COLON; }
"=" { yybegin(EXPR); return OP_ASSIGN; }
{COMMENT} { yybegin(WAITEOL); return COMMENT; }
@@ -126,7 +126,7 @@ statement ::= (Assignment
private statement_recover ::= !(EOL)
Assignment ::= SYMBOLDEF (OP_ASSIGN|EQU) expr
Assignment ::= SYMBOLDEF COLON? (OP_ASSIGN|EQU) expr
private LabelInsts ::= LabelWithInstruction | LabelOnly | InstructionOnly