summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2022-12-16 20:54:00 -0700
committerJosh Rahm <joshuarahm@gmail.com>2022-12-16 20:54:00 -0700
commitbf66c00aa9ee8a7f8058e396db167324076331b2 (patch)
tree22a18d010eec2527e6a27aa65b40374b78991931
parent0eb6cb33982e2b00f5ffdedc300fa27ed4007967 (diff)
downloadfiddle-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.hs21
-rw-r--r--src/Language/Fiddle/Tokenizer.hs37
-rw-r--r--src/Language/Fiddle/Types.hs12
-rw-r--r--src/Main.hs4
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"