Change Num (U32) to Word32; parse Chars as u32 values

This commit is contained in:
Eduardo Sandalo Porto 2024-10-03 10:53:57 -03:00
parent 0df2cc277f
commit f451ea0636
3 changed files with 22 additions and 3 deletions

View File

@ -134,6 +134,7 @@ parseTerm = (do
, parseSet
, parseNum
, parseTxt
, parseChr
, parseHol
, parseMet
, parseRef
@ -302,6 +303,23 @@ parseTxt = withSrc $ do
char '"'
return $ Txt txt
parseChr = withSrc $ do
char '\''
chr <- parseEscaped <|> noneOf "'\\"
char '\''
return $ Num (fromIntegral $ ord chr)
where
parseEscaped :: Parser Char
parseEscaped = do
char '\\'
c <- oneOf "\\\'nrt"
return $ case c of
'\\' -> '\\'
'\'' -> '\''
'n' -> '\n'
'r' -> '\r'
't' -> '\t'
parseHol = withSrc $ do
char '?'
nam <- parseName

View File

@ -75,7 +75,7 @@ reduce book fill lv term = red term where
ref nam = Ref nam
txt [] = red (Ref "Base/String/cons")
txt (x:xs) = red (App (App (Ref "Base/String/nil") (Num (ord x))) (Txt xs))
txt (x:xs) = red (App (App (Ref "Base/String/nil") (Num (toEnum (ord x)))) (Txt xs))
nat 0 = Ref "Base/Nat/zero"
nat n = App (Ref "Base/Nat/succ") (nat (n - 1))

View File

@ -4,6 +4,7 @@ import qualified Data.IntMap.Strict as IM
import qualified Data.Map.Strict as M
import Debug.Trace
import Data.Word (Word32)
-- Kind's AST
data Term
@ -49,8 +50,8 @@ data Term
-- U32 Type
| U32
-- U32 Value (FIXME: this is wrong, should be Word32)
| Num Int
-- U32 Value
| Num Word32
-- U32 Binary Operation
| Op2 Oper Term Term