Allow digits in label names

Also, only allow a-zA-Z as the first character of label names.
This commit is contained in:
Joscha 2019-11-10 12:44:34 +00:00
parent 6ac5bfc9e7
commit 5e9c50d618
3 changed files with 9 additions and 9 deletions

View file

@ -1,4 +1,4 @@
IAR = technique-a
IAR = technique-1
; This file demonstrates a few techniques for jumping to an address
; stored in the ACC.
@ -9,15 +9,15 @@ tmp: LIT 0
; Jumping by setting the RA and then returning
100:
technique-a:
LDC technique-b
technique-1:
LDC technique-2
STRA
RET
; Jumping by writing a JMP instruction to a memory location and then
; jumping to that (aka. almost self-modifying code)
200:
technique-b:
technique-2:
LDC end
OR jump-instruction
STV tmp

View file

@ -39,11 +39,8 @@ incrementCurrentPos = do
put s{sCurrentPos = succ $ sCurrentPos s}
parseInstructions' :: SParser ()
parseInstructions' = sepBy parseInstruction' incrementCurrentPos >> lift (eof <|> fail atMaxAddress)
parseInstructions' = sepBy parseInstruction' incrementCurrentPos >> lift eof
where
atMaxAddress = "already at maximum address (" ++ show (maxBound :: MimaAddress)
++ ") - can't go any further"
parseInstruction' :: SParser ()
parseInstruction' = do
s <- get

View file

@ -10,6 +10,7 @@ module Mima.Assembler.Parser.Label
, resolveAddress
) where
import Data.Char
import qualified Data.Map as Map
import qualified Data.Text as T
import Text.Megaparsec
@ -33,8 +34,10 @@ mimaLabel = lexeme mimaLabel'
mimaLabel' :: Parser MimaLabel
mimaLabel' = label "label" $ do
name <- takeWhile1P Nothing (\c -> isAlphabet c || isConnecting c)
firstChar <- satisfy isAlphabet
otherChars <- takeWhileP Nothing (\c -> isAlphabet c || isConnecting c || isDigit c)
offset <- getOffset
let name = T.singleton firstChar <> otherChars
pure MimaLabel{lName = name, lOffset = offset}
failAtLabel :: MimaLabel -> String -> Parser a