diff options
author | Jed Barber <jjbarber@y7mail.com> | 2014-02-07 03:57:38 +1100 |
---|---|---|
committer | Jed Barber <jjbarber@y7mail.com> | 2014-02-07 03:57:38 +1100 |
commit | 29ec75e72f7b0c71442d9cd22d387ad0726bdd04 (patch) | |
tree | a25b30d76bdf4ae7d05248d1ea4ba01c5122768d /thue.hs | |
parent | ad324af3fa36961bf04361056fee6c2aff81a0a5 (diff) |
Moved Thue parser into its own module
Diffstat (limited to 'thue.hs')
-rw-r--r-- | thue.hs | 72 |
1 files changed, 0 insertions, 72 deletions
diff --git a/thue.hs b/thue.hs deleted file mode 100644 index b76056e..0000000 --- a/thue.hs +++ /dev/null @@ -1,72 +0,0 @@ - -import Text.Combinators.Parsec - - - -data ThueProgram = ThueProgram { thueRules :: [Rule] - , thueInitialState :: State } - deriving (Show) - - -data Rule = Rule { original :: State - , replacement :: State } - deriving (Show) - - -type State = String - - - - -parseThue :: String -> Either ParseError ThueProgram -parseThue = parse thue "error" - - - - -thue = do - rs <- many rule - separatorLine - i <- initialState - eof - return (ThueProgram rs i) - - -rule = do - o <- ruleState - separator - r <- state - eol - return (Rule o r) - - -separatorLine = whiteSpace >> separator >> whiteSpace >> eol -separator = string "::=" - - -initialState = do - s <- state `sepEndBy` eol - return (concat s) - - -ruleState = many ruleStateChar - - -ruleStateChar = noneOf "\n\r:" - <|> try (do { char ':'; notFollowedBy (string ":="); return ':'}) - - -state = many stateChar - - -stateChar = noneOf "\n\r" - - -whiteSpace = many (oneOf "\t ") - - -eol = try (string "\r\n") - <|> try (string "\n\r") - <|> try (string "\r") - <|> try (string "\n") - |