module Language.Modelica.Parser.Programme where import Language.Modelica.Syntax.Programme import Language.Modelica.Parser.Parser (Parser) import Language.Modelica.Parser.Lexer import Language.Modelica.Parser.Utility (until) import Prelude hiding (until) import Text.ParserCombinators.Parsec ((<|>), try, manyTill, anyChar, lookAhead, string, char, eof) import Control.Applicative (liftA) code :: Parser TextSegment code = liftA Code $ manyTill anyChar (lookAhead p) where p = string "\"" <|> try (string "//") <|> try (string "/*") <|> (eof >> return "") block :: Parser TextSegment block = (char '\"' >> Str `until` (char '\"')) <|> (try (string "//") >> LineComment `until` eol_or_eof) <|> (try (string "/*") >> BlockComment `until` try (string "*/")) <|> code modelica_programme :: Parser [TextSegment] modelica_programme = manyTill block eof