mirror of
https://github.com/github/semantic.git
synced 2024-12-25 07:55:12 +03:00
Add a Function constructor to Syntax
This commit is contained in:
parent
129ece7820
commit
91bf955125
@ -17,6 +17,8 @@ data Category
|
|||||||
| Pair
|
| Pair
|
||||||
-- | A call to a function.
|
-- | A call to a function.
|
||||||
| FunctionCall
|
| FunctionCall
|
||||||
|
-- | A function declaration
|
||||||
|
| Function
|
||||||
-- | A string literal.
|
-- | A string literal.
|
||||||
| StringLiteral
|
| StringLiteral
|
||||||
-- | An integer literal.
|
-- | An integer literal.
|
||||||
|
@ -23,6 +23,7 @@ toTermName term = case runCofree term of
|
|||||||
(_ :< Indexed children) -> fromMaybe "EmptyIndexedNode" $ (toCategoryName . category) . extract <$> head children
|
(_ :< Indexed children) -> fromMaybe "EmptyIndexedNode" $ (toCategoryName . category) . extract <$> head children
|
||||||
(_ :< Fixed children) -> fromMaybe "EmptyFixedNode" $ (toCategoryName . category) . extract <$> head children
|
(_ :< Fixed children) -> fromMaybe "EmptyFixedNode" $ (toCategoryName . category) . extract <$> head children
|
||||||
(_ :< Syntax.FunctionCall i _) -> toTermName i
|
(_ :< Syntax.FunctionCall i _) -> toTermName i
|
||||||
|
(_ :< Syntax.Function _) -> "anonymous function"
|
||||||
|
|
||||||
class HasCategory a where
|
class HasCategory a where
|
||||||
toCategoryName :: a -> Text
|
toCategoryName :: a -> Text
|
||||||
|
@ -30,6 +30,10 @@ fixedCategories = Set.fromList [ BinaryOperator, Pair ]
|
|||||||
functionCallCategories :: Set.Set Category
|
functionCallCategories :: Set.Set Category
|
||||||
functionCallCategories = Set.singleton Category.FunctionCall
|
functionCallCategories = Set.singleton Category.FunctionCall
|
||||||
|
|
||||||
|
-- | Categories that are treated as functionCall nodes.
|
||||||
|
functionCategories :: Set.Set Category
|
||||||
|
functionCategories = Set.singleton Category.Function
|
||||||
|
|
||||||
-- | Should these categories be treated as keyed nodes?
|
-- | Should these categories be treated as keyed nodes?
|
||||||
isKeyed :: Category -> Bool
|
isKeyed :: Category -> Bool
|
||||||
isKeyed = flip Set.member keyedCategories
|
isKeyed = flip Set.member keyedCategories
|
||||||
@ -41,6 +45,9 @@ isFixed = flip Set.member fixedCategories
|
|||||||
isFunctionCall :: Category -> Bool
|
isFunctionCall :: Category -> Bool
|
||||||
isFunctionCall = flip Set.member functionCallCategories
|
isFunctionCall = flip Set.member functionCallCategories
|
||||||
|
|
||||||
|
isFunction :: Category -> Bool
|
||||||
|
isFunction = flip Set.member functionCategories
|
||||||
|
|
||||||
-- | Given a function that maps production names to sets of categories, produce
|
-- | Given a function that maps production names to sets of categories, produce
|
||||||
-- | a Constructor.
|
-- | a Constructor.
|
||||||
termConstructor :: Constructor
|
termConstructor :: Constructor
|
||||||
@ -50,6 +57,7 @@ termConstructor source info children = cofree (info :< syntax)
|
|||||||
construct :: [Term Text Info] -> Syntax Text (Term Text Info)
|
construct :: [Term Text Info] -> Syntax Text (Term Text Info)
|
||||||
construct [] = Leaf . pack . toString $ slice (characterRange info) source
|
construct [] = Leaf . pack . toString $ slice (characterRange info) source
|
||||||
construct children | isFunctionCall (category info), (x:xs) <- children = Syntax.FunctionCall x xs
|
construct children | isFunctionCall (category info), (x:xs) <- children = Syntax.FunctionCall x xs
|
||||||
|
construct children | isFunction (category info) = Syntax.Function children
|
||||||
construct children | isFixed (category info) = Fixed children
|
construct children | isFixed (category info) = Fixed children
|
||||||
construct children | isKeyed (category info) = Keyed . Map.fromList $ assignKey <$> children
|
construct children | isKeyed (category info) = Keyed . Map.fromList $ assignKey <$> children
|
||||||
construct children = Indexed children
|
construct children = Indexed children
|
||||||
|
@ -19,4 +19,6 @@ data Syntax
|
|||||||
| Keyed (OrderedMap T.Text f)
|
| Keyed (OrderedMap T.Text f)
|
||||||
-- | A function call has an identifier where f is a (Leaf a) and a list of arguments.
|
-- | A function call has an identifier where f is a (Leaf a) and a list of arguments.
|
||||||
| FunctionCall f [f]
|
| FunctionCall f [f]
|
||||||
|
-- | A function has a list of expressions.
|
||||||
|
| Function [f]
|
||||||
deriving (Functor, Show, Eq, Foldable, Traversable)
|
deriving (Functor, Show, Eq, Foldable, Traversable)
|
||||||
|
Loading…
Reference in New Issue
Block a user