Everything is now Data.Text instead of String
This commit is contained in:
parent
753f429ec8
commit
cbfd729795
18 changed files with 178 additions and 137 deletions
|
@ -1,5 +1,6 @@
|
|||
{-# LANGUAGE DerivingVia #-}
|
||||
{-# LANGUAGE DeriveGeneric #-}
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
module Ubc.Parse.Syntax.Struct
|
||||
( Struct(..)
|
||||
, parse
|
||||
|
@ -26,11 +27,12 @@ import qualified Ubc.Parse.Syntax.Language as UbcLanguage
|
|||
import qualified Ubc.Parse.Syntax.VariableType as VariableType
|
||||
import qualified Ubc.Parse.Syntax.Function as Function
|
||||
import qualified Ubc.Parse.Syntax.Generic as Syntax.Generic
|
||||
import Ubc.Parse.Syntax (Token)
|
||||
|
||||
type VariableName = String
|
||||
type VariableName = Token
|
||||
|
||||
data Struct = Struct
|
||||
{ name :: String
|
||||
{ name :: Token
|
||||
, generics :: [Syntax.Generic.Generic]
|
||||
, body :: StructBody
|
||||
}
|
||||
|
@ -43,7 +45,7 @@ data StructBody = StructBody
|
|||
deriving stock (Generic, Show)
|
||||
deriving (Semigroup, Monoid) via Generically StructBody
|
||||
|
||||
parse :: Monad m => ParsecT String u m Struct
|
||||
parse :: Monad m => ParsecT Token u m Struct
|
||||
parse = do
|
||||
_ <- UbcLanguage.reserved "struct"
|
||||
structIdentifier <- UbcLanguage.identifier
|
||||
|
@ -52,10 +54,10 @@ parse = do
|
|||
|
||||
pure $ Struct structIdentifier structGenerics structBody
|
||||
|
||||
structMember :: Monad m => ParsecT String u m StructBody
|
||||
structMember :: Monad m => ParsecT Token u m StructBody
|
||||
structMember = choice [ structVariableOrFunction ]
|
||||
|
||||
structVariableOrFunction :: Monad m => ParsecT String u m StructBody
|
||||
structVariableOrFunction :: Monad m => ParsecT Token u m StructBody
|
||||
structVariableOrFunction = do
|
||||
(typeName, identifier) <- try $ do
|
||||
typeName <- UbcLanguage.typeName
|
||||
|
@ -66,7 +68,7 @@ structVariableOrFunction = do
|
|||
, (\ f -> mempty { functions = [f] }) <$!> Function.parsePrefixed typeName identifier
|
||||
]
|
||||
|
||||
parseVariable :: Monad m => VariableType -> String -> ParsecT String u m StructBody
|
||||
parseVariable :: Monad m => VariableType -> Token -> ParsecT Token u m StructBody
|
||||
parseVariable variableType variableName = do
|
||||
_ <- UbcLanguage.semicolon
|
||||
return $ mempty { variables = [(variableName, variableType)] }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue