]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/scl/Parsing.scl
Fixed all line endings of the repository
[simantics/platform.git] / tests / org.simantics.scl.compiler.tests / src / org / simantics / scl / compiler / tests / scl / Parsing.scl
index 0ca342a34b4aa294fb8be2899a04b4622e36baf5..22cc9895990675d29aadeff92a57da2ddd4909e8 100644 (file)
@@ -1,62 +1,62 @@
-import "Prelude"\r
-\r
-"""\r
-Parser is a function from a string and a position in the\r
-string to a possible semantics of a substring and the \r
-end of the substring.\r
-"""\r
-data Parser a = Parser (String -> Integer -> Maybe (a, Integer))\r
-\r
-runParser :: Parser a -> String -> Integer -> Maybe (a, Integer)\r
-runParser (Parser f) = f \r
-\r
-instance Functor Parser where\r
-    fmap f (Parser p) = Parser (\input pos -> match p input pos with\r
-        Nothing -> Nothing\r
-        Just (a, newPos) -> Just (f a, newPos)\r
-    )\r
-\r
-instance Monad Parser where\r
-    return x = Parser (\_ pos -> Just (x, pos))    \r
-    (pa >>= f) = Parser (\input pos -> match runParser pa input pos with\r
-        Nothing -> Nothing\r
-        Just (a, newPos) -> runParser (f a) input newPos\r
-    )  \r
-\r
-(|||) :: Parser a -> Parser a -> Parser a\r
-Parser a ||| Parser b = Parser (\input pos -> match a input pos with\r
-    Nothing -> b input pos\r
-    Just x -> Just x\r
-) \r
-\r
-keyword :: String -> Parser ()\r
-keyword word = Parser (\input pos ->\r
-    if regionMatches word 0 input pos (length word)\r
-      then Just ((), pos + (length word))\r
-      else Nothing\r
-)\r
-\r
-data List a = Nil | Cons a (List a)\r
-\r
-listSepL :: Parser () -> Parser a -> Parser (List a)\r
-listSepL sep el = mdo\r
-    head <- el\r
-    tail <- (sep >> listSepL sep el) ||| return Nil\r
-    return (Cons head tail) \r
-\r
-fromList :: List a -> [a]\r
-fromList = unfoldr gen\r
-  where\r
-    gen Nil        = Nothing\r
-    gen (Cons h t) = Just (h, t)\r
-    \r
-listSep :: Parser () -> Parser a -> Parser [a]    \r
-listSep sep el = fmap fromList (listSepL sep el) \r
-\r
-aOrB = (keyword "a" >> return "a") ||| (keyword "b" >> return "b")\r
-\r
-myParser = listSep (keyword ",") aOrB\r
-\r
-main = show (runParser myParser "a,b,b,a" 0)\r
---\r
+import "Prelude"
+
+"""
+Parser is a function from a string and a position in the
+string to a possible semantics of a substring and the 
+end of the substring.
+"""
+data Parser a = Parser (String -> Integer -> Maybe (a, Integer))
+
+runParser :: Parser a -> String -> Integer -> Maybe (a, Integer)
+runParser (Parser f) = f 
+
+instance Functor Parser where
+    fmap f (Parser p) = Parser (\input pos -> match p input pos with
+        Nothing -> Nothing
+        Just (a, newPos) -> Just (f a, newPos)
+    )
+
+instance Monad Parser where
+    return x = Parser (\_ pos -> Just (x, pos))    
+    (pa >>= f) = Parser (\input pos -> match runParser pa input pos with
+        Nothing -> Nothing
+        Just (a, newPos) -> runParser (f a) input newPos
+    )  
+
+(|||) :: Parser a -> Parser a -> Parser a
+Parser a ||| Parser b = Parser (\input pos -> match a input pos with
+    Nothing -> b input pos
+    Just x -> Just x
+) 
+
+keyword :: String -> Parser ()
+keyword word = Parser (\input pos ->
+    if regionMatches word 0 input pos (length word)
+      then Just ((), pos + (length word))
+      else Nothing
+)
+
+data List a = Nil | Cons a (List a)
+
+listSepL :: Parser () -> Parser a -> Parser (List a)
+listSepL sep el = mdo
+    head <- el
+    tail <- (sep >> listSepL sep el) ||| return Nil
+    return (Cons head tail) 
+
+fromList :: List a -> [a]
+fromList = unfoldr gen
+  where
+    gen Nil        = Nothing
+    gen (Cons h t) = Just (h, t)
+    
+listSep :: Parser () -> Parser a -> Parser [a]    
+listSep sep el = fmap fromList (listSepL sep el) 
+
+aOrB = (keyword "a" >> return "a") ||| (keyword "b" >> return "b")
+
+myParser = listSep (keyword ",") aOrB
+
+main = show (runParser myParser "a,b,b,a" 0)
+--
 Just (["a", "b", "b", "a"], 7)
\ No newline at end of file