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 String 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