From f60b1a7568d097a5b539ebe649d00a44173e7f71 Mon Sep 17 00:00:00 2001 From: Philippe Pittoli Date: Sun, 23 Jul 2023 03:29:26 +0200 Subject: [PATCH] Playing with parsers: reading domain labels is okay-ish. --- drop/PlayingWithParsers.purs | 93 +++++++++++++++++------------------- 1 file changed, 44 insertions(+), 49 deletions(-) diff --git a/drop/PlayingWithParsers.purs b/drop/PlayingWithParsers.purs index ebdbaf8..24eb67b 100644 --- a/drop/PlayingWithParsers.purs +++ b/drop/PlayingWithParsers.purs @@ -3,18 +3,18 @@ module App.HomeInterface where import Prelude -import Control.Alt ((<|>)) import Control.Alt ((<|>)) import Control.Lazy (defer) -import Data.Array (many) +import Data.Array (many, snoc, last) import Data.Either (Either(..)) -import Data.Foldable (fold) +import Data.Foldable (fold, foldl) import Data.Maybe (Maybe(..)) +import Data.Array.NonEmpty as NonEmpty import Data.String.CodeUnits as CU -- import Data.String (joinWith) -- import Data.String.Regex as R -- import Data.String.Regex.Flags as RF --- import Data.Tuple (Tuple(..)) +import Data.Tuple (Tuple(..)) import Effect.Aff.Class (class MonadAff) import Effect (Effect) import Halogen as H @@ -23,6 +23,7 @@ import Halogen.HTML as HH import Halogen.HTML.Properties as HP import Parsing import Parsing.Combinators as PC +import Parsing.Combinators.Array (many1) import Parsing (Parser, runParser) import Parsing.String import Parsing.String.Basic @@ -64,7 +65,7 @@ render state [ Bulma.hero_danger "A simple input" "Nothing much to see" , Bulma.section_small $ [ h1 "Examples of domain parsing in Purescript" - ] <> test_domains [ "ex.net", "e-.net", "-x.net", "te.s-t.net", "example.com" ] + ] <> test_domains [ "ex.net", "e-x.net", "e-.net", "-x.net", "truc-blah.example.com", "te.s-t.net", "example.com" ] , Bulma.section_small [ render_stuff ] ] where @@ -96,11 +97,11 @@ render state -- tests_on_domain :: String -> _ tests_on_domain d - = [ text $ "domain: " <> d <> " [ldhstr, label, subdomain, domain]" - , p $ show $ runParser d ldhstr - , p $ show $ runParser d label - , p $ show $ runParser d subdomain - , p $ show $ runParser d domain + = [ Bulma.strong $ d <> " -> [ldhstr, label, subdomain, domain]" + , p $ d <> " : ldhstr : " <> (show $ runParser d ldhstr) + , p $ d <> " : label : " <> (show $ runParser d label) + -- , p $ show $ runParser d subdomain + --, p $ show $ runParser d domain ] aye :: Parser String Char @@ -114,12 +115,13 @@ ayebee = do parse_stuff :: Parser String Boolean parse_stuff = do - void $ alphaNum - void $ (void $ many (alphaNum <|> char '-' <|> char '.')) <|> eof + void $ label void $ eof pure true + +-- From RFC 1035: ::= | " " domain :: Parser String String domain = sub_eof <|> string " " @@ -129,6 +131,7 @@ sub_eof = do eof pure sub +-- From RFC 1035: ::=