module ADLParser where import Text.ParserCombinators.Parsec import Text.ParserCombinators.Parsec.Expr import Text.ParserCombinators.Parsec.Char import Archetype adl :: Parser Archetype adl = many block where block = do version <- try(adlVersion) return version <|> do name <- try(adlName) return name <|> do concept <- try(adlConcept) return concept <|> do language <- try(adlLanguage) return language <|> do description <- try(adlDescription) return description <|> do definition <- try(adlDefinition) return definition <|> do ontology <- try(adlOntology) return ontology adlVersion :: Parser Version adlVersion = do dec1 <- string "archetype (adl_version=" ver <- many anyChar end <- char ')' return ver adlName :: Parser String adlName = do spaces name <- many anyChar spaces return name adlConcept :: Parser Concept adlConcept = do spaces head <- string "concept" spaces c1 <- char '[' at <- many anyChar c2 <- char ']' spaces c3 <- string "--" desc <- many anyChar end <- char '\r' return Concept {at, desc] adlLanguage :: Parser Language adlLanguage = do spaces head <- string "language" parseAtoms :: Parser [Atom] parseAtoms = many atom where atom :: Parser Atom atom = do spaces name <- string spaces equal <- char '=' spaces <|> return [] data Language = Original_Laguage String | Translaions [Transpation] deriving Show data Translation = Symbol String | Language String | Author Author data Author = Name String | Organisation String data Atom = Name String | Description String type Version :: String