Added support for enumerations
This commit is contained in:
parent
01fafec1c0
commit
2cd9b04b85
8 changed files with 57 additions and 35 deletions
|
@ -13,18 +13,32 @@ import Text.Parsec
|
|||
ParsecT,
|
||||
)
|
||||
|
||||
import Ubc.Parse.Syntax.Data.Struct (Struct(..))
|
||||
import Ubc.Parse.Syntax.VariableType (VariableType)
|
||||
|
||||
import Ubc.Parse.Syntax.Function (Function)
|
||||
|
||||
import qualified Ubc.Parse.Syntax.Language as UbcLanguage
|
||||
import qualified Ubc.Parse.Syntax.VariableType as VariableType
|
||||
import qualified Ubc.Parse.Syntax.Data.Struct as Struct
|
||||
import qualified Ubc.Parse.Syntax.Function as Function
|
||||
|
||||
type VariableName = String
|
||||
|
||||
data StructStatement = Variable VariableName VariableType
|
||||
| Function Function.Function
|
||||
|
||||
data Struct = Struct
|
||||
{ name :: String
|
||||
, variables :: [(VariableName, VariableType)]
|
||||
, functions :: [Function]
|
||||
}
|
||||
deriving (Show)
|
||||
|
||||
addVariable :: Struct -> VariableName -> VariableType -> Struct
|
||||
addVariable (Struct sn vs fs) n t = Struct sn ((n, t): vs) fs
|
||||
|
||||
addFunction :: Struct -> Function -> Struct
|
||||
addFunction (Struct sn vs fs) f = Struct sn vs (f:fs)
|
||||
|
||||
parse :: Monad m => ParsecT String u m Struct
|
||||
parse = do
|
||||
_ <- UbcLanguage.reserved "struct"
|
||||
|
@ -33,8 +47,8 @@ parse = do
|
|||
foldl accumulateStruct (Struct structIdentifier [] []) <$!> UbcLanguage.braces (many structMember)
|
||||
|
||||
accumulateStruct :: Struct -> StructStatement -> Struct
|
||||
accumulateStruct s (Variable n t) = Struct.addVariable s n t
|
||||
accumulateStruct s (Function f) = Struct.addFunction s f
|
||||
accumulateStruct s (Variable n t) = addVariable s n t
|
||||
accumulateStruct s (Function f) = addFunction s f
|
||||
|
||||
structMember :: Monad m => ParsecT String u m StructStatement
|
||||
structMember = choice [ structVariableOrFunction ]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue