diff --git a/src/Lox/Interpreter.hs b/src/Lox/Interpreter.hs index 32ab64e..29476bd 100644 --- a/src/Lox/Interpreter.hs +++ b/src/Lox/Interpreter.hs @@ -16,7 +16,7 @@ interpret (Literal value) = return value interpret (Grouping expr) = interpret expr interpret (Unary op expr) = do right <- interpret expr - case (getType op, right) of + case (tokenType op, right) of (MINUS, NumberObject x) -> return $ NumberObject (-x) (BANG, NullObject) -> return $ BoolObject False (BANG, BoolObject x) -> return $ BoolObject (not x) @@ -25,7 +25,7 @@ interpret (Unary op expr) = do interpret (Binary leftExpr op rightExpr) = do left <- interpret leftExpr right <- interpret rightExpr - case (getType op, left, right) of + case (tokenType op, left, right) of (PLUS, NumberObject x, NumberObject y) -> return $ NumberObject (x + y) (MINUS, NumberObject x, NumberObject y) -> return $ NumberObject (x - y) (SLASH, NumberObject x, NumberObject y) -> return $ NumberObject (x / y) diff --git a/src/Lox/Parser.hs b/src/Lox/Parser.hs index 238a3ee..d149c8c 100644 --- a/src/Lox/Parser.hs +++ b/src/Lox/Parser.hs @@ -55,12 +55,12 @@ unary = do primary :: State ParserState Expr primary = do token <- advance - case getType token of + case tokenType token of FALSE -> return $ Literal $ BoolObject False TRUE -> return $ Literal $ BoolObject True NIL -> return $ Literal NullObject - NUMBER -> return $ Literal $ getObject token - STRING -> return $ Literal $ getObject token + NUMBER -> return $ Literal $ tokenObject token + STRING -> return $ Literal $ tokenObject token LEFT_PAREN -> do expr <- expression consume RIGHT_PAREN "Expected '(' after ')'" @@ -89,7 +89,7 @@ matchToken (t:ts) = do check :: TokenType -> State ParserState Bool check t = do atEnd <- isAtEnd - if atEnd then return False else (== t) . getType <$> peek + if atEnd then return False else (== t) . tokenType <$> peek consume :: TokenType -> String -> State ParserState Token consume t msg = do @@ -103,4 +103,4 @@ peek :: State ParserState Token peek = gets (head . tokens) isAtEnd :: State ParserState Bool -isAtEnd = (== EOF) . getType <$> peek +isAtEnd = (== EOF) . tokenType <$> peek diff --git a/src/Lox/Scanner.hs b/src/Lox/Scanner.hs index 48446be..91dfbda 100644 --- a/src/Lox/Scanner.hs +++ b/src/Lox/Scanner.hs @@ -1,7 +1,7 @@ module Lox.Scanner ( TokenType (..), Object (..), - Token (getType, getLexeme, getObject), + Token (..), scanTokensFromSource ) where @@ -36,10 +36,10 @@ instance Show Object where show (BoolObject True) = "true" data Token = Token { - getType :: TokenType, - getLexeme :: String, - getObject :: Object, - getLineNumber :: Int + tokenType :: TokenType, + tokenLexeme :: String, + tokenObject :: Object, + tokenLineNumber :: Int } deriving Show data ScannerState = ScannerState {source :: String, current :: String, lineNumber :: Int} @@ -169,7 +169,7 @@ addLiteralToken token object = state $ scannerAddLiteralToken token object scannerAddLiteralToken :: TokenType -> Object -> ScannerState -> (Token, ScannerState) scannerAddLiteralToken tokenType object state@ScannerState {current=current, lineNumber=lineNumber} = (token, state) - where token = Token {getType=tokenType, getLexeme=current, getObject=object, getLineNumber=lineNumber} + where token = Token {tokenType=tokenType, tokenLexeme=current, tokenObject=object, tokenLineNumber=lineNumber} getKeywordTokenType :: String -> TokenType getKeywordTokenType "and" = AND