fix bad token function naming
This commit is contained in:
parent
b5001499d7
commit
7bec9392c3
3 changed files with 13 additions and 13 deletions
|
|
@ -16,7 +16,7 @@ interpret (Literal value) = return value
|
||||||
interpret (Grouping expr) = interpret expr
|
interpret (Grouping expr) = interpret expr
|
||||||
interpret (Unary op expr) = do
|
interpret (Unary op expr) = do
|
||||||
right <- interpret expr
|
right <- interpret expr
|
||||||
case (getType op, right) of
|
case (tokenType op, right) of
|
||||||
(MINUS, NumberObject x) -> return $ NumberObject (-x)
|
(MINUS, NumberObject x) -> return $ NumberObject (-x)
|
||||||
(BANG, NullObject) -> return $ BoolObject False
|
(BANG, NullObject) -> return $ BoolObject False
|
||||||
(BANG, BoolObject x) -> return $ BoolObject (not x)
|
(BANG, BoolObject x) -> return $ BoolObject (not x)
|
||||||
|
|
@ -25,7 +25,7 @@ interpret (Unary op expr) = do
|
||||||
interpret (Binary leftExpr op rightExpr) = do
|
interpret (Binary leftExpr op rightExpr) = do
|
||||||
left <- interpret leftExpr
|
left <- interpret leftExpr
|
||||||
right <- interpret rightExpr
|
right <- interpret rightExpr
|
||||||
case (getType op, left, right) of
|
case (tokenType op, left, right) of
|
||||||
(PLUS, NumberObject x, NumberObject y) -> return $ NumberObject (x + y)
|
(PLUS, NumberObject x, NumberObject y) -> return $ NumberObject (x + y)
|
||||||
(MINUS, 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)
|
(SLASH, NumberObject x, NumberObject y) -> return $ NumberObject (x / y)
|
||||||
|
|
|
||||||
|
|
@ -55,12 +55,12 @@ unary = do
|
||||||
primary :: State ParserState Expr
|
primary :: State ParserState Expr
|
||||||
primary = do
|
primary = do
|
||||||
token <- advance
|
token <- advance
|
||||||
case getType token of
|
case tokenType token of
|
||||||
FALSE -> return $ Literal $ BoolObject False
|
FALSE -> return $ Literal $ BoolObject False
|
||||||
TRUE -> return $ Literal $ BoolObject True
|
TRUE -> return $ Literal $ BoolObject True
|
||||||
NIL -> return $ Literal NullObject
|
NIL -> return $ Literal NullObject
|
||||||
NUMBER -> return $ Literal $ getObject token
|
NUMBER -> return $ Literal $ tokenObject token
|
||||||
STRING -> return $ Literal $ getObject token
|
STRING -> return $ Literal $ tokenObject token
|
||||||
LEFT_PAREN -> do
|
LEFT_PAREN -> do
|
||||||
expr <- expression
|
expr <- expression
|
||||||
consume RIGHT_PAREN "Expected '(' after ')'"
|
consume RIGHT_PAREN "Expected '(' after ')'"
|
||||||
|
|
@ -89,7 +89,7 @@ matchToken (t:ts) = do
|
||||||
check :: TokenType -> State ParserState Bool
|
check :: TokenType -> State ParserState Bool
|
||||||
check t = do
|
check t = do
|
||||||
atEnd <- isAtEnd
|
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 :: TokenType -> String -> State ParserState Token
|
||||||
consume t msg = do
|
consume t msg = do
|
||||||
|
|
@ -103,4 +103,4 @@ peek :: State ParserState Token
|
||||||
peek = gets (head . tokens)
|
peek = gets (head . tokens)
|
||||||
|
|
||||||
isAtEnd :: State ParserState Bool
|
isAtEnd :: State ParserState Bool
|
||||||
isAtEnd = (== EOF) . getType <$> peek
|
isAtEnd = (== EOF) . tokenType <$> peek
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
module Lox.Scanner (
|
module Lox.Scanner (
|
||||||
TokenType (..),
|
TokenType (..),
|
||||||
Object (..),
|
Object (..),
|
||||||
Token (getType, getLexeme, getObject),
|
Token (..),
|
||||||
scanTokensFromSource
|
scanTokensFromSource
|
||||||
) where
|
) where
|
||||||
|
|
||||||
|
|
@ -36,10 +36,10 @@ instance Show Object where
|
||||||
show (BoolObject True) = "true"
|
show (BoolObject True) = "true"
|
||||||
|
|
||||||
data Token = Token {
|
data Token = Token {
|
||||||
getType :: TokenType,
|
tokenType :: TokenType,
|
||||||
getLexeme :: String,
|
tokenLexeme :: String,
|
||||||
getObject :: Object,
|
tokenObject :: Object,
|
||||||
getLineNumber :: Int
|
tokenLineNumber :: Int
|
||||||
} deriving Show
|
} deriving Show
|
||||||
|
|
||||||
data ScannerState = ScannerState {source :: String, current :: String, lineNumber :: Int}
|
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 -> ScannerState -> (Token, ScannerState)
|
||||||
scannerAddLiteralToken tokenType object state@ScannerState {current=current, lineNumber=lineNumber} =
|
scannerAddLiteralToken tokenType object state@ScannerState {current=current, lineNumber=lineNumber} =
|
||||||
(token, state)
|
(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 :: String -> TokenType
|
||||||
getKeywordTokenType "and" = AND
|
getKeywordTokenType "and" = AND
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue