aboutsummaryrefslogtreecommitdiff
path: root/thue.hs
diff options
context:
space:
mode:
authorJed Barber <jjbarber@y7mail.com>2014-02-07 03:57:38 +1100
committerJed Barber <jjbarber@y7mail.com>2014-02-07 03:57:38 +1100
commit29ec75e72f7b0c71442d9cd22d387ad0726bdd04 (patch)
treea25b30d76bdf4ae7d05248d1ea4ba01c5122768d /thue.hs
parentad324af3fa36961bf04361056fee6c2aff81a0a5 (diff)
Moved Thue parser into its own module
Diffstat (limited to 'thue.hs')
-rw-r--r--thue.hs72
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")
-