summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/Syntax/Adapt.hs22
1 files changed, 18 insertions, 4 deletions
diff --git a/source/Syntax/Adapt.hs b/source/Syntax/Adapt.hs
index 4b43bc6..49796b4 100644
--- a/source/Syntax/Adapt.hs
+++ b/source/Syntax/Adapt.hs
@@ -20,7 +20,6 @@ import Text.Earley.Mixfix (Associativity(..))
import Text.Regex.Applicative
import Text.Megaparsec.Pos
-
scanChunk :: [Located Token] -> [ScannedLexicalItem]
scanChunk ltoks =
let toks = unLocated <$> ltoks
@@ -28,6 +27,8 @@ scanChunk ltoks =
in case ltoks of
Located{startPos = pos, unLocated = BeginEnv "definition"} : _ ->
matchOrErr definition "definition" pos
+ Located{startPos = pos, unLocated = BeginEnv "signature"} : _ ->
+ matchOrErr signaturePredicate "signature" pos
Located{startPos = pos, unLocated = BeginEnv "abbreviation"} : _ ->
matchOrErr abbreviation "abbreviation" pos
Located{startPos = pos, unLocated = (BeginEnv "struct")} :_ ->
@@ -87,13 +88,13 @@ abbreviation = do
skipUntilNextLexicalEnv
pure [lexicalItem m]
-signatureIntro :: RE Token [ScannedLexicalItem] --since signiture is a used word of haskell we have to name it diffrentliy
-signatureIntro = do
+signaturePredicate :: RE Token [ScannedLexicalItem]
+signaturePredicate = do
sym (BeginEnv "signature")
few notEndOfLexicalEnvToken
m <- label
few anySym
- lexicalItem <- head
+ lexicalItem <- sigPred
few anySym
sym (EndEnv "signature")
skipUntilNextLexicalEnv
@@ -117,6 +118,11 @@ head = ScanNoun <$> noun
<|> ScanFunctionSymbol <$> functionSymbol
<|> ScanPrefixPredicate <$> prefixPredicate
+sigPred :: RE Token (Marker -> ScannedLexicalItem)
+sigPred = ScanNoun . toLexicalPhrase <$> (var *> can *> be *> an *> pat <* iff)
+ <|> ScanAdj . toLexicalPhrase <$> (var *> can *> be *> pat <* iff)
+ -- <|> ScanVerbInfinitive . toLexicalPhrase <$> (var *> can *> pat <* iff)
+
inductive :: RE Token [ScannedLexicalItem]
inductive = do
sym (BeginEnv "inductive")
@@ -258,6 +264,14 @@ is :: RE Token ()
is = void (sym (Word "is") <|> sym (Word "denotes"))
{-# INLINE is #-}
+can :: RE Token ()
+can = void (sym (Word "can"))
+{-# INLINE can #-}
+
+be :: RE Token ()
+be = void (sym (Word "be"))
+{-# INLINE be #-}
+
the :: RE Token ()
the = void (sym (Word "the"))
{-# INLINE the #-}