diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2022-12-16 20:54:00 -0700 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2022-12-16 20:54:00 -0700 |
commit | bf66c00aa9ee8a7f8058e396db167324076331b2 (patch) | |
tree | 22a18d010eec2527e6a27aa65b40374b78991931 | |
parent | 0eb6cb33982e2b00f5ffdedc300fa27ed4007967 (diff) | |
download | fiddle-bf66c00aa9ee8a7f8058e396db167324076331b2.tar.gz fiddle-bf66c00aa9ee8a7f8058e396db167324076331b2.tar.bz2 fiddle-bf66c00aa9ee8a7f8058e396db167324076331b2.zip |
Start implementing "fiddle" code.
nothing is happening right now, but it's on its way.
-rw-r--r-- | src/Language/Fiddle/Parser.hs | 21 | ||||
-rw-r--r-- | src/Language/Fiddle/Tokenizer.hs | 37 | ||||
-rw-r--r-- | src/Language/Fiddle/Types.hs | 12 | ||||
-rw-r--r-- | src/Main.hs | 4 |
4 files changed, 74 insertions, 0 deletions
diff --git a/src/Language/Fiddle/Parser.hs b/src/Language/Fiddle/Parser.hs new file mode 100644 index 0000000..3a44b31 --- /dev/null +++ b/src/Language/Fiddle/Parser.hs @@ -0,0 +1,21 @@ +{-# LANGUAGE ScopedTypeVariables #-} + +module Language.Fiddle.Parser where + +import Language.Fiddle.Types +import Data.Functor.Identity +import Data.Text +import Text.Parsec + +newtype FiddleUnit a = FiddleUnit a + +parseUnit :: ParsecT s u m (FiddleUnit Metadata) +parseUnit = undefined + +parseText :: String -> Text -> Either String (FiddleUnit Metadata) +parseText sourceName txt = runIdentity $ do + res <- Text.Parsec.runParserT parseUnit () sourceName [] + return $ + case res of + Left pe -> Left (show pe) + Right a -> Right a diff --git a/src/Language/Fiddle/Tokenizer.hs b/src/Language/Fiddle/Tokenizer.hs new file mode 100644 index 0000000..9931523 --- /dev/null +++ b/src/Language/Fiddle/Tokenizer.hs @@ -0,0 +1,37 @@ +module Language.Fiddle.Tokenizer where + +import Language.Fiddle.Types + +data T + = KW_assert_pos + | KW_at + | KW_bittype + | KW_enum + | KW_location + | KW_object + | KW_objtype + | KW_option + | KW_package + | KW_reg + | KW_ro + | KW_wo + | Tok_colon + | Tok_comma + | Tok_comment + | Tok_docComment + | Tok_eq + | Tok_ident String + | Tok_lbrace + | Tok_lbracket + | Tok_litnum String + | Tok_lparen + | Tok_package + | Tok_rbrace + | Tok_rbracket + | Tok_rparen + | Tok_semi + +data Token = Token T SourceSpan + +tokenize :: String -> Text -> [Token] +tokenize srcName txt = undefined diff --git a/src/Language/Fiddle/Types.hs b/src/Language/Fiddle/Types.hs new file mode 100644 index 0000000..62538d8 --- /dev/null +++ b/src/Language/Fiddle/Types.hs @@ -0,0 +1,12 @@ +module Language.Fiddle.Types where + +import Text.Parsec (SourceSpan) + +newtype Comment = Comment Text + +data SourceSpan = SourceSpan + { sourceStart :: !SourcePos, + sourceStop :: !SourcePos + } + +data Metadata = Metadata SourceSpan Comment diff --git a/src/Main.hs b/src/Main.hs new file mode 100644 index 0000000..9249638 --- /dev/null +++ b/src/Main.hs @@ -0,0 +1,4 @@ +module Main where + +main :: IO () +main = putStrLn "Hello, World" |