{-# Language FlexibleContexts, FlexibleInstances, OverloadedStrings, Rank2Types, RecordWildCards, ScopedTypeVariables,
TypeFamilies, TypeSynonymInstances, TemplateHaskell #-}
module Language.Modula2.ISO.Grammar where
import Control.Applicative
import Control.Monad (guard, void)
import Data.Char (isAlphaNum, isDigit, isHexDigit, isLetter, isOctDigit, isSpace)
import Data.List.NonEmpty (NonEmpty, toList)
import Data.Maybe (catMaybes)
import Data.Monoid ((<>))
import Data.Text (Text, unpack)
import Numeric (readOct, readDec, readHex, readFloat)
import Text.Grampa
import Text.Grampa.ContextFree.SortedMemoizing.Transformer.LeftRecursive (autochain, lift, tmap)
import Text.Parser.Combinators (sepBy, sepBy1, sepByNonEmpty, try)
import Text.Parser.Token (braces, brackets, parens)
import qualified Rank2
import qualified Rank2.TH
import Transformation.Deep as Deep (Product(Pair))
import Language.Oberon.Grammar (TokenType(..))
import qualified Language.Modula2.Abstract as Abstract
import qualified Language.Modula2.ISO.Abstract as ISO.Abstract
import qualified Language.Modula2.ISO.AST as AST
import qualified Language.Modula2.Grammar as ReportGrammar
import Language.Modula2.Grammar (delimiter, wrap)
type Parser = ReportGrammar.Parser
data ISOMixin l f p = ISOMixin{
forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (f (ConstExpression l l f f))
machineAddress :: p (f (Abstract.ConstExpression l l f f)),
forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (Type l l f f)
packedSetType :: p (Abstract.Type l l f f),
forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (Block l l f f)
moduleBody :: p (Abstract.Block l l f f),
forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (NonEmpty (f (AddressedIdent l l f f)))
variableIdentifierList :: p (NonEmpty (f (ISO.Abstract.AddressedIdent l l f f))),
forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (Statement l l f f)
retryStatement :: p (Abstract.Statement l l f f),
forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (ConstExpression l l f f)
arrayConstructor :: p (Abstract.Expression l l f f),
forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (ConstExpression l l f f)
recordConstructor :: p (Abstract.Expression l l f f),
forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p [f (Item l l f f)]
arrayConstructedValue :: p [f (ISO.Abstract.Item l l f f)],
forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p [f (ConstExpression l l f f)]
recordConstructedValue :: p [f (Abstract.Expression l l f f)],
forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p [f (Element l l f f)]
setConstructedValue :: p [f (Abstract.Element l l f f)],
forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (Item l l f f)
arrayPart :: p (ISO.Abstract.Item l l f f),
forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (f (ConstExpression l l f f))
structureComponent :: p (f (Abstract.Expression l l f f))}
$(Rank2.TH.deriveAll ''ISOMixin)
isoMixin :: (ISO.Abstract.Modula2 l, Rank2.Apply g, LexicalParsing (Parser g Text))
=> ReportGrammar.Modula2Grammar l ReportGrammar.NodeWrap (Parser g Text)
-> ISOMixin l ReportGrammar.NodeWrap (Parser g Text)
-> ISOMixin l ReportGrammar.NodeWrap (Parser g Text)
isoMixin :: forall l (g :: (* -> *) -> *).
(Modula2 l, Apply g, LexicalParsing (Parser g Text)) =>
Modula2Grammar l NodeWrap (Parser g Text)
-> ISOMixin l NodeWrap (Parser g Text)
-> ISOMixin l NodeWrap (Parser g Text)
isoMixin ReportGrammar.Modula2Grammar{Parser g Text [NodeWrap (Declaration l l NodeWrap NodeWrap)]
Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
Parser g Text [NodeWrap (FieldList l l NodeWrap NodeWrap)]
Parser g Text [NodeWrap (Definition l l NodeWrap NodeWrap)]
Parser
g Text (NonEmpty (NodeWrap (Expression l l NodeWrap NodeWrap)))
Parser
g Text (NonEmpty (NodeWrap (CaseLabels l l NodeWrap NodeWrap)))
Parser g Text (IdentList l)
Parser g Text (NodeWrap (Module l l NodeWrap NodeWrap))
Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
Parser g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
Parser g Text (Text, ProcedureHeading l l NodeWrap NodeWrap)
Parser g Text Text
Parser g Text (Module l l NodeWrap NodeWrap)
Parser g Text (Declaration l l NodeWrap NodeWrap)
Parser g Text (Type l l NodeWrap NodeWrap)
Parser g Text (Statement l l NodeWrap NodeWrap)
Parser g Text (Expression l l NodeWrap NodeWrap)
Parser g Text (Designator l l NodeWrap NodeWrap)
Parser g Text (Value l l NodeWrap NodeWrap)
Parser g Text (FieldList l l NodeWrap NodeWrap)
Parser g Text (FormalParameters l l NodeWrap NodeWrap)
Parser g Text (FPSection l l NodeWrap NodeWrap)
Parser g Text (Block l l NodeWrap NodeWrap)
Parser g Text (Case l l NodeWrap NodeWrap)
Parser g Text (CaseLabels l l NodeWrap NodeWrap)
Parser g Text (Element l l NodeWrap NodeWrap)
Parser g Text (Import l)
Parser g Text (QualIdent l)
Parser g Text RelOp
Parser g Text (Export l)
Parser g Text (Definition l l NodeWrap NodeWrap)
Parser g Text (Variant l l NodeWrap NodeWrap)
Parser
g
Text
(NodeWrap (Expression l l NodeWrap NodeWrap)
-> NodeWrap (Expression l l NodeWrap NodeWrap)
-> Expression l l NodeWrap NodeWrap)
ident :: Parser g Text Text
number :: Parser g Text (Value l l NodeWrap NodeWrap)
integer :: Parser g Text (Value l l NodeWrap NodeWrap)
real :: Parser g Text (Value l l NodeWrap NodeWrap)
scaleFactor :: Parser g Text Text
hexDigit :: Parser g Text Text
digit :: Parser g Text Text
octalDigit :: Parser g Text Text
string_prod :: Parser g Text Text
qualident :: Parser g Text (QualIdent l)
constantDeclaration :: Parser g Text (Declaration l l NodeWrap NodeWrap)
constantDefinition :: Parser g Text (Definition l l NodeWrap NodeWrap)
constExpression :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
relation :: Parser g Text RelOp
addOperator :: Parser
g
Text
(NodeWrap (Expression l l NodeWrap NodeWrap)
-> NodeWrap (Expression l l NodeWrap NodeWrap)
-> Expression l l NodeWrap NodeWrap)
mulOperator :: Parser
g
Text
(NodeWrap (Expression l l NodeWrap NodeWrap)
-> NodeWrap (Expression l l NodeWrap NodeWrap)
-> Expression l l NodeWrap NodeWrap)
set :: Parser g Text (Expression l l NodeWrap NodeWrap)
element :: Parser g Text (Element l l NodeWrap NodeWrap)
typeDeclaration :: Parser g Text (Declaration l l NodeWrap NodeWrap)
typeDefinition :: Parser g Text (Definition l l NodeWrap NodeWrap)
type_prod :: Parser g Text (Type l l NodeWrap NodeWrap)
simpleType :: Parser g Text (Type l l NodeWrap NodeWrap)
enumeration :: Parser g Text (Type l l NodeWrap NodeWrap)
identList :: Parser g Text (IdentList l)
subrangeType :: Parser g Text (Type l l NodeWrap NodeWrap)
arrayType :: Parser g Text (Type l l NodeWrap NodeWrap)
recordType :: Parser g Text (Type l l NodeWrap NodeWrap)
fieldListSequence :: Parser g Text [NodeWrap (FieldList l l NodeWrap NodeWrap)]
fieldList :: Parser g Text (FieldList l l NodeWrap NodeWrap)
variant :: Parser g Text (Variant l l NodeWrap NodeWrap)
caseLabelList :: Parser
g Text (NonEmpty (NodeWrap (CaseLabels l l NodeWrap NodeWrap)))
caseLabels :: Parser g Text (CaseLabels l l NodeWrap NodeWrap)
setType :: Parser g Text (Type l l NodeWrap NodeWrap)
pointerType :: Parser g Text (Type l l NodeWrap NodeWrap)
procedureType :: Parser g Text (Type l l NodeWrap NodeWrap)
formalTypeList :: Parser g Text (FormalParameters l l NodeWrap NodeWrap)
variableDeclaration :: Parser g Text (Declaration l l NodeWrap NodeWrap)
variableDefinition :: Parser g Text (Definition l l NodeWrap NodeWrap)
designator :: Parser g Text (Designator l l NodeWrap NodeWrap)
expList :: Parser
g Text (NonEmpty (NodeWrap (Expression l l NodeWrap NodeWrap)))
expression :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
simpleExpression :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
term :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
factor :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
actualParameters :: Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
statement :: Parser g Text (Statement l l NodeWrap NodeWrap)
assignment :: Parser g Text (Statement l l NodeWrap NodeWrap)
procedureCall :: Parser g Text (Statement l l NodeWrap NodeWrap)
statementSequence :: Parser g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
ifStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
caseStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
case_prod :: Parser g Text (Case l l NodeWrap NodeWrap)
whileStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
repeatStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
forStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
loopStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
withStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
procedureDeclaration :: Parser g Text (Declaration l l NodeWrap NodeWrap)
procedureHeading :: Parser g Text (Text, ProcedureHeading l l NodeWrap NodeWrap)
block :: Parser g Text (Block l l NodeWrap NodeWrap)
declarationSequence :: Parser g Text [NodeWrap (Declaration l l NodeWrap NodeWrap)]
formalParameters :: Parser g Text (FormalParameters l l NodeWrap NodeWrap)
fPSection :: Parser g Text (FPSection l l NodeWrap NodeWrap)
formalType :: Parser g Text (Type l l NodeWrap NodeWrap)
moduleDeclaration :: Parser g Text (Declaration l l NodeWrap NodeWrap)
priority :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
export :: Parser g Text (Export l)
import_prod :: Parser g Text (Import l)
definitionModule :: Parser g Text (Module l l NodeWrap NodeWrap)
definitionSequence :: Parser g Text [NodeWrap (Definition l l NodeWrap NodeWrap)]
programModule :: Parser g Text (Module l l NodeWrap NodeWrap)
compilationUnit :: Parser g Text (NodeWrap (Module l l NodeWrap NodeWrap))
ident :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
number :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Value l l f f)
integer :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Value l l f f)
real :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Value l l f f)
scaleFactor :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
hexDigit :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
digit :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
octalDigit :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
string_prod :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
qualident :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (QualIdent l)
constantDeclaration :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Declaration l l f f)
constantDefinition :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Definition l l f f)
constExpression :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (ConstExpression l l f f))
relation :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p RelOp
addOperator :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p
-> p (f (Expression l l f f)
-> f (Expression l l f f) -> Expression l l f f)
mulOperator :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p
-> p (f (Expression l l f f)
-> f (Expression l l f f) -> Expression l l f f)
set :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Expression l l f f)
element :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Element l l f f)
typeDeclaration :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Declaration l l f f)
typeDefinition :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Definition l l f f)
type_prod :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
simpleType :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
enumeration :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
identList :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (IdentList l)
subrangeType :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
arrayType :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
recordType :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
fieldListSequence :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p [f (FieldList l l f f)]
fieldList :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (FieldList l l f f)
variant :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Variant l l f f)
caseLabelList :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NonEmpty (f (CaseLabels l l f f)))
caseLabels :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (CaseLabels l l f f)
setType :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
pointerType :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
procedureType :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
formalTypeList :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (FormalParameters l l f f)
variableDeclaration :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Declaration l l f f)
variableDefinition :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Definition l l f f)
designator :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Designator l l f f)
expList :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NonEmpty (f (Expression l l f f)))
expression :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (ConstExpression l l f f))
simpleExpression :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (ConstExpression l l f f))
term :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (ConstExpression l l f f))
factor :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (ConstExpression l l f f))
actualParameters :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p [f (Expression l l f f)]
statement :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
assignment :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
procedureCall :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
statementSequence :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (StatementSequence l l f f))
ifStatement :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
caseStatement :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
case_prod :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Case l l f f)
whileStatement :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
repeatStatement :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
forStatement :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
loopStatement :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
withStatement :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
procedureDeclaration :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Declaration l l f f)
procedureHeading :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Text, ProcedureHeading l l f f)
block :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Block l l f f)
declarationSequence :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p [f (Declaration l l f f)]
formalParameters :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (FormalParameters l l f f)
fPSection :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (FPSection l l f f)
formalType :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
moduleDeclaration :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Declaration l l f f)
priority :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (ConstExpression l l f f))
export :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Export l)
import_prod :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Import l)
definitionModule :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Module l l f f)
definitionSequence :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p [f (Definition l l f f)]
programModule :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Module l l f f)
compilationUnit :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (Module l l f f))
..} ISOMixin{Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
Parser g Text [NodeWrap (Element l l NodeWrap NodeWrap)]
Parser g Text [NodeWrap (Item l l NodeWrap NodeWrap)]
Parser
g Text (NonEmpty (NodeWrap (AddressedIdent l l NodeWrap NodeWrap)))
Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
Parser g Text (Type l l NodeWrap NodeWrap)
Parser g Text (Statement l l NodeWrap NodeWrap)
Parser g Text (Expression l l NodeWrap NodeWrap)
Parser g Text (Block l l NodeWrap NodeWrap)
Parser g Text (Item l l NodeWrap NodeWrap)
machineAddress :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (f (ConstExpression l l f f))
packedSetType :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (Type l l f f)
moduleBody :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (Block l l f f)
variableIdentifierList :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (NonEmpty (f (AddressedIdent l l f f)))
retryStatement :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (Statement l l f f)
arrayConstructor :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (ConstExpression l l f f)
recordConstructor :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (ConstExpression l l f f)
arrayConstructedValue :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p [f (Item l l f f)]
recordConstructedValue :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p [f (ConstExpression l l f f)]
setConstructedValue :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p [f (Element l l f f)]
arrayPart :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (Item l l f f)
structureComponent :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (f (ConstExpression l l f f))
machineAddress :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
packedSetType :: Parser g Text (Type l l NodeWrap NodeWrap)
moduleBody :: Parser g Text (Block l l NodeWrap NodeWrap)
variableIdentifierList :: Parser
g Text (NonEmpty (NodeWrap (AddressedIdent l l NodeWrap NodeWrap)))
retryStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
arrayConstructor :: Parser g Text (Expression l l NodeWrap NodeWrap)
recordConstructor :: Parser g Text (Expression l l NodeWrap NodeWrap)
arrayConstructedValue :: Parser g Text [NodeWrap (Item l l NodeWrap NodeWrap)]
recordConstructedValue :: Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
setConstructedValue :: Parser g Text [NodeWrap (Element l l NodeWrap NodeWrap)]
arrayPart :: Parser g Text (Item l l NodeWrap NodeWrap)
structureComponent :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
..} = ISOMixin{
machineAddress :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
machineAddress = Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
-> Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
forall (m :: * -> *) a. TokenParsing m => m a -> m a
brackets Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
constExpression,
variableIdentifierList :: Parser
g Text (NonEmpty (NodeWrap (AddressedIdent l l NodeWrap NodeWrap)))
variableIdentifierList =
Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(NodeWrap (AddressedIdent l l NodeWrap NodeWrap))
-> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
-> Parser
g Text (NonEmpty (NodeWrap (AddressedIdent l l NodeWrap NodeWrap)))
forall (m :: * -> *) a sep.
Alternative m =>
m a -> m sep -> m (NonEmpty a)
sepByNonEmpty (Parser g Text (AddressedIdent l l NodeWrap NodeWrap)
-> Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(NodeWrap (AddressedIdent l l NodeWrap NodeWrap))
forall (g :: (* -> *) -> *) a.
Apply g =>
Parser g Text a -> Parser g Text (NodeWrap a)
wrap (Text -> AddressedIdent l l NodeWrap NodeWrap
forall l l' (f' :: * -> *) (f :: * -> *).
Modula2 l =>
Text -> AddressedIdent l l' f' f
forall l' (f' :: * -> *) (f :: * -> *).
Text -> AddressedIdent l l' f' f
ISO.Abstract.unaddressedIdent (Text -> AddressedIdent l l NodeWrap NodeWrap)
-> Parser g Text Text
-> Parser g Text (AddressedIdent l l NodeWrap NodeWrap)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text Text
ident
Parser g Text (AddressedIdent l l NodeWrap NodeWrap)
-> Parser g Text (AddressedIdent l l NodeWrap NodeWrap)
-> Parser g Text (AddressedIdent l l NodeWrap NodeWrap)
forall a.
Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Text
-> NodeWrap (Expression l l NodeWrap NodeWrap)
-> AddressedIdent l l NodeWrap NodeWrap
forall l (f :: * -> *) l' (f' :: * -> *).
Modula2 l =>
Text -> f (ConstExpression l' l' f' f') -> AddressedIdent l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
Text -> f (ConstExpression l' l' f' f') -> AddressedIdent l l' f' f
ISO.Abstract.addressedIdent (Text
-> NodeWrap (Expression l l NodeWrap NodeWrap)
-> AddressedIdent l l NodeWrap NodeWrap)
-> Parser g Text Text
-> Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(NodeWrap (Expression l l NodeWrap NodeWrap)
-> AddressedIdent l l NodeWrap NodeWrap)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text Text
ident Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(NodeWrap (Expression l l NodeWrap NodeWrap)
-> AddressedIdent l l NodeWrap NodeWrap)
-> Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
-> Parser g Text (AddressedIdent l l NodeWrap NodeWrap)
forall a b.
Fixed (ParserT ((,) [[Lexeme]])) g Text (a -> b)
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
-> Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
forall (m :: * -> *) a. TokenParsing m => m a -> m a
brackets Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
constExpression))
(Text -> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
forall (g :: (* -> *) -> *).
LexicalParsing (Parser g Text) =>
Text -> Parser g Text ()
delimiter Text
","),
packedSetType :: Parser g Text (Type l l NodeWrap NodeWrap)
packedSetType = ((Down Int, ParsedLexemes, Down Int), Type l l NodeWrap NodeWrap)
-> Type l l NodeWrap NodeWrap
forall l (f :: * -> *) l' (f' :: * -> *).
Modula2 l =>
f (Type l' l' f' f') -> Type l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Type l' l' f' f') -> Type l l' f' f
ISO.Abstract.packedSetType (((Down Int, ParsedLexemes, Down Int), Type l l NodeWrap NodeWrap)
-> Type l l NodeWrap NodeWrap)
-> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
-> Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(((Down Int, ParsedLexemes, Down Int), Type l l NodeWrap NodeWrap)
-> Type l l NodeWrap NodeWrap)
forall a b.
a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text b
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ ParserInput (Parser g Text)
-> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
ParserInput (Parser g Text)
"PACKED" Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(((Down Int, ParsedLexemes, Down Int), Type l l NodeWrap NodeWrap)
-> Type l l NodeWrap NodeWrap)
-> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
-> Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(((Down Int, ParsedLexemes, Down Int), Type l l NodeWrap NodeWrap)
-> Type l l NodeWrap NodeWrap)
forall a b.
Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text b
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ParserInput (Parser g Text)
-> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
ParserInput (Parser g Text)
"SET" Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(((Down Int, ParsedLexemes, Down Int), Type l l NodeWrap NodeWrap)
-> Type l l NodeWrap NodeWrap)
-> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
-> Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(((Down Int, ParsedLexemes, Down Int), Type l l NodeWrap NodeWrap)
-> Type l l NodeWrap NodeWrap)
forall a b.
Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text b
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ParserInput (Parser g Text)
-> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
ParserInput (Parser g Text)
"OF" Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(((Down Int, ParsedLexemes, Down Int), Type l l NodeWrap NodeWrap)
-> Type l l NodeWrap NodeWrap)
-> Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
((Down Int, ParsedLexemes, Down Int), Type l l NodeWrap NodeWrap)
-> Parser g Text (Type l l NodeWrap NodeWrap)
forall a b.
Fixed (ParserT ((,) [[Lexeme]])) g Text (a -> b)
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser g Text (Type l l NodeWrap NodeWrap)
-> Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
((Down Int, ParsedLexemes, Down Int), Type l l NodeWrap NodeWrap)
forall (g :: (* -> *) -> *) a.
Apply g =>
Parser g Text a -> Parser g Text (NodeWrap a)
wrap Parser g Text (Type l l NodeWrap NodeWrap)
simpleType,
moduleBody :: Parser g Text (Block l l NodeWrap NodeWrap)
moduleBody = [NodeWrap (Declaration l l NodeWrap NodeWrap)]
-> Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Block l l NodeWrap NodeWrap
forall l (f :: * -> *) l' (f' :: * -> *).
Modula2 l =>
[f (Declaration l' l' f' f')]
-> Maybe (f (StatementSequence l' l' f' f'))
-> Maybe (f (StatementSequence l' l' f' f'))
-> Maybe (f (StatementSequence l' l' f' f'))
-> Block l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
[f (Declaration l' l' f' f')]
-> Maybe (f (StatementSequence l' l' f' f'))
-> Maybe (f (StatementSequence l' l' f' f'))
-> Maybe (f (StatementSequence l' l' f' f'))
-> Block l l' f' f
ISO.Abstract.exceptionHandlingBlock ([NodeWrap (Declaration l l NodeWrap NodeWrap)]
-> Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Block l l NodeWrap NodeWrap)
-> Parser g Text [NodeWrap (Declaration l l NodeWrap NodeWrap)]
-> Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Block l l NodeWrap NodeWrap)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text [NodeWrap (Declaration l l NodeWrap NodeWrap)]
declarationSequence
Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Block l l NodeWrap NodeWrap)
-> Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap)))
-> Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Block l l NodeWrap NodeWrap)
forall a b.
Fixed (ParserT ((,) [[Lexeme]])) g Text (a -> b)
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap)))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (ParserInput (Parser g Text)
-> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
ParserInput (Parser g Text)
"BEGIN" Fixed (ParserT ((,) [[Lexeme]])) g Text ()
-> Parser
g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Parser
g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
forall a b.
Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text b
-> Fixed (ParserT ((,) [[Lexeme]])) g Text b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
statementSequence)
Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Block l l NodeWrap NodeWrap)
-> Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap)))
-> Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Block l l NodeWrap NodeWrap)
forall a b.
Fixed (ParserT ((,) [[Lexeme]])) g Text (a -> b)
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap)))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (ParserInput (Parser g Text)
-> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
ParserInput (Parser g Text)
"EXCEPT" Fixed (ParserT ((,) [[Lexeme]])) g Text ()
-> Parser
g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Parser
g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
forall a b.
Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text b
-> Fixed (ParserT ((,) [[Lexeme]])) g Text b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
statementSequence)
Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Block l l NodeWrap NodeWrap)
-> Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap)))
-> Parser g Text (Block l l NodeWrap NodeWrap)
forall a b.
Fixed (ParserT ((,) [[Lexeme]])) g Text (a -> b)
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(Maybe (NodeWrap (StatementSequence l l NodeWrap NodeWrap)))
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (ParserInput (Parser g Text)
-> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
ParserInput (Parser g Text)
"FINALLY" Fixed (ParserT ((,) [[Lexeme]])) g Text ()
-> Parser
g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
-> Parser
g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
forall a b.
Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text b
-> Fixed (ParserT ((,) [[Lexeme]])) g Text b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
statementSequence) Parser g Text (Block l l NodeWrap NodeWrap)
-> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
-> Parser g Text (Block l l NodeWrap NodeWrap)
forall a b.
Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text b
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ParserInput (Parser g Text)
-> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
ParserInput (Parser g Text)
"END",
retryStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
retryStatement = Statement l l NodeWrap NodeWrap
forall l l' (f' :: * -> *) (f :: * -> *).
Modula2 l =>
Statement l l' f' f
forall l' (f' :: * -> *) (f :: * -> *). Statement l l' f' f
ISO.Abstract.retryStatement Statement l l NodeWrap NodeWrap
-> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
-> Parser g Text (Statement l l NodeWrap NodeWrap)
forall a b.
a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text b
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ ParserInput (Parser g Text)
-> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
ParserInput (Parser g Text)
"RETRY",
arrayConstructor :: Parser g Text (Expression l l NodeWrap NodeWrap)
arrayConstructor = Maybe (QualIdent l)
-> [NodeWrap (Item l l NodeWrap NodeWrap)]
-> Expression l l NodeWrap NodeWrap
forall l l' (f :: * -> *) (f' :: * -> *).
Modula2 l =>
Maybe (QualIdent l')
-> [f (Item l' l' f' f')] -> Expression l l' f' f
forall l' (f :: * -> *) (f' :: * -> *).
Maybe (QualIdent l')
-> [f (Item l' l' f' f')] -> Expression l l' f' f
ISO.Abstract.array (Maybe (QualIdent l)
-> [NodeWrap (Item l l NodeWrap NodeWrap)]
-> Expression l l NodeWrap NodeWrap)
-> (QualIdent l -> Maybe (QualIdent l))
-> QualIdent l
-> [NodeWrap (Item l l NodeWrap NodeWrap)]
-> Expression l l NodeWrap NodeWrap
forall b c a. (b -> c) -> (a -> b) -> a -> c
. QualIdent l -> Maybe (QualIdent l)
forall a. a -> Maybe a
Just (QualIdent l
-> [NodeWrap (Item l l NodeWrap NodeWrap)]
-> Expression l l NodeWrap NodeWrap)
-> Parser g Text (QualIdent l)
-> Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
([NodeWrap (Item l l NodeWrap NodeWrap)]
-> Expression l l NodeWrap NodeWrap)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text (QualIdent l)
qualident Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
([NodeWrap (Item l l NodeWrap NodeWrap)]
-> Expression l l NodeWrap NodeWrap)
-> Parser g Text [NodeWrap (Item l l NodeWrap NodeWrap)]
-> Parser g Text (Expression l l NodeWrap NodeWrap)
forall a b.
Fixed (ParserT ((,) [[Lexeme]])) g Text (a -> b)
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser g Text [NodeWrap (Item l l NodeWrap NodeWrap)]
arrayConstructedValue,
arrayConstructedValue :: Parser g Text [NodeWrap (Item l l NodeWrap NodeWrap)]
arrayConstructedValue = Parser g Text [NodeWrap (Item l l NodeWrap NodeWrap)]
-> Parser g Text [NodeWrap (Item l l NodeWrap NodeWrap)]
forall (m :: * -> *) a. TokenParsing m => m a -> m a
braces (Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(NodeWrap (Item l l NodeWrap NodeWrap))
-> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
-> Parser g Text [NodeWrap (Item l l NodeWrap NodeWrap)]
forall (m :: * -> *) a sep. Alternative m => m a -> m sep -> m [a]
sepBy1 (Parser g Text (Item l l NodeWrap NodeWrap)
-> Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(NodeWrap (Item l l NodeWrap NodeWrap))
forall (g :: (* -> *) -> *) a.
Apply g =>
Parser g Text a -> Parser g Text (NodeWrap a)
wrap Parser g Text (Item l l NodeWrap NodeWrap)
arrayPart) (Text -> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
forall (g :: (* -> *) -> *).
LexicalParsing (Parser g Text) =>
Text -> Parser g Text ()
delimiter Text
",")),
arrayPart :: Parser g Text (Item l l NodeWrap NodeWrap)
arrayPart = NodeWrap (Expression l l NodeWrap NodeWrap)
-> Item l l NodeWrap NodeWrap
forall l (f :: * -> *) l' (f' :: * -> *).
Modula2 l =>
f (Expression l' l' f' f') -> Item l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f') -> Item l l' f' f
ISO.Abstract.single (NodeWrap (Expression l l NodeWrap NodeWrap)
-> Item l l NodeWrap NodeWrap)
-> Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
-> Parser g Text (Item l l NodeWrap NodeWrap)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
structureComponent
Parser g Text (Item l l NodeWrap NodeWrap)
-> Parser g Text (Item l l NodeWrap NodeWrap)
-> Parser g Text (Item l l NodeWrap NodeWrap)
forall a.
Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> NodeWrap (Expression l l NodeWrap NodeWrap)
-> NodeWrap (Expression l l NodeWrap NodeWrap)
-> Item l l NodeWrap NodeWrap
forall l (f :: * -> *) l' (f' :: * -> *).
Modula2 l =>
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Item l l' f' f
forall (f :: * -> *) l' (f' :: * -> *).
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Item l l' f' f
ISO.Abstract.repeated (NodeWrap (Expression l l NodeWrap NodeWrap)
-> NodeWrap (Expression l l NodeWrap NodeWrap)
-> Item l l NodeWrap NodeWrap)
-> Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
-> Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(NodeWrap (Expression l l NodeWrap NodeWrap)
-> Item l l NodeWrap NodeWrap)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
structureComponent Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(NodeWrap (Expression l l NodeWrap NodeWrap)
-> Item l l NodeWrap NodeWrap)
-> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
-> Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(NodeWrap (Expression l l NodeWrap NodeWrap)
-> Item l l NodeWrap NodeWrap)
forall a b.
Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text b
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ParserInput (Parser g Text)
-> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
ParserInput (Parser g Text)
"BY" Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(NodeWrap (Expression l l NodeWrap NodeWrap)
-> Item l l NodeWrap NodeWrap)
-> Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
-> Parser g Text (Item l l NodeWrap NodeWrap)
forall a b.
Fixed (ParserT ((,) [[Lexeme]])) g Text (a -> b)
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
constExpression,
structureComponent :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
structureComponent = Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
expression Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
-> Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
-> Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
forall a.
Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser g Text (Expression l l NodeWrap NodeWrap)
-> Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
forall (g :: (* -> *) -> *) a.
Apply g =>
Parser g Text a -> Parser g Text (NodeWrap a)
wrap (Maybe (QualIdent l)
-> [NodeWrap (Item l l NodeWrap NodeWrap)]
-> Expression l l NodeWrap NodeWrap
forall l l' (f :: * -> *) (f' :: * -> *).
Modula2 l =>
Maybe (QualIdent l')
-> [f (Item l' l' f' f')] -> Expression l l' f' f
forall l' (f :: * -> *) (f' :: * -> *).
Maybe (QualIdent l')
-> [f (Item l' l' f' f')] -> Expression l l' f' f
ISO.Abstract.array Maybe (QualIdent l)
forall a. Maybe a
Nothing ([NodeWrap (Item l l NodeWrap NodeWrap)]
-> Expression l l NodeWrap NodeWrap)
-> Parser g Text [NodeWrap (Item l l NodeWrap NodeWrap)]
-> Parser g Text (Expression l l NodeWrap NodeWrap)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text [NodeWrap (Item l l NodeWrap NodeWrap)]
arrayConstructedValue
Parser g Text (Expression l l NodeWrap NodeWrap)
-> Parser g Text (Expression l l NodeWrap NodeWrap)
-> Parser g Text (Expression l l NodeWrap NodeWrap)
forall a.
Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Maybe (QualIdent l)
-> [NodeWrap (Expression l l NodeWrap NodeWrap)]
-> Expression l l NodeWrap NodeWrap
forall l l' (f :: * -> *) (f' :: * -> *).
Modula2 l =>
Maybe (QualIdent l')
-> [f (Expression l' l' f' f')] -> Expression l l' f' f
forall l' (f :: * -> *) (f' :: * -> *).
Maybe (QualIdent l')
-> [f (Expression l' l' f' f')] -> Expression l l' f' f
ISO.Abstract.record Maybe (QualIdent l)
forall a. Maybe a
Nothing ([NodeWrap (Expression l l NodeWrap NodeWrap)]
-> Expression l l NodeWrap NodeWrap)
-> Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
-> Parser g Text (Expression l l NodeWrap NodeWrap)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
recordConstructedValue
Parser g Text (Expression l l NodeWrap NodeWrap)
-> Parser g Text (Expression l l NodeWrap NodeWrap)
-> Parser g Text (Expression l l NodeWrap NodeWrap)
forall a.
Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Maybe (QualIdent l)
-> [NodeWrap (Element l l NodeWrap NodeWrap)]
-> Expression l l NodeWrap NodeWrap
forall l l' (f :: * -> *) (f' :: * -> *).
Modula2 l =>
Maybe (QualIdent l')
-> [f (Element l' l' f' f')] -> Expression l l' f' f
forall l' (f :: * -> *) (f' :: * -> *).
Maybe (QualIdent l')
-> [f (Element l' l' f' f')] -> Expression l l' f' f
Abstract.set Maybe (QualIdent l)
forall a. Maybe a
Nothing ([NodeWrap (Element l l NodeWrap NodeWrap)]
-> Expression l l NodeWrap NodeWrap)
-> Parser g Text [NodeWrap (Element l l NodeWrap NodeWrap)]
-> Parser g Text (Expression l l NodeWrap NodeWrap)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text [NodeWrap (Element l l NodeWrap NodeWrap)]
setConstructedValue),
recordConstructor :: Parser g Text (Expression l l NodeWrap NodeWrap)
recordConstructor = Maybe (QualIdent l)
-> [NodeWrap (Expression l l NodeWrap NodeWrap)]
-> Expression l l NodeWrap NodeWrap
forall l l' (f :: * -> *) (f' :: * -> *).
Modula2 l =>
Maybe (QualIdent l')
-> [f (Expression l' l' f' f')] -> Expression l l' f' f
forall l' (f :: * -> *) (f' :: * -> *).
Maybe (QualIdent l')
-> [f (Expression l' l' f' f')] -> Expression l l' f' f
ISO.Abstract.record (Maybe (QualIdent l)
-> [NodeWrap (Expression l l NodeWrap NodeWrap)]
-> Expression l l NodeWrap NodeWrap)
-> (QualIdent l -> Maybe (QualIdent l))
-> QualIdent l
-> [NodeWrap (Expression l l NodeWrap NodeWrap)]
-> Expression l l NodeWrap NodeWrap
forall b c a. (b -> c) -> (a -> b) -> a -> c
. QualIdent l -> Maybe (QualIdent l)
forall a. a -> Maybe a
Just (QualIdent l
-> [NodeWrap (Expression l l NodeWrap NodeWrap)]
-> Expression l l NodeWrap NodeWrap)
-> Parser g Text (QualIdent l)
-> Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
([NodeWrap (Expression l l NodeWrap NodeWrap)]
-> Expression l l NodeWrap NodeWrap)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text (QualIdent l)
qualident Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
([NodeWrap (Expression l l NodeWrap NodeWrap)]
-> Expression l l NodeWrap NodeWrap)
-> Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
-> Parser g Text (Expression l l NodeWrap NodeWrap)
forall a b.
Fixed (ParserT ((,) [[Lexeme]])) g Text (a -> b)
-> Fixed (ParserT ((,) [[Lexeme]])) g Text a
-> Fixed (ParserT ((,) [[Lexeme]])) g Text b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
recordConstructedValue,
recordConstructedValue :: Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
recordConstructedValue = Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
-> Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
forall (m :: * -> *) a. TokenParsing m => m a -> m a
braces (Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
-> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
-> Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
forall (m :: * -> *) a sep. Alternative m => m a -> m sep -> m [a]
sepBy Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
structureComponent (Text -> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
forall (g :: (* -> *) -> *).
LexicalParsing (Parser g Text) =>
Text -> Parser g Text ()
delimiter Text
",")),
setConstructedValue :: Parser g Text [NodeWrap (Element l l NodeWrap NodeWrap)]
setConstructedValue = Parser g Text [NodeWrap (Element l l NodeWrap NodeWrap)]
-> Parser g Text [NodeWrap (Element l l NodeWrap NodeWrap)]
forall (m :: * -> *) a. TokenParsing m => m a -> m a
braces (Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(NodeWrap (Element l l NodeWrap NodeWrap))
-> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
-> Parser g Text [NodeWrap (Element l l NodeWrap NodeWrap)]
forall (m :: * -> *) a sep. Alternative m => m a -> m sep -> m [a]
sepBy (Parser g Text (Element l l NodeWrap NodeWrap)
-> Fixed
(ParserT ((,) [[Lexeme]]))
g
Text
(NodeWrap (Element l l NodeWrap NodeWrap))
forall (g :: (* -> *) -> *) a.
Apply g =>
Parser g Text a -> Parser g Text (NodeWrap a)
wrap Parser g Text (Element l l NodeWrap NodeWrap)
element) (Text -> Fixed (ParserT ((,) [[Lexeme]])) g Text ()
forall (g :: (* -> *) -> *).
LexicalParsing (Parser g Text) =>
Text -> Parser g Text ()
delimiter Text
","))
}
type ISOGrammar l = Rank2.Product (ISOMixin l ReportGrammar.NodeWrap) (ReportGrammar.Modula2Grammar l ReportGrammar.NodeWrap)
modula2ISOgrammar :: Grammar (ISOGrammar AST.Language) Parser Text
modula2ISOgrammar :: Grammar
(Product
(ISOMixin Language NodeWrap) (Modula2Grammar Language NodeWrap))
Parser
Text
modula2ISOgrammar = Grammar
(Product
(ISOMixin Language NodeWrap) (Modula2Grammar Language NodeWrap))
Parser
Text
-> Grammar
(Product
(ISOMixin Language NodeWrap) (Modula2Grammar Language NodeWrap))
Parser
Text
forall (p :: ((* -> *) -> *) -> * -> * -> *) (g :: (* -> *) -> *) s
(f :: * -> *) (rl :: * -> * -> *) (cb :: * -> *).
(cb ~ Const (g (Const Bool)), f ~ GrammarFunctor (p g s), f ~ rl s,
LeftRecParsing p g s rl, DeterministicParsing (p g s), Apply g,
Traversable g, Distributive g, Logistic g) =>
g (Fixed p g s) -> g (Fixed p g s)
autochain (Grammar
(Product
(ISOMixin Language NodeWrap) (Modula2Grammar Language NodeWrap))
Parser
Text
-> Grammar
(Product
(ISOMixin Language NodeWrap) (Modula2Grammar Language NodeWrap))
Parser
Text)
-> Grammar
(Product
(ISOMixin Language NodeWrap) (Modula2Grammar Language NodeWrap))
Parser
Text
-> Grammar
(Product
(ISOMixin Language NodeWrap) (Modula2Grammar Language NodeWrap))
Parser
Text
forall a b. (a -> b) -> a -> b
$ (Grammar
(Product
(ISOMixin Language NodeWrap) (Modula2Grammar Language NodeWrap))
Parser
Text
-> Grammar
(Product
(ISOMixin Language NodeWrap) (Modula2Grammar Language NodeWrap))
Parser
Text)
-> Grammar
(Product
(ISOMixin Language NodeWrap) (Modula2Grammar Language NodeWrap))
Parser
Text
forall (m :: * -> *) (g :: (* -> *) -> *).
(GrammarParsing m, g ~ ParserGrammar m, GrammarConstraint m g,
Distributive g) =>
(g m -> g m) -> g m
forall (g :: (* -> *) -> *).
(g
~ ParserGrammar
(Fixed
(ParserT ((,) [[Lexeme]]))
(Product
(ISOMixin Language NodeWrap) (Modula2Grammar Language NodeWrap))
Text),
GrammarConstraint
(Fixed
(ParserT ((,) [[Lexeme]]))
(Product
(ISOMixin Language NodeWrap) (Modula2Grammar Language NodeWrap))
Text)
g,
Distributive g) =>
(g (Fixed
(ParserT ((,) [[Lexeme]]))
(Product
(ISOMixin Language NodeWrap) (Modula2Grammar Language NodeWrap))
Text)
-> g (Fixed
(ParserT ((,) [[Lexeme]]))
(Product
(ISOMixin Language NodeWrap) (Modula2Grammar Language NodeWrap))
Text))
-> g (Fixed
(ParserT ((,) [[Lexeme]]))
(Product
(ISOMixin Language NodeWrap) (Modula2Grammar Language NodeWrap))
Text)
fixGrammar Grammar
(Product
(ISOMixin Language NodeWrap) (Modula2Grammar Language NodeWrap))
Parser
Text
-> Grammar
(Product
(ISOMixin Language NodeWrap) (Modula2Grammar Language NodeWrap))
Parser
Text
forall l (g :: (* -> *) -> *).
(Modula2 l, Apply g, LexicalParsing (Parser g Text)) =>
GrammarBuilder (ISOGrammar l) g Parser Text
isoGrammar
isoGrammar :: forall l g. (ISO.Abstract.Modula2 l, Rank2.Apply g, LexicalParsing (Parser g Text))
=> GrammarBuilder (ISOGrammar l) g Parser Text
isoGrammar :: forall l (g :: (* -> *) -> *).
(Modula2 l, Apply g, LexicalParsing (Parser g Text)) =>
GrammarBuilder (ISOGrammar l) g Parser Text
isoGrammar (Rank2.Pair iso :: ISOMixin l NodeWrap (Parser g Text)
iso@ISOMixin{Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
Parser g Text [NodeWrap (Element l l NodeWrap NodeWrap)]
Parser g Text [NodeWrap (Item l l NodeWrap NodeWrap)]
Parser
g Text (NonEmpty (NodeWrap (AddressedIdent l l NodeWrap NodeWrap)))
Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
Parser g Text (Type l l NodeWrap NodeWrap)
Parser g Text (Statement l l NodeWrap NodeWrap)
Parser g Text (Expression l l NodeWrap NodeWrap)
Parser g Text (Block l l NodeWrap NodeWrap)
Parser g Text (Item l l NodeWrap NodeWrap)
machineAddress :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (f (ConstExpression l l f f))
packedSetType :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (Type l l f f)
moduleBody :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (Block l l f f)
variableIdentifierList :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (NonEmpty (f (AddressedIdent l l f f)))
retryStatement :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (Statement l l f f)
arrayConstructor :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (ConstExpression l l f f)
recordConstructor :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (ConstExpression l l f f)
arrayConstructedValue :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p [f (Item l l f f)]
recordConstructedValue :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p [f (ConstExpression l l f f)]
setConstructedValue :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p [f (Element l l f f)]
arrayPart :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (Item l l f f)
structureComponent :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (f (ConstExpression l l f f))
machineAddress :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
packedSetType :: Parser g Text (Type l l NodeWrap NodeWrap)
moduleBody :: Parser g Text (Block l l NodeWrap NodeWrap)
variableIdentifierList :: Parser
g Text (NonEmpty (NodeWrap (AddressedIdent l l NodeWrap NodeWrap)))
retryStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
arrayConstructor :: Parser g Text (Expression l l NodeWrap NodeWrap)
recordConstructor :: Parser g Text (Expression l l NodeWrap NodeWrap)
arrayConstructedValue :: Parser g Text [NodeWrap (Item l l NodeWrap NodeWrap)]
recordConstructedValue :: Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
setConstructedValue :: Parser g Text [NodeWrap (Element l l NodeWrap NodeWrap)]
arrayPart :: Parser g Text (Item l l NodeWrap NodeWrap)
structureComponent :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
..} report :: Modula2Grammar l NodeWrap (Parser g Text)
report@ReportGrammar.Modula2Grammar{Parser g Text [NodeWrap (Declaration l l NodeWrap NodeWrap)]
Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
Parser g Text [NodeWrap (FieldList l l NodeWrap NodeWrap)]
Parser g Text [NodeWrap (Definition l l NodeWrap NodeWrap)]
Parser
g Text (NonEmpty (NodeWrap (Expression l l NodeWrap NodeWrap)))
Parser
g Text (NonEmpty (NodeWrap (CaseLabels l l NodeWrap NodeWrap)))
Parser g Text (IdentList l)
Parser g Text (NodeWrap (Module l l NodeWrap NodeWrap))
Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
Parser g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
Parser g Text (Text, ProcedureHeading l l NodeWrap NodeWrap)
Parser g Text Text
Parser g Text (Module l l NodeWrap NodeWrap)
Parser g Text (Declaration l l NodeWrap NodeWrap)
Parser g Text (Type l l NodeWrap NodeWrap)
Parser g Text (Statement l l NodeWrap NodeWrap)
Parser g Text (Expression l l NodeWrap NodeWrap)
Parser g Text (Designator l l NodeWrap NodeWrap)
Parser g Text (Value l l NodeWrap NodeWrap)
Parser g Text (FieldList l l NodeWrap NodeWrap)
Parser g Text (FormalParameters l l NodeWrap NodeWrap)
Parser g Text (FPSection l l NodeWrap NodeWrap)
Parser g Text (Block l l NodeWrap NodeWrap)
Parser g Text (Case l l NodeWrap NodeWrap)
Parser g Text (CaseLabels l l NodeWrap NodeWrap)
Parser g Text (Element l l NodeWrap NodeWrap)
Parser g Text (Import l)
Parser g Text (QualIdent l)
Parser g Text RelOp
Parser g Text (Export l)
Parser g Text (Definition l l NodeWrap NodeWrap)
Parser g Text (Variant l l NodeWrap NodeWrap)
Parser
g
Text
(NodeWrap (Expression l l NodeWrap NodeWrap)
-> NodeWrap (Expression l l NodeWrap NodeWrap)
-> Expression l l NodeWrap NodeWrap)
ident :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
number :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Value l l f f)
integer :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Value l l f f)
real :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Value l l f f)
scaleFactor :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
hexDigit :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
digit :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
octalDigit :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
string_prod :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
qualident :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (QualIdent l)
constantDeclaration :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Declaration l l f f)
constantDefinition :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Definition l l f f)
constExpression :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (ConstExpression l l f f))
relation :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p RelOp
addOperator :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p
-> p (f (Expression l l f f)
-> f (Expression l l f f) -> Expression l l f f)
mulOperator :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p
-> p (f (Expression l l f f)
-> f (Expression l l f f) -> Expression l l f f)
set :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Expression l l f f)
element :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Element l l f f)
typeDeclaration :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Declaration l l f f)
typeDefinition :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Definition l l f f)
type_prod :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
simpleType :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
enumeration :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
identList :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (IdentList l)
subrangeType :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
arrayType :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
recordType :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
fieldListSequence :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p [f (FieldList l l f f)]
fieldList :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (FieldList l l f f)
variant :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Variant l l f f)
caseLabelList :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NonEmpty (f (CaseLabels l l f f)))
caseLabels :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (CaseLabels l l f f)
setType :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
pointerType :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
procedureType :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
formalTypeList :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (FormalParameters l l f f)
variableDeclaration :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Declaration l l f f)
variableDefinition :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Definition l l f f)
designator :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Designator l l f f)
expList :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NonEmpty (f (Expression l l f f)))
expression :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (ConstExpression l l f f))
simpleExpression :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (ConstExpression l l f f))
term :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (ConstExpression l l f f))
factor :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (ConstExpression l l f f))
actualParameters :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p [f (Expression l l f f)]
statement :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
assignment :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
procedureCall :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
statementSequence :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (StatementSequence l l f f))
ifStatement :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
caseStatement :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
case_prod :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Case l l f f)
whileStatement :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
repeatStatement :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
forStatement :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
loopStatement :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
withStatement :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
procedureDeclaration :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Declaration l l f f)
procedureHeading :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Text, ProcedureHeading l l f f)
block :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Block l l f f)
declarationSequence :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p [f (Declaration l l f f)]
formalParameters :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (FormalParameters l l f f)
fPSection :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (FPSection l l f f)
formalType :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
moduleDeclaration :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Declaration l l f f)
priority :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (ConstExpression l l f f))
export :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Export l)
import_prod :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Import l)
definitionModule :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Module l l f f)
definitionSequence :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p [f (Definition l l f f)]
programModule :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Module l l f f)
compilationUnit :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (Module l l f f))
ident :: Parser g Text Text
number :: Parser g Text (Value l l NodeWrap NodeWrap)
integer :: Parser g Text (Value l l NodeWrap NodeWrap)
real :: Parser g Text (Value l l NodeWrap NodeWrap)
scaleFactor :: Parser g Text Text
hexDigit :: Parser g Text Text
digit :: Parser g Text Text
octalDigit :: Parser g Text Text
string_prod :: Parser g Text Text
qualident :: Parser g Text (QualIdent l)
constantDeclaration :: Parser g Text (Declaration l l NodeWrap NodeWrap)
constantDefinition :: Parser g Text (Definition l l NodeWrap NodeWrap)
constExpression :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
relation :: Parser g Text RelOp
addOperator :: Parser
g
Text
(NodeWrap (Expression l l NodeWrap NodeWrap)
-> NodeWrap (Expression l l NodeWrap NodeWrap)
-> Expression l l NodeWrap NodeWrap)
mulOperator :: Parser
g
Text
(NodeWrap (Expression l l NodeWrap NodeWrap)
-> NodeWrap (Expression l l NodeWrap NodeWrap)
-> Expression l l NodeWrap NodeWrap)
set :: Parser g Text (Expression l l NodeWrap NodeWrap)
element :: Parser g Text (Element l l NodeWrap NodeWrap)
typeDeclaration :: Parser g Text (Declaration l l NodeWrap NodeWrap)
typeDefinition :: Parser g Text (Definition l l NodeWrap NodeWrap)
type_prod :: Parser g Text (Type l l NodeWrap NodeWrap)
simpleType :: Parser g Text (Type l l NodeWrap NodeWrap)
enumeration :: Parser g Text (Type l l NodeWrap NodeWrap)
identList :: Parser g Text (IdentList l)
subrangeType :: Parser g Text (Type l l NodeWrap NodeWrap)
arrayType :: Parser g Text (Type l l NodeWrap NodeWrap)
recordType :: Parser g Text (Type l l NodeWrap NodeWrap)
fieldListSequence :: Parser g Text [NodeWrap (FieldList l l NodeWrap NodeWrap)]
fieldList :: Parser g Text (FieldList l l NodeWrap NodeWrap)
variant :: Parser g Text (Variant l l NodeWrap NodeWrap)
caseLabelList :: Parser
g Text (NonEmpty (NodeWrap (CaseLabels l l NodeWrap NodeWrap)))
caseLabels :: Parser g Text (CaseLabels l l NodeWrap NodeWrap)
setType :: Parser g Text (Type l l NodeWrap NodeWrap)
pointerType :: Parser g Text (Type l l NodeWrap NodeWrap)
procedureType :: Parser g Text (Type l l NodeWrap NodeWrap)
formalTypeList :: Parser g Text (FormalParameters l l NodeWrap NodeWrap)
variableDeclaration :: Parser g Text (Declaration l l NodeWrap NodeWrap)
variableDefinition :: Parser g Text (Definition l l NodeWrap NodeWrap)
designator :: Parser g Text (Designator l l NodeWrap NodeWrap)
expList :: Parser
g Text (NonEmpty (NodeWrap (Expression l l NodeWrap NodeWrap)))
expression :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
simpleExpression :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
term :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
factor :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
actualParameters :: Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
statement :: Parser g Text (Statement l l NodeWrap NodeWrap)
assignment :: Parser g Text (Statement l l NodeWrap NodeWrap)
procedureCall :: Parser g Text (Statement l l NodeWrap NodeWrap)
statementSequence :: Parser g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
ifStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
caseStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
case_prod :: Parser g Text (Case l l NodeWrap NodeWrap)
whileStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
repeatStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
forStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
loopStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
withStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
procedureDeclaration :: Parser g Text (Declaration l l NodeWrap NodeWrap)
procedureHeading :: Parser g Text (Text, ProcedureHeading l l NodeWrap NodeWrap)
block :: Parser g Text (Block l l NodeWrap NodeWrap)
declarationSequence :: Parser g Text [NodeWrap (Declaration l l NodeWrap NodeWrap)]
formalParameters :: Parser g Text (FormalParameters l l NodeWrap NodeWrap)
fPSection :: Parser g Text (FPSection l l NodeWrap NodeWrap)
formalType :: Parser g Text (Type l l NodeWrap NodeWrap)
moduleDeclaration :: Parser g Text (Declaration l l NodeWrap NodeWrap)
priority :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
export :: Parser g Text (Export l)
import_prod :: Parser g Text (Import l)
definitionModule :: Parser g Text (Module l l NodeWrap NodeWrap)
definitionSequence :: Parser g Text [NodeWrap (Definition l l NodeWrap NodeWrap)]
programModule :: Parser g Text (Module l l NodeWrap NodeWrap)
compilationUnit :: Parser g Text (NodeWrap (Module l l NodeWrap NodeWrap))
..}) =
ISOMixin l NodeWrap (Parser g Text)
-> Modula2Grammar l NodeWrap (Parser g Text)
-> Product
(ISOMixin l NodeWrap) (Modula2Grammar l NodeWrap) (Parser g Text)
forall {k} (f :: k -> *) (g :: k -> *) (a :: k).
f a -> g a -> Product f g a
Rank2.Pair (Modula2Grammar l NodeWrap (Parser g Text)
-> ISOMixin l NodeWrap (Parser g Text)
-> ISOMixin l NodeWrap (Parser g Text)
forall l (g :: (* -> *) -> *).
(Modula2 l, Apply g, LexicalParsing (Parser g Text)) =>
Modula2Grammar l NodeWrap (Parser g Text)
-> ISOMixin l NodeWrap (Parser g Text)
-> ISOMixin l NodeWrap (Parser g Text)
isoMixin Modula2Grammar l NodeWrap (Parser g Text)
report ISOMixin l NodeWrap (Parser g Text)
iso) (Modula2Grammar l NodeWrap (Parser g Text)
-> Product
(ISOMixin l NodeWrap) (Modula2Grammar l NodeWrap) (Parser g Text))
-> Modula2Grammar l NodeWrap (Parser g Text)
-> Product
(ISOMixin l NodeWrap) (Modula2Grammar l NodeWrap) (Parser g Text)
forall a b. (a -> b) -> a -> b
$
Modula2Grammar l NodeWrap (Parser g Text)
reportGrammar{
ReportGrammar.variableDeclaration =
ISO.Abstract.addressedVariableDeclaration <$> variableIdentifierList <* delimiter ":" <*> wrap type_prod,
ReportGrammar.procedureDeclaration =
ReportGrammar.procedureDeclaration reportGrammar
<|> ISO.Abstract.forwardProcedureDeclaration <$> wrap (snd <$> procedureHeading)
<* delimiter ";" <* keyword "FORWARD",
ReportGrammar.type_prod = ReportGrammar.type_prod reportGrammar <|> packedSetType,
ReportGrammar.subrangeType = uncurry <$> (Abstract.subRange <$> optional qualident)
<*> brackets ((,) <$> constExpression <* delimiter ".." <*> constExpression),
ReportGrammar.variant = ReportGrammar.variant reportGrammar <|> pure ISO.Abstract.emptyVariant,
ReportGrammar.block = ISO.Abstract.exceptionHandlingBlock <$> declarationSequence
<*> optional (keyword "BEGIN" *> statementSequence)
<*> optional (keyword "EXCEPT" *> statementSequence) <*> pure Nothing <* keyword "END",
ReportGrammar.statement = ReportGrammar.statement reportGrammar <|> retryStatement,
ReportGrammar.caseStatement = Abstract.caseStatement <$ keyword "CASE" <*> expression
<* keyword "OF" <*> (catMaybes <$> sepBy1 (optional $ wrap case_prod) (delimiter "|"))
<*> optional (keyword "ELSE" *> statementSequence) <* keyword "END",
ReportGrammar.factor = ReportGrammar.factor reportGrammar <<|> wrap arrayConstructor <<|> wrap recordConstructor,
ReportGrammar.set = Abstract.set . Just <$> qualident <*> setConstructedValue,
ReportGrammar.mulOperator = ReportGrammar.mulOperator reportGrammar
<|> ISO.Abstract.remainder <$ keyword "REM"}
where reportGrammar :: Modula2Grammar l NodeWrap (Parser g Text)
reportGrammar = GrammarBuilder (Modula2Grammar l NodeWrap) g Parser Text
forall l (g :: (* -> *) -> *).
(Modula2 l, Apply g, LexicalParsing (Parser g Text)) =>
GrammarBuilder (Modula2Grammar l NodeWrap) g Parser Text
ReportGrammar.grammar Modula2Grammar l NodeWrap (Parser g Text)
report
instance TokenParsing (Parser (ISOGrammar l) Text) where
someSpace :: Parser (ISOGrammar l) Text ()
someSpace = Parser (ISOGrammar l) Text ()
forall (m :: * -> *). LexicalParsing m => m ()
someLexicalSpace
token :: forall a.
Parser (ISOGrammar l) Text a -> Parser (ISOGrammar l) Text a
token = Fixed (ParserT ((,) [[Lexeme]])) (ISOGrammar l) Text a
-> Fixed (ParserT ((,) [[Lexeme]])) (ISOGrammar l) Text a
forall a.
Parser (ISOGrammar l) Text a -> Parser (ISOGrammar l) Text a
forall (m :: * -> *) a. LexicalParsing m => m a -> m a
lexicalToken
instance LexicalParsing (Parser (ISOGrammar l) Text) where
lexicalComment :: Parser (ISOGrammar l) Text ()
lexicalComment = do Text
c <- Parser (ISOGrammar l) Text Text
forall (g :: (* -> *) -> *). Apply g => Parser g Text Text
ReportGrammar.comment
([[Lexeme]], ()) -> Parser (ISOGrammar l) Text ()
forall (m :: * -> *) s a (g :: (* -> *) -> *).
(Applicative m, Ord s) =>
m a -> ParserT m g s a
lift ([[Text -> Lexeme
ReportGrammar.Comment Text
c]], ())
lexicalWhiteSpace :: Parser (ISOGrammar l) Text ()
lexicalWhiteSpace = Parser (ISOGrammar l) Text ()
forall (g :: (* -> *) -> *).
(Apply g, LexicalParsing (Parser g Text)) =>
Parser g Text ()
ReportGrammar.whiteSpace
isIdentifierStartChar :: Char -> Bool
isIdentifierStartChar = Char -> Bool
isLetter
isIdentifierFollowChar :: Char -> Bool
isIdentifierFollowChar Char
c = Char -> Bool
isAlphaNum Char
c Bool -> Bool -> Bool
|| Char
c Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'_'
identifierToken :: Parser
(ISOGrammar l) Text (ParserInput (Parser (ISOGrammar l) Text))
-> Parser
(ISOGrammar l) Text (ParserInput (Parser (ISOGrammar l) Text))
identifierToken Parser
(ISOGrammar l) Text (ParserInput (Parser (ISOGrammar l) Text))
word = Parser (ISOGrammar l) Text Text -> Parser (ISOGrammar l) Text Text
forall a.
Parser (ISOGrammar l) Text a -> Parser (ISOGrammar l) Text a
forall (m :: * -> *) a. LexicalParsing m => m a -> m a
lexicalToken (do Text
w <- Parser (ISOGrammar l) Text Text
Parser
(ISOGrammar l) Text (ParserInput (Parser (ISOGrammar l) Text))
word
Bool -> Parser (ISOGrammar l) Text ()
forall (f :: * -> *). Alternative f => Bool -> f ()
guard (Text
w Text -> [Text] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [Text]
reservedWords)
Text -> Parser (ISOGrammar l) Text Text
forall a.
a -> Fixed (ParserT ((,) [[Lexeme]])) (ISOGrammar l) Text a
forall (m :: * -> *) a. Monad m => a -> m a
return Text
w)
lexicalToken :: forall a.
Parser (ISOGrammar l) Text a -> Parser (ISOGrammar l) Text a
lexicalToken Parser (ISOGrammar l) Text a
p = (Text, a) -> a
forall a b. (a, b) -> b
snd ((Text, a) -> a)
-> Fixed (ParserT ((,) [[Lexeme]])) (ISOGrammar l) Text (Text, a)
-> Parser (ISOGrammar l) Text a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (([[Lexeme]], (Text, a)) -> ([[Lexeme]], (Text, a)))
-> Fixed (ParserT ((,) [[Lexeme]])) (ISOGrammar l) Text (Text, a)
-> Fixed (ParserT ((,) [[Lexeme]])) (ISOGrammar l) Text (Text, a)
forall b (m :: * -> *) a (g :: (* -> *) -> *) s.
AmbiguityDecidable b =>
(m a -> m b) -> ParserT m g s a -> ParserT m g s b
tmap ([[Lexeme]], (Text, a)) -> ([[Lexeme]], (Text, a))
forall {b}. ([[Lexeme]], (Text, b)) -> ([[Lexeme]], (Text, b))
addOtherToken (Parser (ISOGrammar l) Text a
-> Fixed
(ParserT ((,) [[Lexeme]]))
(ISOGrammar l)
Text
(ParserInput (Parser (ISOGrammar l) Text), a)
forall a.
Fixed (ParserT ((,) [[Lexeme]])) (ISOGrammar l) Text a
-> Fixed
(ParserT ((,) [[Lexeme]]))
(ISOGrammar l)
Text
(ParserInput (Parser (ISOGrammar l) Text), a)
forall (m :: * -> *) a.
ConsumedInputParsing m =>
m a -> m (ParserInput m, a)
match Parser (ISOGrammar l) Text a
p) Parser (ISOGrammar l) Text a
-> Parser (ISOGrammar l) Text () -> Parser (ISOGrammar l) Text a
forall a b.
Fixed (ParserT ((,) [[Lexeme]])) (ISOGrammar l) Text a
-> Fixed (ParserT ((,) [[Lexeme]])) (ISOGrammar l) Text b
-> Fixed (ParserT ((,) [[Lexeme]])) (ISOGrammar l) Text a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser (ISOGrammar l) Text ()
forall (m :: * -> *). LexicalParsing m => m ()
lexicalWhiteSpace
where addOtherToken :: ([[Lexeme]], (Text, b)) -> ([[Lexeme]], (Text, b))
addOtherToken ([], (Text
i, b
x)) = ([[TokenType -> Text -> Lexeme
ReportGrammar.Token TokenType
Other Text
i]], (Text
i, b
x))
addOtherToken ([[Lexeme]]
t, (Text
i, b
x)) = ([[Lexeme]]
t, (Text
i, b
x))
keyword :: ParserInput (Parser (ISOGrammar l) Text)
-> Parser (ISOGrammar l) Text ()
keyword ParserInput (Parser (ISOGrammar l) Text)
s = Parser (ISOGrammar l) Text () -> Parser (ISOGrammar l) Text ()
forall a.
Parser (ISOGrammar l) Text a -> Parser (ISOGrammar l) Text a
forall (m :: * -> *) a. LexicalParsing m => m a -> m a
lexicalToken (ParserInput (Parser (ISOGrammar l) Text)
-> Parser
(ISOGrammar l) Text (ParserInput (Parser (ISOGrammar l) Text))
forall (m :: * -> *).
InputParsing m =>
ParserInput m -> m (ParserInput m)
string ParserInput (Parser (ISOGrammar l) Text)
s
Parser (ISOGrammar l) Text Text
-> Parser (ISOGrammar l) Text () -> Parser (ISOGrammar l) Text ()
forall a b.
Fixed (ParserT ((,) [[Lexeme]])) (ISOGrammar l) Text a
-> Fixed (ParserT ((,) [[Lexeme]])) (ISOGrammar l) Text b
-> Fixed (ParserT ((,) [[Lexeme]])) (ISOGrammar l) Text b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (Char -> Bool) -> Parser (ISOGrammar l) Text ()
forall (m :: * -> *). InputCharParsing m => (Char -> Bool) -> m ()
notSatisfyChar Char -> Bool
isAlphaNum
Parser (ISOGrammar l) Text ()
-> Parser (ISOGrammar l) Text () -> Parser (ISOGrammar l) Text ()
forall a b.
Fixed (ParserT ((,) [[Lexeme]])) (ISOGrammar l) Text a
-> Fixed (ParserT ((,) [[Lexeme]])) (ISOGrammar l) Text b
-> Fixed (ParserT ((,) [[Lexeme]])) (ISOGrammar l) Text a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ([[Lexeme]], ()) -> Parser (ISOGrammar l) Text ()
forall (m :: * -> *) s a (g :: (* -> *) -> *).
(Applicative m, Ord s) =>
m a -> ParserT m g s a
lift ([[TokenType -> Text -> Lexeme
ReportGrammar.Token TokenType
Keyword Text
ParserInput (Parser (ISOGrammar l) Text)
s]], ()))
Parser (ISOGrammar l) Text ()
-> String -> Parser (ISOGrammar l) Text ()
forall a.
Fixed (ParserT ((,) [[Lexeme]])) (ISOGrammar l) Text a
-> String -> Fixed (ParserT ((,) [[Lexeme]])) (ISOGrammar l) Text a
forall (m :: * -> *) a. Parsing m => m a -> String -> m a
<?> (String
"keyword " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Text -> String
forall a. Show a => a -> String
show Text
ParserInput (Parser (ISOGrammar l) Text)
s)
reservedWords :: [Text]
reservedWords = [Text]
ReportGrammar.reservedWords [Text] -> [Text] -> [Text]
forall a. Semigroup a => a -> a -> a
<> [Text
"EXCEPT", Text
"FINALLY", Text
"FORWARD", Text
"PACKEDSET", Text
"REM", Text
"RETRY"]