{-# LANGUAGE TupleSections #-}
module Language.EFLINT.Parse where
import Language.EFLINT.Spec
import GLL.Combinators hiding (many, some, IntLit, BoolLit, StringLit)
import Text.Regex.Applicative hiding ((<**>), optional)
import Data.Char (isLower)
import qualified Data.Map as M
flint_lexer :: String -> Either String [Token]
flint_lexer :: String -> Either String [Token]
flint_lexer = LexerSettings -> String -> Either String [Token]
forall t.
SubsumesToken t =>
LexerSettings -> String -> Either String [t]
lexerEither LexerSettings
lexer_settings
lexer_settings :: LexerSettings
lexer_settings :: LexerSettings
lexer_settings = LexerSettings
emptyLanguage {
identifiers :: RE Char String
identifiers = RE Char String
types
, keywords :: [String]
keywords = [String
"!?",String
"||", String
"&&", String
"<=", String
">=", String
"..", String
"True", String
"False", String
"Sum", String
"==", String
"!=", String
"When", String
"Where",String
"Holds when", String
"Holds", String
"Present when", String
"Present", String
"Max", String
"Min", String
"Count", String
"Union", String
"Enabled", String
"Violated when", String
"Violated"
, String
"Atom", String
"String", String
"Int", String
"Time", String
"Current Time"
, String
"Exists", String
"Forall", String
"Foreach", String
"Force"
, String
"Extend", String
"Event", String
"Act", String
"Fact", String
"Invariant", String
"Predicate", String
"Duty", String
"Actor", String
"Holder", String
"Claimant", String
"Recipient", String
"Related to", String
"Conditioned by", String
"Creates", String
"Terminates", String
"Obfuscates", String
"Terminated by", String
"With" , String
"Identified by", String
"Derived from", String
"Derived externally", String
"Enforced by", String
"Syncs with"
, String
"Do", String
"Placeholder", String
"For", String
"Not", String
"Open", String
"Closed"
, String
"#", String
"##", String
"###", String
"####"
, String
"#include", String
"#require"
]
, keychars :: String
keychars = [Char
'[', Char
']', Char
'(', Char
')', Char
'!', Char
',', Char
'\'', Char
'+', Char
'-', Char
'*', Char
'/', Char
'.', Char
'=', Char
'>', Char
'<', Char
':', Char
'?', Char
'{', Char
'}', Char
'%', Char
'~']
}
where types :: RE Char String
types = ([String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([String] -> String)
-> ([String] -> [String]) -> [String] -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
.) (([String] -> [String]) -> [String] -> String)
-> (String -> [String] -> [String]) -> String -> [String] -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (:) (String -> [String] -> String)
-> RE Char String -> RE Char ([String] -> String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
RE Char String
word RE Char ([String] -> String) -> RE Char [String] -> RE Char String
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> RE Char String -> RE Char [String]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many (String -> String -> String
forall a. [a] -> [a] -> [a]
(++) (String -> String -> String)
-> RE Char String -> RE Char (String -> String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ([String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([String] -> String) -> RE Char [String] -> RE Char String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> RE Char String -> RE Char [String]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
some ((Char -> String -> String
forall a. a -> [a] -> [a]
:[]) (Char -> String) -> RE Char Char -> RE Char String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Char -> Bool) -> RE Char Char
forall s. (s -> Bool) -> RE s s
psym (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
' '))) RE Char (String -> String) -> RE Char String -> RE Char String
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> RE Char String
word) RE Char String -> RE Char String -> RE Char String
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(\String
id -> String
"[" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
id String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
"]") (String -> String) -> RE Char Char -> RE Char (String -> String)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> RE Char Char
forall s. Eq s => s -> RE s s
sym Char
'[' RE Char (String -> String) -> RE Char String -> RE Char String
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> RE Char Char -> RE Char String
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many RE Char Char
internal RE Char String -> RE Char Char -> RE Char String
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Char -> RE Char Char
forall s. Eq s => s -> RE s s
sym Char
']' RE Char String -> RE Char String -> RE Char String
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(\String
id -> String
"<" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
id String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
">") (String -> String) -> RE Char Char -> RE Char (String -> String)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> RE Char Char
forall s. Eq s => s -> RE s s
sym Char
'<' RE Char (String -> String) -> RE Char String -> RE Char String
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> RE Char String
act_or_duty RE Char String -> RE Char Char -> RE Char String
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Char -> RE Char Char
forall s. Eq s => s -> RE s s
sym Char
'>'
where word :: RE Char String
word = (\Char
c [String]
ss -> Char
cChar -> String -> String
forall a. a -> [a] -> [a]
:[String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [String]
ss) (Char -> [String] -> String)
-> RE Char Char -> RE Char ([String] -> String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Char -> Bool) -> RE Char Char
forall s. (s -> Bool) -> RE s s
psym Char -> Bool
isLower RE Char ([String] -> String) -> RE Char [String] -> RE Char String
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> RE Char String -> RE Char [String]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many ((Char -> String -> String
forall a. a -> [a] -> [a]
:[]) (Char -> String) -> RE Char Char -> RE Char String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Char -> Bool) -> RE Char Char
forall s. (s -> Bool) -> RE s s
psym Char -> Bool
isLower RE Char String -> RE Char String -> RE Char String
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> RE Char String
hyphen RE Char String -> RE Char String -> RE Char String
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ((Char -> String -> String
forall a. a -> [a] -> [a]
:[]) (Char -> String) -> RE Char Char -> RE Char String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Char -> RE Char Char
forall s. Eq s => s -> RE s s
sym Char
'_'))
where hyphen :: RE Char String
hyphen = (\Char
c1 Char
c2 -> [Char
c1,Char
c2]) (Char -> Char -> String)
-> RE Char Char -> RE Char (Char -> String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Char -> RE Char Char
forall s. Eq s => s -> RE s s
sym Char
'-' RE Char (Char -> String) -> RE Char Char -> RE Char String
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Char -> Bool) -> RE Char Char
forall s. (s -> Bool) -> RE s s
psym Char -> Bool
isLower
act_or_duty :: RE Char String
act_or_duty = (\String
id -> String
"<" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
id String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
">") (String -> String) -> RE Char Char -> RE Char (String -> String)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> RE Char Char
forall s. Eq s => s -> RE s s
sym Char
'<' RE Char (String -> String) -> RE Char String -> RE Char String
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> RE Char Char -> RE Char String
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many RE Char Char
internal RE Char String -> RE Char Char -> RE Char String
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Char -> RE Char Char
forall s. Eq s => s -> RE s s
sym Char
'>'
RE Char String -> RE Char String -> RE Char String
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (:) (Char -> String -> String)
-> RE Char Char -> RE Char (String -> String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Char -> Bool) -> RE Char Char
forall s. (s -> Bool) -> RE s s
psym (Bool -> Bool
not (Bool -> Bool) -> (Char -> Bool) -> Char -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> String -> Bool) -> String -> Char -> Bool
forall a b c. (a -> b -> c) -> b -> a -> c
flip Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem String
"< =") RE Char (String -> String) -> RE Char String -> RE Char String
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> RE Char Char -> RE Char String
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many RE Char Char
internal
internal :: RE Char Char
internal = (Char -> Bool) -> RE Char Char
forall s. (s -> Bool) -> RE s s
psym (\Char
c -> Bool -> Bool
not (Char
c Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` String
"]>+="))
value_expr :: BNF Token Term
value_expr :: BNF Token Term
value_expr = String
"value-expr"
String -> OO [] AltExpr Token Term -> BNF Token Term
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<::= Bool -> Term
BoolLit Bool
True Term -> SymbExpr Token String -> AltExpr Token Term
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"True"
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Bool -> Term
BoolLit Bool
False Term -> SymbExpr Token String -> AltExpr Token Term
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"False"
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Term -> Term
When (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** SymbExpr Token String
keyword_when AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Term -> Term
Or (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"||" AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<<<**> BNF Token Term
value_expr
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Term -> Term
And (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"&&" AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<<<**> BNF Token Term
value_expr
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Term -> Term
Eq (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"==" AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Term -> Term
Neq (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"!=" AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Term -> Term
Leq (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"<=" AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<<<**> BNF Token Term
value_expr
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Term -> Term
Geq (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
">=" AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<<<**> BNF Token Term
value_expr
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Term -> Term
Le (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token Char -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'<' AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<<<**> BNF Token Term
value_expr
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Term -> Term
Ge (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token Char -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'>' AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<<<**> BNF Token Term
value_expr
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Term -> Term
Sub (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token Char -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'-' AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>>> BNF Token Term
value_expr
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Term -> Term
Add (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token Char -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'+' AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>>> BNF Token Term
value_expr
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Term -> Term
Mult (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token Char -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'*' AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>>> BNF Token Term
value_expr
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Term -> Term
Mod (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token Char -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'%' AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>>> BNF Token Term
value_expr
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Term -> Term
Div (Term -> Term -> Term)
-> BNF Token Term -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Term -> Term)
-> SymbExpr Token Char -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'/' AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>>> BNF Token Term
value_expr
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Term
Not (Term -> Term)
-> SymbExpr Token Char -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'!' AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Term
Not (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Not" AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Sum" SymbExpr Token String -> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ([Var] -> Term -> Term) -> BNF Token Term
forall a. ([Var] -> Term -> a) -> BNF Token a
foreach [Var] -> Term -> Term
Sum
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Count" SymbExpr Token String -> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ([Var] -> Term -> Term) -> BNF Token Term
forall a. ([Var] -> Term -> a) -> BNF Token a
foreach [Var] -> Term -> Term
Count
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Max" SymbExpr Token String -> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ([Var] -> Term -> Term) -> BNF Token Term
forall a. ([Var] -> Term -> a) -> BNF Token a
foreach [Var] -> Term -> Term
Max
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Min" SymbExpr Token String -> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ([Var] -> Term -> Term) -> BNF Token Term
forall a. ([Var] -> Term -> a) -> BNF Token a
foreach [Var] -> Term -> Term
Min
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Int -> Term
IntLit (Int -> Term) -> SymbExpr Token Int -> AltExpr Token Term
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Int
forall t. SubsumesToken t => SymbExpr t Int
int_lit
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> String -> Term
StringLit (String -> Term) -> SymbExpr Token String -> AltExpr Token Term
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token String
atom
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Var -> Term
Ref (Var -> Term) -> SymbExpr Token Var -> AltExpr Token Term
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Var
var
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> (String -> Arguments -> Term) -> BNF Token Term
forall a. (String -> Arguments -> a) -> BNF Token a
application String -> Arguments -> Term
App
BNF Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Var -> Term
Project (Term -> Var -> Term)
-> BNF Token Term -> AltExpr Token (Var -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (Var -> Term)
-> SymbExpr Token Char -> AltExpr Token (Var -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.' AltExpr Token (Var -> Term)
-> OO [] AltExpr Token Var -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> (SymbExpr Token Var
var SymbExpr Token Var -> SymbExpr Token Var -> OO [] AltExpr Token Var
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> SymbExpr Token Var -> SymbExpr Token Var
forall t (s :: * -> * -> *) b.
(Show t, Ord t, IsSymbExpr s, SubsumesToken t) =>
s t b -> BNF t b
parens SymbExpr Token Var
var)
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> String -> Term
Tag (Term -> String -> Term)
-> BNF Token Term -> AltExpr Token (String -> Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token (String -> Term)
-> SymbExpr Token Char -> AltExpr Token (String -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
':' AltExpr Token (String -> Term)
-> SymbExpr Token String -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> AltExpr Token Term -> BNF Token Term
forall t (s :: * -> * -> *) b.
(Show t, Ord t, IsSymbExpr s, SubsumesToken t) =>
s t b -> BNF t b
parens ([Var] -> Term -> Term
Exists ([Var] -> Term -> Term)
-> SymbExpr Token String -> AltExpr Token ([Var] -> Term -> Term)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Exists" AltExpr Token ([Var] -> Term -> Term)
-> SymbExpr Token [Var] -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token Var -> SymbExpr Token Char -> SymbExpr Token [Var]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 SymbExpr Token Var
var (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',') AltExpr Token (Term -> Term)
-> SymbExpr Token Char -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
':' AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr)
BNF Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> AltExpr Token Term -> BNF Token Term
forall t (s :: * -> * -> *) b.
(Show t, Ord t, IsSymbExpr s, SubsumesToken t) =>
s t b -> BNF t b
parens ([Var] -> Term -> Term
Forall ([Var] -> Term -> Term)
-> SymbExpr Token String -> AltExpr Token ([Var] -> Term -> Term)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Forall" AltExpr Token ([Var] -> Term -> Term)
-> SymbExpr Token [Var] -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token Var -> SymbExpr Token Char -> SymbExpr Token [Var]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 SymbExpr Token Var
var (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',') AltExpr Token (Term -> Term)
-> SymbExpr Token Char -> AltExpr Token (Term -> Term)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
':' AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr)
BNF Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Term
Present (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Present" AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Term
Present (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Holds" AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Term
Violated (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Violated" AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Term
Enabled (Term -> Term)
-> SymbExpr Token String -> AltExpr Token (Term -> Term)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Enabled" AltExpr Token (Term -> Term)
-> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr
AltExpr Token Term
-> OO [] AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> BNF Token Term -> BNF Token Term
forall t (s :: * -> * -> *) b.
(Show t, Ord t, IsSymbExpr s, SubsumesToken t) =>
s t b -> BNF t b
parens BNF Token Term
value_expr
BNF Token Term -> AltExpr Token Term -> OO [] AltExpr Token Term
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term
CurrentTime Term -> SymbExpr Token String -> AltExpr Token Term
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Current Time"
keyword_when :: BNF Token String
keyword_when :: SymbExpr Token String
keyword_when = String
"when-or-where" String -> OO [] AltExpr Token String -> SymbExpr Token String
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Where" SymbExpr Token String
-> SymbExpr Token String -> OO [] AltExpr Token String
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"When"
var :: BNF Token Var
var :: SymbExpr Token Var
var = String
"decorated-type-lit"
String -> AltExpr Token Var -> SymbExpr Token Var
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> String -> Var
Var (String -> String -> Var)
-> SymbExpr Token String -> AltExpr Token (String -> Var)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token (String -> Var)
-> SymbExpr Token String -> AltExpr Token Var
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
decoration
atom :: BNF Token String
atom :: SymbExpr Token String
atom = String
"atom" String -> OO [] AltExpr Token String -> SymbExpr Token String
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
string_lit SymbExpr Token String
-> SymbExpr Token String -> OO [] AltExpr Token String
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
alt_id_lit
decoration :: BNF Token String
decoration :: SymbExpr Token String
decoration = String
"decoration"
String -> AltExpr Token String -> SymbExpr Token String
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> Maybe Int -> String -> String
forall a. Show a => Maybe a -> String -> String
make_f (Maybe Int -> String -> String)
-> SymbExpr Token (Maybe Int) -> AltExpr Token (String -> String)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Int -> SymbExpr Token (Maybe Int)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional SymbExpr Token Int
forall t. SubsumesToken t => SymbExpr t Int
int_lit AltExpr Token (String -> String)
-> SymbExpr Token String -> AltExpr Token String
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token Char -> SymbExpr Token String
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t [a]
multiple (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'\'')
where make_f :: Maybe a -> String -> String
make_f Maybe a
mi String
str = String -> (a -> String) -> Maybe a -> String
forall b a. b -> (a -> b) -> Maybe a -> b
maybe String
"" a -> String
forall a. Show a => a -> String
show Maybe a
mi String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
str
arguments :: BNF Token Arguments
arguments :: BNF Token Arguments
arguments = String
"arguments"
String -> BNF Token Arguments -> BNF Token Arguments
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> OO [] AltExpr Token Arguments -> BNF Token Arguments
forall t (s :: * -> * -> *) b.
(Show t, Ord t, IsSymbExpr s, SubsumesToken t) =>
s t b -> BNF t b
parens ( [Modifier] -> Arguments
forall a b. b -> Either a b
Right ([Modifier] -> Arguments)
-> SymbExpr Token [Modifier] -> AltExpr Token Arguments
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Modifier
-> SymbExpr Token Char -> SymbExpr Token [Modifier]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy SymbExpr Token Modifier
modifier (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')
AltExpr Token Arguments
-> AltExpr Token Arguments -> OO [] AltExpr Token Arguments
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> [Term] -> Arguments
forall a b. a -> Either a b
Left ([Term] -> Arguments)
-> SymbExpr Token [Term] -> AltExpr Token Arguments
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term -> SymbExpr Token Char -> SymbExpr Token [Term]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 BNF Token Term
value_expr (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',') )
modifier :: BNF Token Modifier
modifier :: SymbExpr Token Modifier
modifier = String
"modifier"
String -> AltExpr Token Modifier -> SymbExpr Token Modifier
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> Var -> Term -> Modifier
Rename (Var -> Term -> Modifier)
-> SymbExpr Token Var -> AltExpr Token (Term -> Modifier)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Var
var AltExpr Token (Term -> Modifier)
-> SymbExpr Token Char -> AltExpr Token (Term -> Modifier)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'=' AltExpr Token (Term -> Modifier)
-> BNF Token Term -> AltExpr Token Modifier
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr
type_expr :: BNF Token Domain
type_expr :: BNF Token Domain
type_expr = String
"type-expr"
String -> OO [] AltExpr Token Domain -> BNF Token Domain
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<::= [Var] -> Domain
Products ([Var] -> Domain) -> (Var -> [Var]) -> Var -> Domain
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Var -> [Var] -> [Var]
forall a. a -> [a] -> [a]
:[]) (Var -> Domain) -> SymbExpr Token Var -> AltExpr Token Domain
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Var
var
AltExpr Token Domain
-> OO [] AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> [String] -> Domain
Strings ([String] -> Domain)
-> SymbExpr Token [String] -> AltExpr Token Domain
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token String
-> OO [] AltExpr Token Char -> SymbExpr Token [String]
forall t (s2 :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s2, IsSymbExpr s, IsAltExpr s2) =>
s t a -> s2 t b -> BNF t [a]
manySepBy2 SymbExpr Token String
atom (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'+' SymbExpr Token Char
-> SymbExpr Token Char -> OO [] AltExpr Token Char
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')
AltExpr Token Domain
-> OO [] AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> [Int] -> Domain
Ints ([Int] -> Domain) -> SymbExpr Token [Int] -> AltExpr Token Domain
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Int
-> OO [] AltExpr Token Char -> SymbExpr Token [Int]
forall t (s2 :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s2, IsSymbExpr s, IsAltExpr s2) =>
s t a -> s2 t b -> BNF t [a]
manySepBy2 SymbExpr Token Int
forall t. SubsumesToken t => SymbExpr t Int
int_lit (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'+' SymbExpr Token Char
-> SymbExpr Token Char -> OO [] AltExpr Token Char
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')
AltExpr Token Domain
-> OO [] AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> [Var] -> Domain
Products ([Var] -> Domain) -> SymbExpr Token [Var] -> AltExpr Token Domain
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Var -> SymbExpr Token Char -> SymbExpr Token [Var]
forall t (s2 :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s2, IsSymbExpr s, IsAltExpr s2) =>
s t a -> s2 t b -> BNF t [a]
manySepBy2 SymbExpr Token Var
var (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'*')
AltExpr Token Domain
-> OO [] AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> AltExpr Token Domain -> BNF Token Domain
forall t (s :: * -> * -> *) b.
(Show t, Ord t, IsSymbExpr s, SubsumesToken t) =>
s t b -> BNF t b
parens ([Var] -> Domain
Products ([Var] -> Domain) -> SymbExpr Token [Var] -> AltExpr Token Domain
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Var -> SymbExpr Token Char -> SymbExpr Token [Var]
forall t (s2 :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s2, IsSymbExpr s, IsAltExpr s2) =>
s t a -> s2 t b -> BNF t [a]
manySepBy2 SymbExpr Token Var
var (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'*'))
BNF Token Domain
-> OO [] AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> [Int] -> Domain
Ints ([Int] -> Domain) -> (Int -> [Int]) -> Int -> Domain
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int -> [Int] -> [Int]
forall a. a -> [a] -> [a]
:[]) (Int -> Domain) -> SymbExpr Token Int -> AltExpr Token Domain
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Int
forall t. SubsumesToken t => SymbExpr t Int
int_lit
AltExpr Token Domain
-> OO [] AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Int -> Int -> Domain
ints_from_domain (Int -> Int -> Domain)
-> SymbExpr Token Int -> AltExpr Token (Int -> Domain)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Int
forall t. SubsumesToken t => SymbExpr t Int
int_lit AltExpr Token (Int -> Domain)
-> SymbExpr Token String -> AltExpr Token (Int -> Domain)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
".." AltExpr Token (Int -> Domain)
-> SymbExpr Token Int -> AltExpr Token Domain
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token Int
forall t. SubsumesToken t => SymbExpr t Int
int_lit
AltExpr Token Domain
-> OO [] AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> [String] -> Domain
Strings ([String] -> Domain) -> (String -> [String]) -> String -> Domain
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> [String] -> [String]
forall a. a -> [a] -> [a]
:[]) (String -> Domain) -> SymbExpr Token String -> AltExpr Token Domain
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token String
atom
AltExpr Token Domain
-> OO [] AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Char -> Char -> Domain
strings_from_domain (Char -> Char -> Domain)
-> SymbExpr Token Char -> AltExpr Token (Char -> Domain)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Char
forall t. SubsumesToken t => SymbExpr t Char
char_lit AltExpr Token (Char -> Domain)
-> SymbExpr Token String -> AltExpr Token (Char -> Domain)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
".." AltExpr Token (Char -> Domain)
-> SymbExpr Token Char -> AltExpr Token Domain
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token Char
forall t. SubsumesToken t => SymbExpr t Char
char_lit
AltExpr Token Domain
-> OO [] AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Domain
AnyString Domain -> SymbExpr Token String -> AltExpr Token Domain
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"String"
AltExpr Token Domain
-> OO [] AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Domain
AnyString Domain -> SymbExpr Token String -> AltExpr Token Domain
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Atom"
AltExpr Token Domain
-> OO [] AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Domain
AnyInt Domain -> SymbExpr Token String -> AltExpr Token Domain
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Int"
AltExpr Token Domain
-> AltExpr Token Domain -> OO [] AltExpr Token Domain
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Domain
Time Domain -> SymbExpr Token String -> AltExpr Token Domain
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Time"
where ints_from_domain :: Int -> Int -> Domain
ints_from_domain :: Int -> Int -> Domain
ints_from_domain Int
min Int
max = [Int] -> Domain
Ints ([Int] -> Domain) -> [Int] -> Domain
forall a b. (a -> b) -> a -> b
$ [Int
min..Int
max]
strings_from_domain :: Char -> Char -> Domain
strings_from_domain :: Char -> Char -> Domain
strings_from_domain Char
min Char
max = [String] -> Domain
Strings ([String] -> Domain) -> [String] -> Domain
forall a b. (a -> b) -> a -> b
$ (Char -> String) -> String -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (Char -> String -> String
forall a. a -> [a] -> [a]
:[]) [Char
min..Char
max]
parse_component :: BNF Token a -> String -> Either String a
parse_component :: BNF Token a -> String -> Either String a
parse_component BNF Token a
p String
str = case String -> Either String [Token]
flint_lexer String
str of
Left String
err -> String -> Either String a
forall a b. a -> Either a b
Left String
err
Right [Token]
ts -> case CombinatorOptions -> BNF Token a -> [Token] -> Either String [a]
forall t (s :: * -> * -> *) a.
(Show t, Parseable t, IsSymbExpr s) =>
CombinatorOptions -> s t a -> [t] -> Either String [a]
parseWithOptionsAndError [Int -> CombinatorOption
maximumErrors Int
1] BNF Token a
p [Token]
ts of
Left String
err -> String -> Either String a
forall a b. a -> Either a b
Left String
err
Right [a]
as -> a -> Either String a
forall a b. b -> Either a b
Right ([a] -> a
forall a. [a] -> a
head [a]
as)
flint :: BNF Token (Spec, Refiner, Initialiser, Scenario)
flint :: BNF Token (Spec, Refiner, Initialiser, Scenario)
flint = String
"flint" String
-> AltExpr Token (Spec, Refiner, Initialiser, Scenario)
-> BNF Token (Spec, Refiner, Initialiser, Scenario)
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> [Decl]
-> Refiner
-> Initialiser
-> Scenario
-> (Spec, Refiner, Initialiser, Scenario)
forall b c d. [Decl] -> b -> c -> d -> (Spec, b, c, d)
cons ([Decl]
-> Refiner
-> Initialiser
-> Scenario
-> (Spec, Refiner, Initialiser, Scenario))
-> SymbExpr Token (Maybe String)
-> AltExpr
Token
([Decl]
-> Refiner
-> Initialiser
-> Scenario
-> (Spec, Refiner, Initialiser, Scenario))
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$
SymbExpr Token String -> SymbExpr Token (Maybe String)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"#") AltExpr
Token
([Decl]
-> Refiner
-> Initialiser
-> Scenario
-> (Spec, Refiner, Initialiser, Scenario))
-> SymbExpr Token [Decl]
-> AltExpr
Token
(Refiner
-> Initialiser
-> Scenario
-> (Spec, Refiner, Initialiser, Scenario))
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token [Decl]
declarations AltExpr
Token
(Refiner
-> Initialiser
-> Scenario
-> (Spec, Refiner, Initialiser, Scenario))
-> SymbExpr Token Refiner
-> AltExpr
Token
(Initialiser -> Scenario -> (Spec, Refiner, Initialiser, Scenario))
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
AltExpr Token Refiner -> Refiner -> SymbExpr Token Refiner
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"##" SymbExpr Token String
-> SymbExpr Token Refiner -> AltExpr Token Refiner
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> SymbExpr Token Refiner
refiner) Refiner
forall k a. Map k a
M.empty AltExpr
Token
(Initialiser -> Scenario -> (Spec, Refiner, Initialiser, Scenario))
-> SymbExpr Token Initialiser
-> AltExpr
Token (Scenario -> (Spec, Refiner, Initialiser, Scenario))
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
AltExpr Token Initialiser
-> Initialiser -> SymbExpr Token Initialiser
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"###" SymbExpr Token String
-> SymbExpr Token Initialiser -> AltExpr Token Initialiser
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> SymbExpr Token Initialiser
initialiser) [] AltExpr Token (Scenario -> (Spec, Refiner, Initialiser, Scenario))
-> SymbExpr Token Scenario
-> AltExpr Token (Spec, Refiner, Initialiser, Scenario)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
AltExpr Token Scenario -> Scenario -> SymbExpr Token Scenario
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"####" SymbExpr Token String
-> SymbExpr Token Scenario -> AltExpr Token Scenario
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> SymbExpr Token Scenario
scenario) []
where cons :: [Decl] -> b -> c -> d -> (Spec, b, c, d)
cons [Decl]
ds b
r c
i d
s = ([Decl] -> Spec -> Spec
extend_spec [Decl]
ds Spec
emptySpec, b
r, c
i, d
s)
parse_flint :: String -> Either String (Spec, Refiner, Initialiser, Scenario)
parse_flint = BNF Token (Spec, Refiner, Initialiser, Scenario)
-> String -> Either String (Spec, Refiner, Initialiser, Scenario)
forall a. BNF Token a -> String -> Either String a
parse_component BNF Token (Spec, Refiner, Initialiser, Scenario)
flint
declarations :: BNF Token [Decl]
declarations :: SymbExpr Token [Decl]
declarations = String
"declarations" String -> SymbExpr Token [Decl] -> SymbExpr Token [Decl]
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> SymbExpr Token Decl -> SymbExpr Token [Decl]
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t [a]
multiple1 SymbExpr Token Decl
frame
placeholder :: BNF Token Decl
placeholder :: SymbExpr Token Decl
placeholder = String
"placeholder-decl" String -> AltExpr Token Decl -> SymbExpr Token Decl
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> String -> Decl
PlaceholderDecl (String -> String -> Decl)
-> SymbExpr Token String
-> AltExpr Token (String -> String -> Decl)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Placeholder" AltExpr Token (String -> String -> Decl)
-> SymbExpr Token String -> AltExpr Token (String -> Decl)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token (String -> Decl)
-> SymbExpr Token String -> AltExpr Token (String -> Decl)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"For" AltExpr Token (String -> Decl)
-> SymbExpr Token String -> AltExpr Token Decl
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit
frame :: BNF Token Decl
frame :: SymbExpr Token Decl
frame = String
"frame" String -> OO [] AltExpr Token Decl -> SymbExpr Token Decl
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> OO [] AltExpr Token Decl
fact
OO [] AltExpr Token Decl
-> OO [] AltExpr Token Decl -> OO [] AltExpr Token Decl
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> SymbExpr Token Decl
duty
SymbExpr Token Decl
-> OO [] AltExpr Token Decl -> OO [] AltExpr Token Decl
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> SymbExpr Token Decl
act
SymbExpr Token Decl
-> OO [] AltExpr Token Decl -> OO [] AltExpr Token Decl
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> SymbExpr Token Decl
event
SymbExpr Token Decl
-> OO [] AltExpr Token Decl -> OO [] AltExpr Token Decl
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> SymbExpr Token Decl
syn_ext
SymbExpr Token Decl
-> SymbExpr Token Decl -> OO [] AltExpr Token Decl
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> SymbExpr Token Decl
placeholder
where fact :: OO [] AltExpr Token Decl
fact = (Bool -> String -> Domain -> Term -> [ModClause] -> Decl)
-> SymbExpr Token Decl
forall a.
(Bool -> String -> Domain -> Term -> [ModClause] -> a)
-> BNF Token a
syn_fact_decl (Bool
-> Bool -> Bool -> String -> Domain -> Term -> [ModClause] -> Decl
make_fact Bool
False Bool
False)
SymbExpr Token Decl
-> OO [] AltExpr Token Decl -> OO [] AltExpr Token Decl
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> (Bool -> String -> Domain -> Term -> [ModClause] -> Decl)
-> SymbExpr Token Decl
forall a.
(Bool -> String -> Domain -> Term -> [ModClause] -> a)
-> BNF Token a
syn_actor_decl (Bool
-> Bool -> Bool -> String -> Domain -> Term -> [ModClause] -> Decl
make_fact Bool
False Bool
True)
SymbExpr Token Decl
-> OO [] AltExpr Token Decl -> OO [] AltExpr Token Decl
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> (String -> Term -> Decl) -> SymbExpr Token Decl
forall a. (String -> Term -> a) -> BNF Token a
syn_pred_decl (Bool -> String -> Term -> Decl
make_pred Bool
False)
SymbExpr Token Decl
-> SymbExpr Token Decl -> OO [] AltExpr Token Decl
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> (String -> Term -> Decl) -> SymbExpr Token Decl
forall a. (String -> Term -> a) -> BNF Token a
syn_inv_decl String -> Term -> Decl
make_inv
where make_fact :: Bool
-> Bool -> Bool -> String -> Domain -> Term -> [ModClause] -> Decl
make_fact Bool
inv Bool
is_actor Bool
is_closed String
ty Domain
dom Term
dom_filter [ModClause]
clauses =
String -> TypeSpec -> Decl
TypeDecl String
ty (TypeSpec -> Decl) -> TypeSpec -> Decl
forall a b. (a -> b) -> a -> b
$ String -> [ModClause] -> TypeSpec -> TypeSpec
apply_type_ext String
ty [ModClause]
clauses TypeSpec
tspec
where tspec :: TypeSpec
tspec = TypeSpec :: Kind
-> Domain -> Term -> [Derivation] -> Bool -> [Term] -> TypeSpec
TypeSpec { kind :: Kind
kind = FactSpec -> Kind
Fact (Bool -> Bool -> FactSpec
FactSpec Bool
inv Bool
is_actor)
, domain :: Domain
domain = Domain
dom
, domain_constraint :: Term
domain_constraint = Term
dom_filter
, derivation :: [Derivation]
derivation = []
, closed :: Bool
closed = Bool
is_closed
, conditions :: [Term]
conditions = [] }
make_pred :: Bool -> String -> Term -> Decl
make_pred Bool
inv String
ty Term
t = Bool
-> Bool -> Bool -> String -> Domain -> Term -> [ModClause] -> Decl
make_fact Bool
inv Bool
False Bool
True String
ty ([Var] -> Domain
Products []) (Bool -> Term
BoolLit Bool
True) [[Derivation] -> ModClause
DerivationCl [Term -> Derivation
HoldsWhen Term
t]]
make_inv :: String -> Term -> Decl
make_inv String
ty Term
t = Bool -> String -> Term -> Decl
make_pred Bool
True String
ty Term
t
act :: SymbExpr Token Decl
act = (Bool
-> String
-> Maybe Var
-> Maybe Var
-> [Var]
-> Term
-> [ModClause]
-> Decl)
-> SymbExpr Token Decl
forall a.
(Bool
-> String
-> Maybe Var
-> Maybe Var
-> [Var]
-> Term
-> [ModClause]
-> a)
-> BNF Token a
syn_act_decl Bool
-> String
-> Maybe Var
-> Maybe Var
-> [Var]
-> Term
-> [ModClause]
-> Decl
make_act
where make_act :: Bool
-> String
-> Maybe Var
-> Maybe Var
-> [Var]
-> Term
-> [ModClause]
-> Decl
make_act Bool
is_closed String
ty Maybe Var
mact Maybe Var
mrec [Var]
attrs Term
dom_filter [ModClause]
clauses =
String -> TypeSpec -> Decl
TypeDecl String
ty (TypeSpec -> Decl) -> TypeSpec -> Decl
forall a b. (a -> b) -> a -> b
$ String -> [ModClause] -> TypeSpec -> TypeSpec
apply_type_ext String
ty [ModClause]
clauses TypeSpec
tspec
where tspec :: TypeSpec
tspec = TypeSpec :: Kind
-> Domain -> Term -> [Derivation] -> Bool -> [Term] -> TypeSpec
TypeSpec {
kind :: Kind
kind = ActSpec -> Kind
Act (ActSpec :: Initialiser -> [Sync] -> ActSpec
ActSpec {effects :: Initialiser
effects = [], syncs :: [Sync]
syncs = []} ),
domain :: Domain
domain = [Var] -> Domain
Products (Var
actorVar -> [Var] -> [Var]
forall a. a -> [a] -> [a]
:([Var] -> (Var -> [Var]) -> Maybe Var -> [Var]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] (Var -> [Var] -> [Var]
forall a. a -> [a] -> [a]
:[]) Maybe Var
mrec [Var] -> [Var] -> [Var]
forall a. [a] -> [a] -> [a]
++ [Var]
attrs)),
domain_constraint :: Term
domain_constraint = Term
dom_filter,
derivation :: [Derivation]
derivation = [],
closed :: Bool
closed = Bool
is_closed,
conditions :: [Term]
conditions = [] }
actor :: Var
actor = Var -> (Var -> Var) -> Maybe Var -> Var
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (String -> Var
no_decoration String
"actor") Var -> Var
forall a. a -> a
id Maybe Var
mact
event :: SymbExpr Token Decl
event = (Bool -> String -> [Var] -> Term -> [ModClause] -> Decl)
-> SymbExpr Token Decl
forall a.
(Bool -> String -> [Var] -> Term -> [ModClause] -> a)
-> BNF Token a
syn_event_decl Bool -> String -> [Var] -> Term -> [ModClause] -> Decl
make_event
where make_event :: Bool -> String -> [Var] -> Term -> [ModClause] -> Decl
make_event Bool
is_closed String
ty [Var]
attrs Term
dom_filter [ModClause]
clauses =
String -> TypeSpec -> Decl
TypeDecl String
ty (TypeSpec -> Decl) -> TypeSpec -> Decl
forall a b. (a -> b) -> a -> b
$ String -> [ModClause] -> TypeSpec -> TypeSpec
apply_type_ext String
ty [ModClause]
clauses TypeSpec
tspec
where tspec :: TypeSpec
tspec = TypeSpec :: Kind
-> Domain -> Term -> [Derivation] -> Bool -> [Term] -> TypeSpec
TypeSpec {
kind :: Kind
kind = EventSpec -> Kind
Event (EventSpec :: Initialiser -> EventSpec
EventSpec { event_effects :: Initialiser
event_effects = [] })
, domain :: Domain
domain = [Var] -> Domain
Products [Var]
attrs
, domain_constraint :: Term
domain_constraint = Term
dom_filter
, derivation :: [Derivation]
derivation = []
, closed :: Bool
closed = Bool
is_closed
, conditions :: [Term]
conditions = []
}
duty :: SymbExpr Token Decl
duty = (Bool
-> String -> Var -> Var -> [Var] -> Term -> [ModClause] -> Decl)
-> SymbExpr Token Decl
forall a.
(Bool -> String -> Var -> Var -> [Var] -> Term -> [ModClause] -> a)
-> BNF Token a
syn_duty_decl Bool
-> String -> Var -> Var -> [Var] -> Term -> [ModClause] -> Decl
make_duty
where make_duty :: Bool
-> String -> Var -> Var -> [Var] -> Term -> [ModClause] -> Decl
make_duty Bool
is_closed String
ty Var
hold Var
claim [Var]
attrs Term
dom_filter [ModClause]
clauses =
String -> TypeSpec -> Decl
TypeDecl String
ty (TypeSpec -> Decl) -> TypeSpec -> Decl
forall a b. (a -> b) -> a -> b
$ String -> [ModClause] -> TypeSpec -> TypeSpec
apply_type_ext String
ty [ModClause]
clauses TypeSpec
tspec
where tspec :: TypeSpec
tspec = TypeSpec :: Kind
-> Domain -> Term -> [Derivation] -> Bool -> [Term] -> TypeSpec
TypeSpec {
domain :: Domain
domain = [Var] -> Domain
Products (Var
holdVar -> [Var] -> [Var]
forall a. a -> [a] -> [a]
:Var
claimVar -> [Var] -> [Var]
forall a. a -> [a] -> [a]
:[Var]
attrs),
domain_constraint :: Term
domain_constraint = Term
dom_filter,
kind :: Kind
kind = DutySpec -> Kind
Duty (DutySpec :: [String] -> [Term] -> DutySpec
DutySpec { violated_when :: [Term]
violated_when = [], enforcing_acts :: [String]
enforcing_acts = []}),
derivation :: [Derivation]
derivation = [],
closed :: Bool
closed = Bool
is_closed,
conditions :: [Term]
conditions = []}
syn_fact_decl :: (Bool -> DomId -> Domain -> Term -> [ModClause] -> a) -> BNF Token a
syn_fact_decl :: (Bool -> String -> Domain -> Term -> [ModClause] -> a)
-> BNF Token a
syn_fact_decl Bool -> String -> Domain -> Term -> [ModClause] -> a
cons = String
"fact-type-decl" String -> AltExpr Token a -> BNF Token a
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> Bool -> String -> Domain -> Term -> [ModClause] -> a
cons (Bool -> String -> Domain -> Term -> [ModClause] -> a)
-> SymbExpr Token Bool
-> AltExpr Token (String -> Domain -> Term -> [ModClause] -> a)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$>
SymbExpr Token Bool
syn_is_closed AltExpr Token (String -> Domain -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr Token (String -> Domain -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Fact" AltExpr Token (String -> Domain -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr Token (Domain -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token (Domain -> Term -> [ModClause] -> a)
-> BNF Token Domain -> AltExpr Token (Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
AltExpr Token Domain -> Domain -> BNF Token Domain
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Identified by" SymbExpr Token String -> BNF Token Domain -> AltExpr Token Domain
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> BNF Token Domain
type_expr) Domain
AnyString AltExpr Token (Term -> [ModClause] -> a)
-> BNF Token Term -> AltExpr Token ([ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
BNF Token Term
syn_domain_constraint AltExpr Token ([ModClause] -> a)
-> SymbExpr Token [ModClause] -> AltExpr Token a
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
SymbExpr Token [ModClause]
syn_fact_clauses
syn_ext :: BNF Token Decl
syn_ext :: SymbExpr Token Decl
syn_ext = String
"type-ext" String -> AltExpr Token Decl -> SymbExpr Token Decl
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=>
String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Extend" SymbExpr Token String
-> OO [] AltExpr Token Decl -> AltExpr Token Decl
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ( SymbExpr Token Decl
syn_fact_ext
SymbExpr Token Decl
-> OO [] AltExpr Token Decl -> OO [] AltExpr Token Decl
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> SymbExpr Token Decl
syn_act_ext
SymbExpr Token Decl
-> OO [] AltExpr Token Decl -> OO [] AltExpr Token Decl
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> SymbExpr Token Decl
syn_duty_ext
SymbExpr Token Decl
-> SymbExpr Token Decl -> OO [] AltExpr Token Decl
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> SymbExpr Token Decl
syn_event_ext )
syn_is_closed :: BNF Token Bool
syn_is_closed :: SymbExpr Token Bool
syn_is_closed = String
"is-type-closed-modifier" String -> SymbExpr Token Bool -> SymbExpr Token Bool
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> OO [] AltExpr Token Bool -> Bool -> SymbExpr Token Bool
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef OO [] AltExpr Token Bool
alts Bool
True
where alts :: OO [] AltExpr Token Bool
alts = Bool
True Bool -> SymbExpr Token String -> AltExpr Token Bool
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Closed"
AltExpr Token Bool
-> AltExpr Token Bool -> OO [] AltExpr Token Bool
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Bool
False Bool -> SymbExpr Token String -> AltExpr Token Bool
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Open"
syn_fact_ext :: BNF Token Decl
syn_fact_ext :: SymbExpr Token Decl
syn_fact_ext = String
"fact-type-ext" String -> AltExpr Token Decl -> SymbExpr Token Decl
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> [ModClause] -> Decl
TypeExt (String -> [ModClause] -> Decl)
-> SymbExpr Token String
-> AltExpr Token (String -> [ModClause] -> Decl)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Fact" AltExpr Token (String -> [ModClause] -> Decl)
-> SymbExpr Token String -> AltExpr Token ([ModClause] -> Decl)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token ([ModClause] -> Decl)
-> SymbExpr Token [ModClause] -> AltExpr Token Decl
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token [ModClause]
syn_fact_clauses
syn_actor_decl :: (Bool -> DomId -> Domain -> Term -> [ModClause] -> a) -> BNF Token a
syn_actor_decl :: (Bool -> String -> Domain -> Term -> [ModClause] -> a)
-> BNF Token a
syn_actor_decl Bool -> String -> Domain -> Term -> [ModClause] -> a
cons = String
"actor-type-decl" String -> AltExpr Token a -> BNF Token a
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> Bool -> String -> [Var] -> Term -> [ModClause] -> a
cons' (Bool -> String -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token Bool
-> AltExpr Token (String -> [Var] -> Term -> [ModClause] -> a)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$>
SymbExpr Token Bool
syn_is_closed AltExpr Token (String -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr Token (String -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Actor" AltExpr Token (String -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr Token ([Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token ([Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token [Var] -> AltExpr Token (Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
AltExpr Token [Var] -> [Var] -> SymbExpr Token [Var]
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"With" SymbExpr Token String
-> SymbExpr Token [Var] -> AltExpr Token [Var]
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> SymbExpr Token Var -> SymbExpr Token Char -> SymbExpr Token [Var]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
manySepBy1 SymbExpr Token Var
var (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'*')) [] AltExpr Token (Term -> [ModClause] -> a)
-> BNF Token Term -> AltExpr Token ([ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
BNF Token Term
syn_domain_constraint AltExpr Token ([ModClause] -> a)
-> SymbExpr Token [ModClause] -> AltExpr Token a
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
SymbExpr Token [ModClause]
syn_fact_clauses
where cons' :: Bool -> String -> [Var] -> Term -> [ModClause] -> a
cons' Bool
isc String
d [Var]
vars Term
t = Bool -> String -> Domain -> Term -> [ModClause] -> a
cons Bool
isc String
d ([Var] -> Domain
Products (String -> String -> Var
Var String
actor_ref_address String
"" Var -> [Var] -> [Var]
forall a. a -> [a] -> [a]
: [Var]
vars)) Term
t
syn_pred_decl :: (DomId -> Term -> a) -> BNF Token a
syn_pred_decl :: (String -> Term -> a) -> BNF Token a
syn_pred_decl String -> Term -> a
cons = String
"pred-type-decl" String -> AltExpr Token a -> BNF Token a
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> Term -> a
cons (String -> Term -> a)
-> SymbExpr Token String -> AltExpr Token (String -> Term -> a)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$
String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Predicate" AltExpr Token (String -> Term -> a)
-> SymbExpr Token String -> AltExpr Token (Term -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token (Term -> a)
-> SymbExpr Token String -> AltExpr Token (Term -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** SymbExpr Token String
keyword_when AltExpr Token (Term -> a) -> BNF Token Term -> AltExpr Token a
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr
syn_inv_decl :: (DomId -> Term -> a) -> BNF Token a
syn_inv_decl :: (String -> Term -> a) -> BNF Token a
syn_inv_decl String -> Term -> a
cons = String
"inv-type-decl" String -> AltExpr Token a -> BNF Token a
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> Term -> a
cons (String -> Term -> a)
-> SymbExpr Token String -> AltExpr Token (String -> Term -> a)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$
String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Invariant" AltExpr Token (String -> Term -> a)
-> SymbExpr Token String -> AltExpr Token (Term -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token (Term -> a)
-> SymbExpr Token String -> AltExpr Token (Term -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** SymbExpr Token String
keyword_when AltExpr Token (Term -> a) -> BNF Token Term -> AltExpr Token a
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr
syn_domain_constraint :: BNF Token Term
syn_domain_constraint = AltExpr Token Term -> Term -> BNF Token Term
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef (SymbExpr Token String
keyword_when SymbExpr Token String -> BNF Token Term -> AltExpr Token Term
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> BNF Token Term
value_expr) (Bool -> Term
BoolLit Bool
True)
syn_duty_decl :: (Bool -> DomId -> Var -> Var -> [Var] -> Term -> [ModClause] -> a) -> BNF Token a
syn_duty_decl :: (Bool -> String -> Var -> Var -> [Var] -> Term -> [ModClause] -> a)
-> BNF Token a
syn_duty_decl Bool -> String -> Var -> Var -> [Var] -> Term -> [ModClause] -> a
cons = String
"duty-type-decl" String -> AltExpr Token a -> BNF Token a
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> Bool -> String -> Var -> Var -> [Var] -> Term -> [ModClause] -> a
cons (Bool -> String -> Var -> Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token Bool
-> AltExpr
Token (String -> Var -> Var -> [Var] -> Term -> [ModClause] -> a)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$>
SymbExpr Token Bool
syn_is_closed AltExpr
Token (String -> Var -> Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr
Token (String -> Var -> Var -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Duty" AltExpr
Token (String -> Var -> Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr Token (Var -> Var -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token (Var -> Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token (Maybe String)
-> AltExpr Token (Var -> Var -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** SymbExpr Token String -> SymbExpr Token (Maybe String)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"With") AltExpr Token (Var -> Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr Token (Var -> Var -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<**
String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Holder" AltExpr Token (Var -> Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token Var
-> AltExpr Token (Var -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token Var
var AltExpr Token (Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr Token (Var -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<**
String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Claimant" AltExpr Token (Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token Var
-> AltExpr Token ([Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token Var
var AltExpr Token ([Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token [Var] -> AltExpr Token (Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
SymbExpr Token [Var]
objects AltExpr Token (Term -> [ModClause] -> a)
-> BNF Token Term -> AltExpr Token ([ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
syn_domain_constraint AltExpr Token ([ModClause] -> a)
-> SymbExpr Token [ModClause] -> AltExpr Token a
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
SymbExpr Token [ModClause]
syn_duty_clauses
syn_act_decl :: (Bool -> DomId -> Maybe Var -> Maybe Var -> [Var] -> Term -> [ModClause] -> a) -> BNF Token a
syn_act_decl :: (Bool
-> String
-> Maybe Var
-> Maybe Var
-> [Var]
-> Term
-> [ModClause]
-> a)
-> BNF Token a
syn_act_decl Bool
-> String
-> Maybe Var
-> Maybe Var
-> [Var]
-> Term
-> [ModClause]
-> a
cons = String
"act-type-decl" String -> AltExpr Token a -> BNF Token a
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> Bool
-> String
-> Maybe Var
-> Maybe Var
-> [Var]
-> Term
-> [ModClause]
-> a
cons (Bool
-> String
-> Maybe Var
-> Maybe Var
-> [Var]
-> Term
-> [ModClause]
-> a)
-> SymbExpr Token Bool
-> AltExpr
Token
(String
-> Maybe Var -> Maybe Var -> [Var] -> Term -> [ModClause] -> a)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$>
SymbExpr Token Bool
syn_is_closed AltExpr
Token
(String
-> Maybe Var -> Maybe Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr
Token
(String
-> Maybe Var -> Maybe Var -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Act" AltExpr
Token
(String
-> Maybe Var -> Maybe Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr
Token (Maybe Var -> Maybe Var -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr
Token (Maybe Var -> Maybe Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token (Maybe String)
-> AltExpr
Token (Maybe Var -> Maybe Var -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** SymbExpr Token String -> SymbExpr Token (Maybe String)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"With") AltExpr
Token (Maybe Var -> Maybe Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token (Maybe Var)
-> AltExpr Token (Maybe Var -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
AltExpr Token Var -> SymbExpr Token (Maybe Var)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Actor" SymbExpr Token String -> SymbExpr Token Var -> AltExpr Token Var
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> SymbExpr Token Var
var) AltExpr Token (Maybe Var -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token (Maybe Var)
-> AltExpr Token ([Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
AltExpr Token Var -> SymbExpr Token (Maybe Var)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Recipient" SymbExpr Token String -> SymbExpr Token Var -> AltExpr Token Var
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> SymbExpr Token Var
var) AltExpr Token ([Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token [Var] -> AltExpr Token (Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
SymbExpr Token [Var]
objects AltExpr Token (Term -> [ModClause] -> a)
-> BNF Token Term -> AltExpr Token ([ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
syn_domain_constraint AltExpr Token ([ModClause] -> a)
-> SymbExpr Token [ModClause] -> AltExpr Token a
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
SymbExpr Token [ModClause]
syn_event_clauses
syn_act_ext :: BNF Token Decl
syn_act_ext :: SymbExpr Token Decl
syn_act_ext = String
"act-type-ext" String -> AltExpr Token Decl -> SymbExpr Token Decl
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> [ModClause] -> Decl
TypeExt (String -> [ModClause] -> Decl)
-> SymbExpr Token String
-> AltExpr Token (String -> [ModClause] -> Decl)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Act" AltExpr Token (String -> [ModClause] -> Decl)
-> SymbExpr Token String -> AltExpr Token ([ModClause] -> Decl)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token ([ModClause] -> Decl)
-> SymbExpr Token [ModClause] -> AltExpr Token Decl
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token [ModClause]
syn_event_clauses
syn_event_ext :: BNF Token Decl
syn_event_ext :: SymbExpr Token Decl
syn_event_ext = String
"event-type-ext" String -> AltExpr Token Decl -> SymbExpr Token Decl
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> [ModClause] -> Decl
TypeExt (String -> [ModClause] -> Decl)
-> SymbExpr Token String
-> AltExpr Token (String -> [ModClause] -> Decl)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Event" AltExpr Token (String -> [ModClause] -> Decl)
-> SymbExpr Token String -> AltExpr Token ([ModClause] -> Decl)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token ([ModClause] -> Decl)
-> SymbExpr Token [ModClause] -> AltExpr Token Decl
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token [ModClause]
syn_event_clauses
syn_duty_ext :: BNF Token Decl
syn_duty_ext :: SymbExpr Token Decl
syn_duty_ext = String
"duty-type-ext" String -> AltExpr Token Decl -> SymbExpr Token Decl
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> [ModClause] -> Decl
TypeExt (String -> [ModClause] -> Decl)
-> SymbExpr Token String
-> AltExpr Token (String -> [ModClause] -> Decl)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Duty" AltExpr Token (String -> [ModClause] -> Decl)
-> SymbExpr Token String -> AltExpr Token ([ModClause] -> Decl)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token ([ModClause] -> Decl)
-> SymbExpr Token [ModClause] -> AltExpr Token Decl
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token [ModClause]
syn_duty_clauses
syn_event_decl :: (Bool -> DomId -> [Var] -> Term -> [ModClause] -> a) -> BNF Token a
syn_event_decl :: (Bool -> String -> [Var] -> Term -> [ModClause] -> a)
-> BNF Token a
syn_event_decl Bool -> String -> [Var] -> Term -> [ModClause] -> a
cons = String
"event-type-decl" String -> AltExpr Token a -> BNF Token a
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> Bool -> String -> [Var] -> Term -> [ModClause] -> a
cons (Bool -> String -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token Bool
-> AltExpr Token (String -> [Var] -> Term -> [ModClause] -> a)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$>
SymbExpr Token Bool
syn_is_closed AltExpr Token (String -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr Token (String -> [Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Event" AltExpr Token (String -> [Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token String
-> AltExpr Token ([Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token ([Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token (Maybe String)
-> AltExpr Token ([Var] -> Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** SymbExpr Token String -> SymbExpr Token (Maybe String)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"With") AltExpr Token ([Var] -> Term -> [ModClause] -> a)
-> SymbExpr Token [Var] -> AltExpr Token (Term -> [ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
SymbExpr Token [Var]
objects AltExpr Token (Term -> [ModClause] -> a)
-> BNF Token Term -> AltExpr Token ([ModClause] -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
syn_domain_constraint AltExpr Token ([ModClause] -> a)
-> SymbExpr Token [ModClause] -> AltExpr Token a
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**>
SymbExpr Token [ModClause]
syn_event_clauses
syn_fact_clauses :: BNF Token [ModClause]
syn_fact_clauses :: SymbExpr Token [ModClause]
syn_fact_clauses = SymbExpr Token ModClause -> SymbExpr Token [ModClause]
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t [a]
multiple SymbExpr Token ModClause
syn_fact_clause
where syn_fact_clause :: SymbExpr Token ModClause
syn_fact_clause = String
"fact-clause" String -> OO [] AltExpr Token ModClause -> SymbExpr Token ModClause
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> [Term] -> ModClause
ConditionedByCl ([Term] -> ModClause)
-> AltExpr Token [Term] -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> AltExpr Token [Term]
precondition'
AltExpr Token ModClause
-> AltExpr Token ModClause -> OO [] AltExpr Token ModClause
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> [Derivation] -> ModClause
DerivationCl ([Derivation] -> ModClause)
-> SymbExpr Token [Derivation] -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token [Derivation]
derivation_from
syn_event_clauses :: BNF Token [ModClause]
syn_event_clauses :: SymbExpr Token [ModClause]
syn_event_clauses = SymbExpr Token ModClause -> SymbExpr Token [ModClause]
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t [a]
multiple SymbExpr Token ModClause
syn_event_clause
where syn_event_clause :: SymbExpr Token ModClause
syn_event_clause = String
"event-clause" String -> OO [] AltExpr Token ModClause -> SymbExpr Token ModClause
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> [Term] -> ModClause
ConditionedByCl ([Term] -> ModClause)
-> AltExpr Token [Term] -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> AltExpr Token [Term]
precondition'
AltExpr Token ModClause
-> OO [] AltExpr Token ModClause -> OO [] AltExpr Token ModClause
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> [Derivation] -> ModClause
DerivationCl ([Derivation] -> ModClause)
-> SymbExpr Token [Derivation] -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token [Derivation]
derivation_from
AltExpr Token ModClause
-> OO [] AltExpr Token ModClause -> OO [] AltExpr Token ModClause
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Initialiser -> ModClause
PostCondCl (Initialiser -> ModClause)
-> AltExpr Token Initialiser -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> AltExpr Token Initialiser
creating_post'
AltExpr Token ModClause
-> OO [] AltExpr Token ModClause -> OO [] AltExpr Token ModClause
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Initialiser -> ModClause
PostCondCl (Initialiser -> ModClause)
-> AltExpr Token Initialiser -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> AltExpr Token Initialiser
terminating_post'
AltExpr Token ModClause
-> OO [] AltExpr Token ModClause -> OO [] AltExpr Token ModClause
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Initialiser -> ModClause
PostCondCl (Initialiser -> ModClause)
-> AltExpr Token Initialiser -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> AltExpr Token Initialiser
obfuscating_post'
AltExpr Token ModClause
-> AltExpr Token ModClause -> OO [] AltExpr Token ModClause
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> [Sync] -> ModClause
SyncCl ([Sync] -> ModClause)
-> SymbExpr Token [Sync] -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token [Sync]
synchronisations
syn_duty_clauses :: BNF Token [ModClause]
syn_duty_clauses :: SymbExpr Token [ModClause]
syn_duty_clauses = SymbExpr Token ModClause -> SymbExpr Token [ModClause]
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t [a]
multiple SymbExpr Token ModClause
syn_duty_clause
where syn_duty_clause :: SymbExpr Token ModClause
syn_duty_clause = String
"duty-clause" String -> OO [] AltExpr Token ModClause -> SymbExpr Token ModClause
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> [Term] -> ModClause
ConditionedByCl ([Term] -> ModClause)
-> AltExpr Token [Term] -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> AltExpr Token [Term]
precondition'
AltExpr Token ModClause
-> OO [] AltExpr Token ModClause -> OO [] AltExpr Token ModClause
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> [Derivation] -> ModClause
DerivationCl ([Derivation] -> ModClause)
-> SymbExpr Token [Derivation] -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token [Derivation]
derivation_from
AltExpr Token ModClause
-> OO [] AltExpr Token ModClause -> OO [] AltExpr Token ModClause
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> [Term] -> ModClause
ViolationCl ([Term] -> ModClause)
-> SymbExpr Token [Term] -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token [Term]
violation_condition
AltExpr Token ModClause
-> AltExpr Token ModClause -> OO [] AltExpr Token ModClause
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> [String] -> ModClause
EnforcingActsCl ([String] -> ModClause)
-> SymbExpr Token [String] -> AltExpr Token ModClause
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token [String]
enforcing_acts_clauses
objects :: BNF Token [Var]
objects :: SymbExpr Token [Var]
objects = String
"related-to" String -> SymbExpr Token [Var] -> SymbExpr Token [Var]
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> AltExpr Token [Var] -> [Var] -> SymbExpr Token [Var]
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef (String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Related to" SymbExpr Token String
-> SymbExpr Token [Var] -> AltExpr Token [Var]
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> SymbExpr Token Var -> SymbExpr Token Char -> SymbExpr Token [Var]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 SymbExpr Token Var
var (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')) []
enforcing_acts_clauses :: BNF Token [DomId]
enforcing_acts_clauses :: SymbExpr Token [String]
enforcing_acts_clauses = String
"enforcing-act-clauses"
String -> AltExpr Token [String] -> SymbExpr Token [String]
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Enforced by" SymbExpr Token String
-> SymbExpr Token [String] -> AltExpr Token [String]
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> SymbExpr Token String
-> SymbExpr Token Char -> SymbExpr Token [String]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')
violation_condition :: BNF Token [Term]
violation_condition :: SymbExpr Token [Term]
violation_condition = String
"violation-conditions"
String -> AltExpr Token [Term] -> SymbExpr Token [Term]
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Violated when" SymbExpr Token String
-> SymbExpr Token [Term] -> AltExpr Token [Term]
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> BNF Token Term -> SymbExpr Token Char -> SymbExpr Token [Term]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 BNF Token Term
value_expr (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')
precondition :: BNF Token [Term]
precondition :: SymbExpr Token [Term]
precondition = String
"preconditions" String -> SymbExpr Token [Term] -> SymbExpr Token [Term]
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=>
AltExpr Token [Term] -> [Term] -> SymbExpr Token [Term]
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef AltExpr Token [Term]
precondition' []
precondition' :: AltExpr Token [Term]
precondition' = String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Conditioned by" SymbExpr Token String
-> SymbExpr Token [Term] -> AltExpr Token [Term]
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> BNF Token Term -> SymbExpr Token Char -> SymbExpr Token [Term]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy BNF Token Term
value_expr (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')
creating_post :: BNF Token [Effect]
creating_post :: SymbExpr Token Initialiser
creating_post = String
"creating-postcondition" String -> SymbExpr Token Initialiser -> SymbExpr Token Initialiser
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=>
AltExpr Token Initialiser
-> Initialiser -> SymbExpr Token Initialiser
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef AltExpr Token Initialiser
creating_post' []
creating_post' :: AltExpr Token Initialiser
creating_post' = String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Creates" SymbExpr Token String
-> AltExpr Token Initialiser -> AltExpr Token Initialiser
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ((([Var], Term) -> Effect) -> [([Var], Term)] -> Initialiser
forall a b. (a -> b) -> [a] -> [b]
map (([Var] -> Term -> Effect) -> ([Var], Term) -> Effect
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry [Var] -> Term -> Effect
CAll) ([([Var], Term)] -> Initialiser)
-> SymbExpr Token [([Var], Term)] -> AltExpr Token Initialiser
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token ([Var], Term)
-> SymbExpr Token Char -> SymbExpr Token [([Var], Term)]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 SymbExpr Token ([Var], Term)
effect (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
','))
terminating_post :: BNF Token [Effect]
terminating_post :: SymbExpr Token Initialiser
terminating_post = String
"terminating-postcondition" String -> SymbExpr Token Initialiser -> SymbExpr Token Initialiser
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=>
AltExpr Token Initialiser
-> Initialiser -> SymbExpr Token Initialiser
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef AltExpr Token Initialiser
terminating_post' []
terminating_post' :: AltExpr Token Initialiser
terminating_post' = String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Terminates" SymbExpr Token String
-> AltExpr Token Initialiser -> AltExpr Token Initialiser
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ((([Var], Term) -> Effect) -> [([Var], Term)] -> Initialiser
forall a b. (a -> b) -> [a] -> [b]
map (([Var] -> Term -> Effect) -> ([Var], Term) -> Effect
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry [Var] -> Term -> Effect
TAll) ([([Var], Term)] -> Initialiser)
-> SymbExpr Token [([Var], Term)] -> AltExpr Token Initialiser
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token ([Var], Term)
-> SymbExpr Token Char -> SymbExpr Token [([Var], Term)]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 SymbExpr Token ([Var], Term)
effect (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
','))
obfuscating_post :: BNF Token [Effect]
obfuscating_post :: SymbExpr Token Initialiser
obfuscating_post = String
"obfuscating-postcondition" String -> SymbExpr Token Initialiser -> SymbExpr Token Initialiser
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=>
AltExpr Token Initialiser
-> Initialiser -> SymbExpr Token Initialiser
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef AltExpr Token Initialiser
obfuscating_post' []
obfuscating_post' :: AltExpr Token Initialiser
obfuscating_post' = String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Obfuscates" SymbExpr Token String
-> AltExpr Token Initialiser -> AltExpr Token Initialiser
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ((([Var], Term) -> Effect) -> [([Var], Term)] -> Initialiser
forall a b. (a -> b) -> [a] -> [b]
map (([Var] -> Term -> Effect) -> ([Var], Term) -> Effect
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry [Var] -> Term -> Effect
OAll) ([([Var], Term)] -> Initialiser)
-> SymbExpr Token [([Var], Term)] -> AltExpr Token Initialiser
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token ([Var], Term)
-> SymbExpr Token Char -> SymbExpr Token [([Var], Term)]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 SymbExpr Token ([Var], Term)
effect (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
','))
postconditions :: BNF Token [Effect]
postconditions :: SymbExpr Token Initialiser
postconditions = String
"postconditions"
String
-> OO [] AltExpr Token Initialiser -> SymbExpr Token Initialiser
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> Initialiser -> Initialiser -> Initialiser
forall a. [a] -> [a] -> [a]
(++) (Initialiser -> Initialiser -> Initialiser)
-> SymbExpr Token Initialiser
-> AltExpr Token (Initialiser -> Initialiser)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Initialiser
creating_post AltExpr Token (Initialiser -> Initialiser)
-> SymbExpr Token Initialiser -> AltExpr Token Initialiser
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token Initialiser
terminating_post
AltExpr Token Initialiser
-> AltExpr Token Initialiser -> OO [] AltExpr Token Initialiser
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Initialiser -> Initialiser -> Initialiser
forall a. [a] -> [a] -> [a]
(++) (Initialiser -> Initialiser -> Initialiser)
-> SymbExpr Token Initialiser
-> AltExpr Token (Initialiser -> Initialiser)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Initialiser
terminating_post AltExpr Token (Initialiser -> Initialiser)
-> SymbExpr Token Initialiser -> AltExpr Token Initialiser
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token Initialiser
creating_post
effect :: BNF Token ([Var], Term)
effect :: SymbExpr Token ([Var], Term)
effect = String
"effect-foreach"
String
-> OO [] AltExpr Token ([Var], Term)
-> SymbExpr Token ([Var], Term)
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> ([],) (Term -> ([Var], Term))
-> BNF Token Term -> AltExpr Token ([Var], Term)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr
AltExpr Token ([Var], Term)
-> SymbExpr Token ([Var], Term)
-> OO [] AltExpr Token ([Var], Term)
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> ([Var] -> Term -> ([Var], Term)) -> SymbExpr Token ([Var], Term)
forall a. ([Var] -> Term -> a) -> BNF Token a
foreach (,)
synchronisations :: BNF Token [Sync]
synchronisations :: SymbExpr Token [Sync]
synchronisations = String
"synchronisations"
String -> AltExpr Token [Sync] -> SymbExpr Token [Sync]
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Syncs with" SymbExpr Token String
-> SymbExpr Token [Sync] -> AltExpr Token [Sync]
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> SymbExpr Token Sync -> SymbExpr Token Char -> SymbExpr Token [Sync]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 (([Var] -> Term -> Sync) -> SymbExpr Token Sync
forall a. ([Var] -> Term -> a) -> BNF Token a
opt_foreach [Var] -> Term -> Sync
Sync) (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')
application :: (DomId -> Arguments -> a) -> BNF Token a
application :: (String -> Arguments -> a) -> BNF Token a
application String -> Arguments -> a
cons = String
"application" String -> AltExpr Token a -> BNF Token a
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> Arguments -> a
cons (String -> Arguments -> a)
-> SymbExpr Token String -> AltExpr Token (Arguments -> a)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token (Arguments -> a)
-> BNF Token Arguments -> AltExpr Token a
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Arguments
arguments
foreach :: ([Var] -> Term -> a) -> BNF Token a
foreach :: ([Var] -> Term -> a) -> BNF Token a
foreach [Var] -> Term -> a
cons = String
"foreach"
String -> BNF Token a -> BNF Token a
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> AltExpr Token a -> BNF Token a
forall t (s :: * -> * -> *) b.
(Show t, Ord t, IsSymbExpr s, SubsumesToken t) =>
s t b -> BNF t b
parens ([Var] -> Term -> a
cons ([Var] -> Term -> a)
-> SymbExpr Token String -> AltExpr Token ([Var] -> Term -> a)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Foreach" AltExpr Token ([Var] -> Term -> a)
-> SymbExpr Token [Var] -> AltExpr Token (Term -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token Var -> SymbExpr Token Char -> SymbExpr Token [Var]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 SymbExpr Token Var
var (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')
AltExpr Token (Term -> a)
-> SymbExpr Token Char -> AltExpr Token (Term -> a)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
':' AltExpr Token (Term -> a) -> BNF Token Term -> AltExpr Token a
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr )
opt_foreach :: ([Var] -> Term -> a) -> BNF Token a
opt_foreach :: ([Var] -> Term -> a) -> BNF Token a
opt_foreach [Var] -> Term -> a
cons = String
"optional-foreach"
String -> OO [] AltExpr Token a -> BNF Token a
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> [Var] -> Term -> a
cons [] (Term -> a) -> BNF Token Term -> AltExpr Token a
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr
AltExpr Token a -> BNF Token a -> OO [] AltExpr Token a
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> ([Var] -> Term -> a) -> BNF Token a
forall a. ([Var] -> Term -> a) -> BNF Token a
foreach [Var] -> Term -> a
cons
derivation_from :: BNF Token [Derivation]
derivation_from :: SymbExpr Token [Derivation]
derivation_from = String
"derivation"
String
-> OO [] AltExpr Token [Derivation] -> SymbExpr Token [Derivation]
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Derived from" SymbExpr Token String
-> SymbExpr Token [Derivation] -> AltExpr Token [Derivation]
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> SymbExpr Token Derivation
-> SymbExpr Token Char -> SymbExpr Token [Derivation]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 SymbExpr Token Derivation
term_deriv (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')
AltExpr Token [Derivation]
-> AltExpr Token [Derivation] -> OO [] AltExpr Token [Derivation]
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> (Term -> Derivation) -> [Term] -> [Derivation]
forall a b. (a -> b) -> [a] -> [b]
map Term -> Derivation
HoldsWhen ([Term] -> [Derivation])
-> SymbExpr Token String -> AltExpr Token ([Term] -> [Derivation])
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ SymbExpr Token String
keyword_present_when AltExpr Token ([Term] -> [Derivation])
-> SymbExpr Token [Term] -> AltExpr Token [Derivation]
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term -> SymbExpr Token Char -> SymbExpr Token [Term]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 BNF Token Term
value_expr (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')
where term_deriv :: SymbExpr Token Derivation
term_deriv = String
"term-derivation" String
-> OO [] AltExpr Token Derivation -> SymbExpr Token Derivation
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> [Var] -> Term -> Derivation
Dv [] (Term -> Derivation) -> BNF Token Term -> AltExpr Token Derivation
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr AltExpr Token Derivation
-> SymbExpr Token Derivation -> OO [] AltExpr Token Derivation
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> ([Var] -> Term -> Derivation) -> SymbExpr Token Derivation
forall a. ([Var] -> Term -> a) -> BNF Token a
foreach [Var] -> Term -> Derivation
Dv
keyword_present_when :: BNF Token String
keyword_present_when :: SymbExpr Token String
keyword_present_when = String
"present-when"
String -> OO [] AltExpr Token String -> SymbExpr Token String
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> String
"Holds when" String -> SymbExpr Token String -> AltExpr Token String
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Present" AltExpr Token String
-> SymbExpr Token String -> AltExpr Token String
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"When"
AltExpr Token String
-> OO [] AltExpr Token String -> OO [] AltExpr Token String
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> String
"Holds when" String -> SymbExpr Token String -> AltExpr Token String
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Holds" AltExpr Token String
-> SymbExpr Token String -> AltExpr Token String
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"When"
AltExpr Token String
-> OO [] AltExpr Token String -> OO [] AltExpr Token String
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> String
"Holds when" String -> SymbExpr Token String -> AltExpr Token String
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Present when"
AltExpr Token String
-> SymbExpr Token String -> OO [] AltExpr Token String
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Holds when"
parse_refiner :: String -> Either String Refiner
parse_refiner :: String -> Either String Refiner
parse_refiner = SymbExpr Token Refiner -> String -> Either String Refiner
forall a. BNF Token a -> String -> Either String a
parse_component SymbExpr Token Refiner
refiner
refiner :: BNF Token Refiner
refiner :: SymbExpr Token Refiner
refiner = String
"refinement" String -> AltExpr Token Refiner -> SymbExpr Token Refiner
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> [(String, Domain)] -> Refiner
forall k a. Ord k => [(k, a)] -> Map k a
M.fromList ([(String, Domain)] -> Refiner)
-> SymbExpr Token [(String, Domain)] -> AltExpr Token Refiner
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token (String, Domain)
-> SymbExpr Token [(String, Domain)]
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t [a]
multiple SymbExpr Token (String, Domain)
refine
refine :: BNF Token (DomId, Domain)
refine :: SymbExpr Token (String, Domain)
refine = String
"refine" String
-> AltExpr Token (String, Domain)
-> SymbExpr Token (String, Domain)
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> (,) (String -> Domain -> (String, Domain))
-> SymbExpr Token String
-> AltExpr Token (String -> Domain -> (String, Domain))
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Fact" AltExpr Token (String -> Domain -> (String, Domain))
-> SymbExpr Token String
-> AltExpr Token (Domain -> (String, Domain))
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
id_lit AltExpr Token (Domain -> (String, Domain))
-> SymbExpr Token String
-> AltExpr Token (Domain -> (String, Domain))
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Identified by" AltExpr Token (Domain -> (String, Domain))
-> BNF Token Domain -> AltExpr Token (String, Domain)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Domain
type_expr
parse_initialiser :: String -> Either String Initialiser
parse_initialiser :: String -> Either String Initialiser
parse_initialiser = SymbExpr Token Initialiser -> String -> Either String Initialiser
forall a. BNF Token a -> String -> Either String a
parse_component SymbExpr Token Initialiser
initialiser
initialiser :: BNF Token Initialiser
initialiser :: SymbExpr Token Initialiser
initialiser = String
"initial state" String -> SymbExpr Token Initialiser -> SymbExpr Token Initialiser
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> AltExpr Token Effect -> SymbExpr Token Initialiser
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t [a]
multiple (SymbExpr Token Effect
initial SymbExpr Token Effect
-> SymbExpr Token Char -> AltExpr Token Effect
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.')
where initial :: SymbExpr Token Effect
initial = String
"initial-statement"
String -> OO [] AltExpr Token Effect -> SymbExpr Token Effect
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> ([Var] -> Term -> Effect) -> SymbExpr Token Effect
forall a. ([Var] -> Term -> a) -> BNF Token a
foreach [Var] -> Term -> Effect
CAll
SymbExpr Token Effect
-> AltExpr Token Effect -> OO [] AltExpr Token Effect
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> [Var] -> Term -> Effect
CAll [] (Term -> Effect) -> BNF Token Term -> AltExpr Token Effect
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Term
value_expr
parse_scenario :: String -> Either String Scenario
parse_scenario :: String -> Either String Scenario
parse_scenario = SymbExpr Token Scenario -> String -> Either String Scenario
forall a. BNF Token a -> String -> Either String a
parse_component SymbExpr Token Scenario
scenario
scenario :: BNF Token Scenario
scenario :: SymbExpr Token Scenario
scenario = String
"scenario" String -> SymbExpr Token Scenario -> SymbExpr Token Scenario
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> SymbExpr Token Statement -> SymbExpr Token Scenario
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t [a]
multiple SymbExpr Token Statement
statement
parse_statement :: String -> Either String Statement
parse_statement :: String -> Either String Statement
parse_statement = SymbExpr Token Statement -> String -> Either String Statement
forall a. BNF Token a -> String -> Either String a
parse_component SymbExpr Token Statement
statement
statement :: BNF Token Statement
statement :: SymbExpr Token Statement
statement = String
"statement"
String -> OO [] AltExpr Token Statement -> SymbExpr Token Statement
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> (([Var], String, Arguments) -> Statement)
-> ([Var], String, Arguments) -> Statement
forall a b. (a -> b) -> a -> b
($) ((([Var], String, Arguments) -> Statement)
-> ([Var], String, Arguments) -> Statement)
-> SymbExpr Token (([Var], String, Arguments) -> Statement)
-> AltExpr Token (([Var], String, Arguments) -> Statement)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token (([Var], String, Arguments) -> Statement)
actioner AltExpr Token (([Var], String, Arguments) -> Statement)
-> SymbExpr Token ([Var], String, Arguments)
-> AltExpr Token Statement
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token ([Var], String, Arguments)
maybe_action AltExpr Token Statement
-> SymbExpr Token Char -> AltExpr Token Statement
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.'
AltExpr Token Statement
-> OO [] AltExpr Token Statement -> OO [] AltExpr Token Statement
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Statement
Query (Term -> Statement)
-> SymbExpr Token Char -> AltExpr Token (Term -> Statement)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'?' AltExpr Token (Term -> Statement)
-> BNF Token Term -> AltExpr Token Statement
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr AltExpr Token Statement
-> SymbExpr Token Char -> AltExpr Token Statement
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.'
AltExpr Token Statement
-> AltExpr Token Statement -> OO [] AltExpr Token Statement
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Statement
Query (Term -> Statement) -> (Term -> Term) -> Term -> Statement
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Term -> Term
Not (Term -> Statement)
-> SymbExpr Token String -> AltExpr Token (Term -> Statement)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"!?" AltExpr Token (Term -> Statement)
-> BNF Token Term -> AltExpr Token Statement
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr AltExpr Token Statement
-> SymbExpr Token Char -> AltExpr Token Statement
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.'
where actioner :: SymbExpr Token (([Var], String, Arguments) -> Statement)
actioner = String
"actioner"
String
-> OO [] AltExpr Token (([Var], String, Arguments) -> Statement)
-> SymbExpr Token (([Var], String, Arguments) -> Statement)
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> (\([Var]
xs, String
d, Arguments
ms) -> [Var] -> TransType -> Either Term (String, Arguments) -> Statement
Trans [Var]
xs TransType
Trigger ((String, Arguments) -> Either Term (String, Arguments)
forall a b. b -> Either a b
Right (String
d,Arguments
ms))) (([Var], String, Arguments) -> Statement)
-> SymbExpr Token (Maybe Char)
-> AltExpr Token (([Var], String, Arguments) -> Statement)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ SymbExpr Token Char -> SymbExpr Token (Maybe Char)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'!')
AltExpr Token (([Var], String, Arguments) -> Statement)
-> OO [] AltExpr Token (([Var], String, Arguments) -> Statement)
-> OO [] AltExpr Token (([Var], String, Arguments) -> Statement)
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> (\([Var]
xs, String
d, Arguments
ms) -> [Var] -> TransType -> Either Term (String, Arguments) -> Statement
Trans [Var]
xs TransType
AddEvent ((String, Arguments) -> Either Term (String, Arguments)
forall a b. b -> Either a b
Right (String
d,Arguments
ms))) (([Var], String, Arguments) -> Statement)
-> SymbExpr Token Char
-> AltExpr Token (([Var], String, Arguments) -> Statement)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'+'
AltExpr Token (([Var], String, Arguments) -> Statement)
-> AltExpr Token (([Var], String, Arguments) -> Statement)
-> OO [] AltExpr Token (([Var], String, Arguments) -> Statement)
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> (\([Var]
xs, String
d, Arguments
ms) -> [Var] -> TransType -> Either Term (String, Arguments) -> Statement
Trans [Var]
xs TransType
RemEvent ((String, Arguments) -> Either Term (String, Arguments)
forall a b. b -> Either a b
Right (String
d,Arguments
ms))) (([Var], String, Arguments) -> Statement)
-> SymbExpr Token Char
-> AltExpr Token (([Var], String, Arguments) -> Statement)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'-'
maybe_action :: SymbExpr Token ([Var], String, Arguments)
maybe_action = String
"action-statement"
String
-> OO [] AltExpr Token ([Var], String, Arguments)
-> SymbExpr Token ([Var], String, Arguments)
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> (String -> Arguments -> ([Var], String, Arguments))
-> SymbExpr Token ([Var], String, Arguments)
forall a. (String -> Arguments -> a) -> BNF Token a
application ([],,)
SymbExpr Token ([Var], String, Arguments)
-> SymbExpr Token ([Var], String, Arguments)
-> OO [] AltExpr Token ([Var], String, Arguments)
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> AltExpr Token ([Var], String, Arguments)
-> SymbExpr Token ([Var], String, Arguments)
forall t (s :: * -> * -> *) b.
(Show t, Ord t, IsSymbExpr s, SubsumesToken t) =>
s t b -> BNF t b
parens ((\[Var]
xs (String
d,Arguments
args) -> ([Var]
xs,String
d,Arguments
args)) ([Var] -> (String, Arguments) -> ([Var], String, Arguments))
-> SymbExpr Token String
-> AltExpr
Token ([Var] -> (String, Arguments) -> ([Var], String, Arguments))
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Foreach" AltExpr
Token ([Var] -> (String, Arguments) -> ([Var], String, Arguments))
-> SymbExpr Token [Var]
-> AltExpr
Token ((String, Arguments) -> ([Var], String, Arguments))
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> (SymbExpr Token Var -> SymbExpr Token Char -> SymbExpr Token [Var]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 SymbExpr Token Var
var (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')) AltExpr Token ((String, Arguments) -> ([Var], String, Arguments))
-> SymbExpr Token Char
-> AltExpr
Token ((String, Arguments) -> ([Var], String, Arguments))
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
':' AltExpr Token ((String, Arguments) -> ([Var], String, Arguments))
-> SymbExpr Token (String, Arguments)
-> AltExpr Token ([Var], String, Arguments)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> (String -> Arguments -> (String, Arguments))
-> SymbExpr Token (String, Arguments)
forall a. (String -> Arguments -> a) -> BNF Token a
application (,))
statement_phrase :: BNF Token Phrase
statement_phrase :: BNF Token Phrase
statement_phrase = String
"statement-phrase"
String -> OO [] AltExpr Token Phrase -> BNF Token Phrase
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> (([Var], String, Arguments) -> Phrase)
-> ([Var], String, Arguments) -> Phrase
forall a b. (a -> b) -> a -> b
($) ((([Var], String, Arguments) -> Phrase)
-> ([Var], String, Arguments) -> Phrase)
-> SymbExpr Token (([Var], String, Arguments) -> Phrase)
-> AltExpr Token (([Var], String, Arguments) -> Phrase)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token (([Var], String, Arguments) -> Phrase)
actioner AltExpr Token (([Var], String, Arguments) -> Phrase)
-> SymbExpr Token ([Var], String, Arguments)
-> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token ([Var], String, Arguments)
maybe_action AltExpr Token Phrase -> SymbExpr Token Char -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.'
AltExpr Token Phrase
-> OO [] AltExpr Token Phrase -> OO [] AltExpr Token Phrase
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Phrase
PQuery (Term -> Phrase)
-> SymbExpr Token Char -> AltExpr Token (Term -> Phrase)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'?' AltExpr Token (Term -> Phrase)
-> BNF Token Term -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr AltExpr Token Phrase -> SymbExpr Token Char -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.'
AltExpr Token Phrase
-> AltExpr Token Phrase -> OO [] AltExpr Token Phrase
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Phrase
PQuery (Term -> Phrase) -> (Term -> Term) -> Term -> Phrase
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Term -> Term
Not (Term -> Phrase)
-> SymbExpr Token String -> AltExpr Token (Term -> Phrase)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"!?" AltExpr Token (Term -> Phrase)
-> BNF Token Term -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr AltExpr Token Phrase -> SymbExpr Token Char -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.'
where actioner :: SymbExpr Token (([Var], String, Arguments) -> Phrase)
actioner = String
"actioner"
String
-> OO [] AltExpr Token (([Var], String, Arguments) -> Phrase)
-> SymbExpr Token (([Var], String, Arguments) -> Phrase)
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> (\([Var]
xs, String
d, Arguments
ms) -> [Var] -> Term -> Phrase
PTrigger [Var]
xs (String -> Arguments -> Term
App String
d Arguments
ms)) (([Var], String, Arguments) -> Phrase)
-> SymbExpr Token (Maybe Char)
-> AltExpr Token (([Var], String, Arguments) -> Phrase)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ SymbExpr Token Char -> SymbExpr Token (Maybe Char)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'!')
AltExpr Token (([Var], String, Arguments) -> Phrase)
-> OO [] AltExpr Token (([Var], String, Arguments) -> Phrase)
-> OO [] AltExpr Token (([Var], String, Arguments) -> Phrase)
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> (\([Var]
xs, String
d, Arguments
ms) -> [Var] -> Term -> Phrase
Create [Var]
xs (String -> Arguments -> Term
App String
d Arguments
ms)) (([Var], String, Arguments) -> Phrase)
-> SymbExpr Token Char
-> AltExpr Token (([Var], String, Arguments) -> Phrase)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'+'
AltExpr Token (([Var], String, Arguments) -> Phrase)
-> AltExpr Token (([Var], String, Arguments) -> Phrase)
-> OO [] AltExpr Token (([Var], String, Arguments) -> Phrase)
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> (\([Var]
xs, String
d, Arguments
ms) -> [Var] -> Term -> Phrase
Terminate [Var]
xs (String -> Arguments -> Term
App String
d Arguments
ms)) (([Var], String, Arguments) -> Phrase)
-> SymbExpr Token Char
-> AltExpr Token (([Var], String, Arguments) -> Phrase)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'-'
maybe_action :: SymbExpr Token ([Var], String, Arguments)
maybe_action = String
"action-statement"
String
-> OO [] AltExpr Token ([Var], String, Arguments)
-> SymbExpr Token ([Var], String, Arguments)
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> (String -> Arguments -> ([Var], String, Arguments))
-> SymbExpr Token ([Var], String, Arguments)
forall a. (String -> Arguments -> a) -> BNF Token a
application ([],,)
SymbExpr Token ([Var], String, Arguments)
-> SymbExpr Token ([Var], String, Arguments)
-> OO [] AltExpr Token ([Var], String, Arguments)
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> AltExpr Token ([Var], String, Arguments)
-> SymbExpr Token ([Var], String, Arguments)
forall t (s :: * -> * -> *) b.
(Show t, Ord t, IsSymbExpr s, SubsumesToken t) =>
s t b -> BNF t b
parens ((\[Var]
xs (String
d,Arguments
args) -> ([Var]
xs,String
d,Arguments
args)) ([Var] -> (String, Arguments) -> ([Var], String, Arguments))
-> SymbExpr Token String
-> AltExpr
Token ([Var] -> (String, Arguments) -> ([Var], String, Arguments))
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"Foreach" AltExpr
Token ([Var] -> (String, Arguments) -> ([Var], String, Arguments))
-> SymbExpr Token [Var]
-> AltExpr
Token ((String, Arguments) -> ([Var], String, Arguments))
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> (SymbExpr Token Var -> SymbExpr Token Char -> SymbExpr Token [Var]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
multipleSepBy1 SymbExpr Token Var
var (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
',')) AltExpr Token ((String, Arguments) -> ([Var], String, Arguments))
-> SymbExpr Token Char
-> AltExpr
Token ((String, Arguments) -> ([Var], String, Arguments))
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
':' AltExpr Token ((String, Arguments) -> ([Var], String, Arguments))
-> SymbExpr Token (String, Arguments)
-> AltExpr Token ([Var], String, Arguments)
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> (String -> Arguments -> (String, Arguments))
-> SymbExpr Token (String, Arguments)
forall a. (String -> Arguments -> a) -> BNF Token a
application (,))
phrase_scenario :: BNF Token [Phrase]
phrase_scenario :: BNF Token [Phrase]
phrase_scenario = String
"phrase-scenario" String -> BNF Token [Phrase] -> BNF Token [Phrase]
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> AltExpr Token Phrase -> BNF Token [Phrase]
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t [a]
multiple (BNF Token Phrase
syn_phrase BNF Token Phrase -> SymbExpr Token Char -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.')
syn_directives_phrases :: BNF Token [Either Directive Phrase]
syn_directives_phrases :: BNF Token [Either Directive Phrase]
syn_directives_phrases = String
"opt.directives.phrases" String
-> BNF Token [Either Directive Phrase]
-> BNF Token [Either Directive Phrase]
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> AltExpr Token [Either Directive Phrase]
-> [Either Directive Phrase] -> BNF Token [Either Directive Phrase]
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef
(OO [] AltExpr Token (Either Directive Phrase)
-> SymbExpr Token Char -> BNF Token [Either Directive Phrase]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
someSepBy1 (Directive -> Either Directive Phrase
forall a b. a -> Either a b
Left (Directive -> Either Directive Phrase)
-> SymbExpr Token Directive
-> AltExpr Token (Either Directive Phrase)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token Directive
syn_directive AltExpr Token (Either Directive Phrase)
-> AltExpr Token (Either Directive Phrase)
-> OO [] AltExpr Token (Either Directive Phrase)
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Phrase -> Either Directive Phrase
forall a b. b -> Either a b
Right (Phrase -> Either Directive Phrase)
-> BNF Token Phrase -> AltExpr Token (Either Directive Phrase)
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> BNF Token Phrase
syn_phrase) (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.')
BNF Token [Either Directive Phrase]
-> SymbExpr Token (Maybe Char)
-> AltExpr Token [Either Directive Phrase]
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** SymbExpr Token Char -> SymbExpr Token (Maybe Char)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.')) []
syn_directive :: BNF Token Directive
syn_directive :: SymbExpr Token Directive
syn_directive = String
"directive" String -> OO [] AltExpr Token Directive -> SymbExpr Token Directive
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=>
String -> Directive
Include (String -> Directive)
-> SymbExpr Token String -> AltExpr Token (String -> Directive)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"#include" AltExpr Token (String -> Directive)
-> SymbExpr Token String -> AltExpr Token Directive
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
string_lit
AltExpr Token Directive
-> AltExpr Token Directive -> OO [] AltExpr Token Directive
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> String -> Directive
Require (String -> Directive)
-> SymbExpr Token String -> AltExpr Token (String -> Directive)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"#require" AltExpr Token (String -> Directive)
-> SymbExpr Token String -> AltExpr Token Directive
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> SymbExpr Token String
forall t. SubsumesToken t => SymbExpr t String
string_lit
syn_phrases :: BNF Token [Phrase]
syn_phrases :: BNF Token [Phrase]
syn_phrases = String
"opt.phrase" String -> BNF Token [Phrase] -> BNF Token [Phrase]
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> AltExpr Token [Phrase] -> [Phrase] -> BNF Token [Phrase]
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> a -> SymbExpr t a
optionalWithDef
(BNF Token Phrase -> SymbExpr Token Char -> BNF Token [Phrase]
forall t (s :: * -> * -> *) (s2 :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s, IsSymbExpr s2, IsAltExpr s2) =>
s t a -> s2 t b -> SymbExpr t [a]
someSepBy1 BNF Token Phrase
syn_phrase (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.') BNF Token [Phrase]
-> SymbExpr Token (Maybe Char) -> AltExpr Token [Phrase]
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t a
<** SymbExpr Token Char -> SymbExpr Token (Maybe Char)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'.')) []
syn_phrase :: BNF Token Phrase
syn_phrase :: BNF Token Phrase
syn_phrase = String
"phrase"
String -> OO [] AltExpr Token Phrase -> BNF Token Phrase
forall t (b :: * -> * -> *) a.
(Show t, Ord t, HasAlts b) =>
String -> b t a -> SymbExpr t a
<:=> SymbExpr Token Char -> SymbExpr Token (Maybe Char)
forall t (s :: * -> * -> *) a.
(Show t, Ord t, IsSymbExpr s) =>
s t a -> SymbExpr t (Maybe a)
optional (Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'!') SymbExpr Token (Maybe Char)
-> BNF Token Phrase -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ([Var] -> Term -> Phrase) -> BNF Token Phrase
forall a. ([Var] -> Term -> a) -> BNF Token a
opt_foreach [Var] -> Term -> Phrase
PTrigger
AltExpr Token Phrase
-> OO [] AltExpr Token Phrase -> OO [] AltExpr Token Phrase
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'+' SymbExpr Token Char -> BNF Token Phrase -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ([Var] -> Term -> Phrase) -> BNF Token Phrase
forall a. ([Var] -> Term -> a) -> BNF Token a
opt_foreach [Var] -> Term -> Phrase
Create
AltExpr Token Phrase
-> OO [] AltExpr Token Phrase -> OO [] AltExpr Token Phrase
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'-' SymbExpr Token Char -> BNF Token Phrase -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ([Var] -> Term -> Phrase) -> BNF Token Phrase
forall a. ([Var] -> Term -> a) -> BNF Token a
opt_foreach [Var] -> Term -> Phrase
Terminate
AltExpr Token Phrase
-> OO [] AltExpr Token Phrase -> OO [] AltExpr Token Phrase
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'~' SymbExpr Token Char -> BNF Token Phrase -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t a -> s t b -> AltExpr t b
**> ([Var] -> Term -> Phrase) -> BNF Token Phrase
forall a. ([Var] -> Term -> a) -> BNF Token a
opt_foreach [Var] -> Term -> Phrase
Obfuscate
AltExpr Token Phrase
-> OO [] AltExpr Token Phrase -> OO [] AltExpr Token Phrase
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Phrase
PQuery (Term -> Phrase)
-> SymbExpr Token Char -> AltExpr Token (Term -> Phrase)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ Char -> SymbExpr Token Char
forall t. SubsumesToken t => Char -> SymbExpr t Char
keychar Char
'?' AltExpr Token (Term -> Phrase)
-> BNF Token Term -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr
AltExpr Token Phrase
-> OO [] AltExpr Token Phrase -> OO [] AltExpr Token Phrase
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> Term -> Phrase
PQuery (Term -> Phrase) -> (Term -> Term) -> Term -> Phrase
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Term -> Term
Not (Term -> Phrase)
-> SymbExpr Token String -> AltExpr Token (Term -> Phrase)
forall t (s :: * -> * -> *) b a.
(Show t, Ord t, IsSymbExpr s) =>
b -> s t a -> AltExpr t b
<$$ String -> SymbExpr Token String
forall t. SubsumesToken t => String -> SymbExpr t String
keyword String
"!?" AltExpr Token (Term -> Phrase)
-> BNF Token Term -> AltExpr Token Phrase
forall t (i :: * -> * -> *) (s :: * -> * -> *) a b.
(Show t, Ord t, IsAltExpr i, IsSymbExpr s) =>
i t (a -> b) -> s t a -> AltExpr t b
<**> BNF Token Term
value_expr
AltExpr Token Phrase
-> AltExpr Token Phrase -> OO [] AltExpr Token Phrase
forall t (i :: * -> * -> *) (b :: * -> * -> *) a.
(Show t, Ord t, IsAltExpr i, HasAlts b) =>
i t a -> b t a -> AltExprs t a
<||> [Decl] -> Phrase
PDeclBlock ([Decl] -> Phrase) -> SymbExpr Token [Decl] -> AltExpr Token Phrase
forall t (s :: * -> * -> *) a b.
(Show t, Ord t, IsSymbExpr s) =>
(a -> b) -> s t a -> AltExpr t b
<$$> SymbExpr Token [Decl]
declarations