parser/src/Main.purs

197 lines
6.6 KiB
Plaintext

module Main where
import Parser (Parser(..))
import DomainParser (domain, label, ldh_str, sub_eof, subdomain)
import Prelude (Unit, discard, show, ($), (<>))
import Effect (Effect)
import Effect.Console (log)
import Data.Either (Either(..))
--import Data.Maybe (Maybe(..))
--import Data.Tuple (Tuple(..))
import Data.String.CodeUnits (fromCharArray)
-- isf :: Parser Boolean
-- isf = (_ == 'f') <$> itemP
--
-- isf2 :: Parser Boolean
-- isf2 = (==) <$> itemP <*> pure 'f'
--
-- isf3 :: Parser Boolean
-- isf3 = charP 'f'
--
-- ishi :: Parser (Tuple Boolean Boolean)
-- ishi = Tuple <$> ((_ == 'h') <$> itemP) <*> ((_ == 'i') <$> itemP)
--
-- ishi2 :: Parser (Tuple Boolean Boolean)
-- ishi2 = ado
-- h <- itemP
-- i <- itemP
-- in Tuple (h == 'h') (i == 'i')
--
-- isffound :: Maybe (Tuple Boolean String) -> Effect Unit
-- isffound maybe = case maybe of
-- Nothing -> log "no more data"
-- Just (Tuple b str) -> do
-- let toprint = if b then "FOUND IT" else "not found"
-- log $ toprint <> ", rest: " <> str
logtest :: forall e v. String -> Parser e v -> String -> (v -> String) -> Effect Unit
logtest fname (Parser p) str r = do
log $ "(" <> fname <> ") parsing '" <> str <> "': "
<> case p { string: str, position: 0 } of
Left { position, error: _ } -> "failed at position " <> show position
Right { suffix, result } -> show (r result) <> " '" <> suffix.string <> "'"
id :: forall a. a -> a
id a = a
main :: Effect Unit
main = do
logtest "ldh_str" ldh_str "a12B.fl" fromCharArray
logtest "ldh_str" ldh_str "1efg.x1" fromCharArray
logtest "ldh_str" ldh_str ".qjzleb" fromCharArray
logtest "ldh_str" ldh_str "a-b.b-a" fromCharArray
logtest "ldh_str" ldh_str "" fromCharArray
log ""
logtest "label" label "example.org" id
logtest "label" label "" id
logtest "label" label "a.x" id
logtest "label" label "a2.org" id
logtest "label" label "a33.org" id
logtest "label" label "a444.org" id
logtest "label" label "a5555.org" id
logtest "label" label "a66666.org" id
logtest "label" label "a777777.org" id
logtest "label" label "a8888888.org" id
log ""
logtest "label" label "-" id
logtest "label" label "a-" id
log ""
logtest "subdomain" subdomain "example.org" id
logtest "subdomain" subdomain "" id
logtest "subdomain" subdomain "a.x" id
logtest "subdomain" subdomain "a2.org" id
logtest "subdomain" subdomain "a33.org" id
logtest "subdomain" subdomain "a444.org" id
logtest "subdomain" subdomain "a5555.org" id
logtest "subdomain" subdomain "a66666.org" id
logtest "subdomain" subdomain "a777777.org" id
logtest "subdomain" subdomain "a8888888.org" id
logtest "subdomain" subdomain "xblah.a.x" id
logtest "subdomain" subdomain "xblah.a2.org" id
logtest "subdomain" subdomain "xblah.a33.org" id
logtest "subdomain" subdomain "xblah.a444.org" id
logtest "subdomain" subdomain "xblah.a5555.org" id
logtest "subdomain" subdomain "xblah.a66666.org" id
logtest "subdomain" subdomain "xblah.a777777.org" id
logtest "subdomain" subdomain "xblah.a8888888.org" id
logtest "subdomain" subdomain "-" id
logtest "subdomain" subdomain "a-" id
log ""
logtest "sub_eof" sub_eof " " id
logtest "sub_eof" sub_eof " " id
logtest "sub_eof" sub_eof "example.org" id
logtest "sub_eof" sub_eof "" id
logtest "sub_eof" sub_eof "a.x" id
logtest "sub_eof" sub_eof "a2.org" id
logtest "sub_eof" sub_eof "a33.org" id
logtest "sub_eof" sub_eof "a444.org" id
logtest "sub_eof" sub_eof "a5555.org" id
logtest "sub_eof" sub_eof "a66666.org" id
logtest "sub_eof" sub_eof "a777777.org" id
logtest "sub_eof" sub_eof "a8888888.org" id
logtest "sub_eof" sub_eof "xblah.a.x" id
logtest "sub_eof" sub_eof "xblah.a2.org" id
logtest "sub_eof" sub_eof "xblah.a33.org" id
logtest "sub_eof" sub_eof "xblah.a444.org" id
logtest "sub_eof" sub_eof "xblah.a5555.org" id
logtest "sub_eof" sub_eof "xblah.a66666.org" id
logtest "sub_eof" sub_eof "xblah.a777777.org" id
logtest "sub_eof" sub_eof "xblah.a8888888.org" id
logtest "sub_eof" sub_eof "-" id
logtest "sub_eof" sub_eof "a-" id
log ""
logtest "domain" domain " " id
logtest "domain" domain " " id
logtest "domain" domain "example.org" id
logtest "domain" domain "" id
logtest "domain" domain "a.x" id
logtest "domain" domain "a2.org" id
logtest "domain" domain "a33.org" id
logtest "domain" domain "a444.org" id
logtest "domain" domain "a5555.org" id
logtest "domain" domain "a66666.org" id
logtest "domain" domain "a777777.org" id
logtest "domain" domain "a8888888.org" id
logtest "domain" domain "xblah.a.x" id
logtest "domain" domain "xblah.a2.org" id
logtest "domain" domain "xblah.a33.org" id
logtest "domain" domain "xblah.a444.org" id
logtest "domain" domain "xblah.a5555.org" id
logtest "domain" domain "xblah.a66666.org" id
logtest "domain" domain "xblah.a777777.org" id
logtest "domain" domain "xblah.a8888888.org" id
logtest "domain" domain "-" id
logtest "domain" domain "a-" id
-- log $ "parsing the first 'f' in 'fiction' (sat): " <> case parse (sat (\x -> x == 'f')) "fiction" of
-- Just (Tuple x y) -> show x <> " " <> show y
-- Nothing -> "failed"
--
-- log $ "parsing 'fic' in 'fiction' (string): " <> case parse (string "fic") "fiction" of
-- Just (Tuple x y) -> show x <> " " <> show y
-- Nothing -> "failed"
--
-- log $ "parsing ident (all first alphanum) in 'ab123-blah' (ident): " <>
-- case parse ident "ab123-blah" of
-- Just (Tuple x y) -> show x <> " " <> show y
-- Nothing -> "failed"
--
-- log $ "parsing integer in '-19ab' (integer): " <>
-- case parse integer "-19ab" of
-- Just (Tuple x y) -> show x <> " " <> show y
-- Nothing -> "failed"
-- JUST WORKS
-- isffound $ parse isf "fable"
-- isffound $ parse isf "f"
-- isffound $ parse isf "n"
-- isffound $ parse isf ""
--
-- isffound $ parse isf2 "fable"
-- isffound $ parse isf2 "f"
-- isffound $ parse isf2 "n"
-- isffound $ parse isf2 ""
-- log $ "parsing 'hi': " <> case parse ishi2 "hi" of
-- Just (Tuple x y) -> show x <> " " <> show y
-- Nothing -> "coudn't parse two letters"
--
-- log $ "parsing 'no': " <> case parse ishi2 "no" of
-- Just (Tuple x y) -> show x <> " " <> show y
-- Nothing -> "coudn't parse two letters"
--
-- log $ "parsing 'ho': " <> case parse ishi2 "ho" of
-- Just (Tuple x y) -> show x <> " " <> show y
-- Nothing -> "coudn't parse two letters"
--
-- log $ "parsing 'ni': " <> case parse ishi2 "ni" of
-- Just (Tuple x y) -> show x <> " " <> show y
-- Nothing -> "coudn't parse two letters"
--
-- log $ "parsing '': " <> case parse ishi2 "" of
-- Just (Tuple x y) -> show x <> " " <> show y
-- Nothing -> "coudn't parse two letters"