{-# 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 (FieldList l l NodeWrap NodeWrap)]
Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
Parser g Text [NodeWrap (Declaration l l NodeWrap NodeWrap)]
Parser g Text [NodeWrap (Definition l l NodeWrap NodeWrap)]
Parser
g Text (NonEmpty (NodeWrap (CaseLabels l l NodeWrap NodeWrap)))
Parser
g Text (NonEmpty (NodeWrap (Expression l l NodeWrap NodeWrap)))
Parser g Text (IdentList l)
Parser g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
Parser g Text (NodeWrap (Module l l NodeWrap NodeWrap))
Parser g Text (Text, ProcedureHeading l l NodeWrap NodeWrap)
Parser g Text Text
Parser g Text RelOp
Parser g Text (QualIdent l)
Parser g Text (Import l)
Parser g Text (Element l l NodeWrap NodeWrap)
Parser g Text (CaseLabels l l NodeWrap NodeWrap)
Parser g Text (Case l l NodeWrap NodeWrap)
Parser g Text (Block l l NodeWrap NodeWrap)
Parser g Text (FPSection l l NodeWrap NodeWrap)
Parser g Text (FormalParameters l l NodeWrap NodeWrap)
Parser g Text (FieldList l l NodeWrap NodeWrap)
Parser g Text (Value l l NodeWrap NodeWrap)
Parser g Text (Designator l l NodeWrap NodeWrap)
Parser g Text (Expression l l NodeWrap NodeWrap)
Parser g Text (Statement l l NodeWrap NodeWrap)
Parser g Text (Type l l NodeWrap NodeWrap)
Parser g Text (Declaration l l NodeWrap NodeWrap)
Parser g Text (Module l l NodeWrap NodeWrap)
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)
compilationUnit :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (Module l l f f))
programModule :: 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)]
definitionModule :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Module l l f f)
import_prod :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Import l)
export :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Export l)
priority :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (ConstExpression l l f f))
moduleDeclaration :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Declaration l l f f)
formalType :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
fPSection :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (FPSection l l f f)
formalParameters :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (FormalParameters l l f f)
declarationSequence :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p [f (Declaration l l f f)]
block :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Block l l f f)
procedureHeading :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Text, ProcedureHeading l l f f)
procedureDeclaration :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Declaration l l f f)
withStatement :: 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)
forStatement :: 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)
whileStatement :: 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)
caseStatement :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
ifStatement :: 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))
procedureCall :: 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)
statement :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
actualParameters :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p [f (Expression l l f f)]
factor :: 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))
simpleExpression :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (ConstExpression l l f f))
expression :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (ConstExpression l l f f))
expList :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NonEmpty (f (Expression l l f f)))
designator :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Designator l l f f)
variableDefinition :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Definition l l f f)
variableDeclaration :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Declaration l l f f)
formalTypeList :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (FormalParameters l l f f)
procedureType :: 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)
setType :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
caseLabels :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (CaseLabels l l f f)
caseLabelList :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NonEmpty (f (CaseLabels l l f f)))
variant :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Variant l l f f)
fieldList :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (FieldList l l f f)
fieldListSequence :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p [f (FieldList l l f f)]
recordType :: 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)
subrangeType :: 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)
enumeration :: 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)
type_prod :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
typeDefinition :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Definition l l f f)
typeDeclaration :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Declaration l l f f)
element :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Element l l f f)
set :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (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)
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)
relation :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p RelOp
constExpression :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (ConstExpression l l f f))
constantDefinition :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Definition l l f f)
constantDeclaration :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Declaration l l f f)
qualident :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (QualIdent l)
string_prod :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
octalDigit :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
digit :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
hexDigit :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
scaleFactor :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
real :: 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)
number :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Value l l f f)
ident :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
compilationUnit :: Parser g Text (NodeWrap (Module l l NodeWrap NodeWrap))
programModule :: Parser g Text (Module l l NodeWrap NodeWrap)
definitionSequence :: Parser g Text [NodeWrap (Definition l l NodeWrap NodeWrap)]
definitionModule :: Parser g Text (Module l l NodeWrap NodeWrap)
import_prod :: Parser g Text (Import l)
export :: Parser g Text (Export l)
priority :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
moduleDeclaration :: Parser g Text (Declaration l l NodeWrap NodeWrap)
formalType :: Parser g Text (Type l l NodeWrap NodeWrap)
fPSection :: Parser g Text (FPSection l l NodeWrap NodeWrap)
formalParameters :: Parser g Text (FormalParameters l l NodeWrap NodeWrap)
declarationSequence :: Parser g Text [NodeWrap (Declaration l l NodeWrap NodeWrap)]
block :: Parser g Text (Block l l NodeWrap NodeWrap)
procedureHeading :: Parser g Text (Text, ProcedureHeading l l NodeWrap NodeWrap)
procedureDeclaration :: Parser g Text (Declaration l l NodeWrap NodeWrap)
withStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
loopStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
forStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
repeatStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
whileStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
case_prod :: Parser g Text (Case l l NodeWrap NodeWrap)
caseStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
ifStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
statementSequence :: Parser g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
procedureCall :: Parser g Text (Statement l l NodeWrap NodeWrap)
assignment :: Parser g Text (Statement l l NodeWrap NodeWrap)
statement :: Parser g Text (Statement l l NodeWrap NodeWrap)
actualParameters :: Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
factor :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
term :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
simpleExpression :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
expression :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
expList :: Parser
g Text (NonEmpty (NodeWrap (Expression l l NodeWrap NodeWrap)))
designator :: Parser g Text (Designator l l NodeWrap NodeWrap)
variableDefinition :: Parser g Text (Definition l l NodeWrap NodeWrap)
variableDeclaration :: Parser g Text (Declaration l l NodeWrap NodeWrap)
formalTypeList :: Parser g Text (FormalParameters l l NodeWrap NodeWrap)
procedureType :: Parser g Text (Type l l NodeWrap NodeWrap)
pointerType :: Parser g Text (Type l l NodeWrap NodeWrap)
setType :: Parser g Text (Type l l NodeWrap NodeWrap)
caseLabels :: Parser g Text (CaseLabels l l NodeWrap NodeWrap)
caseLabelList :: Parser
g Text (NonEmpty (NodeWrap (CaseLabels l l NodeWrap NodeWrap)))
variant :: Parser g Text (Variant l l NodeWrap NodeWrap)
fieldList :: Parser g Text (FieldList l l NodeWrap NodeWrap)
fieldListSequence :: Parser g Text [NodeWrap (FieldList l l NodeWrap NodeWrap)]
recordType :: Parser g Text (Type l l NodeWrap NodeWrap)
arrayType :: Parser g Text (Type l l NodeWrap NodeWrap)
subrangeType :: Parser g Text (Type l l NodeWrap NodeWrap)
identList :: Parser g Text (IdentList l)
enumeration :: Parser g Text (Type l l NodeWrap NodeWrap)
simpleType :: Parser g Text (Type l l NodeWrap NodeWrap)
type_prod :: Parser g Text (Type l l NodeWrap NodeWrap)
typeDefinition :: Parser g Text (Definition l l NodeWrap NodeWrap)
typeDeclaration :: Parser g Text (Declaration l l NodeWrap NodeWrap)
element :: Parser g Text (Element l l NodeWrap NodeWrap)
set :: Parser g Text (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)
addOperator :: Parser
g
Text
(NodeWrap (Expression l l NodeWrap NodeWrap)
-> NodeWrap (Expression l l NodeWrap NodeWrap)
-> Expression l l NodeWrap NodeWrap)
relation :: Parser g Text RelOp
constExpression :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
constantDefinition :: Parser g Text (Definition l l NodeWrap NodeWrap)
constantDeclaration :: Parser g Text (Declaration l l NodeWrap NodeWrap)
qualident :: Parser g Text (QualIdent l)
string_prod :: Parser g Text Text
octalDigit :: Parser g Text Text
digit :: Parser g Text Text
hexDigit :: Parser g Text Text
scaleFactor :: Parser g Text Text
real :: Parser g Text (Value l l NodeWrap NodeWrap)
integer :: Parser g Text (Value l l NodeWrap NodeWrap)
number :: Parser g Text (Value l l NodeWrap NodeWrap)
ident :: Parser g Text Text
..} ISOMixin{Parser g Text [NodeWrap (Element l l NodeWrap NodeWrap)]
Parser g Text [NodeWrap (Expression 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 (Block l l NodeWrap NodeWrap)
Parser g Text (Expression l l NodeWrap NodeWrap)
Parser g Text (Statement l l NodeWrap NodeWrap)
Parser g Text (Type l l NodeWrap NodeWrap)
Parser g Text (Item l l NodeWrap NodeWrap)
structureComponent :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
arrayPart :: Parser g Text (Item l l NodeWrap NodeWrap)
setConstructedValue :: Parser g Text [NodeWrap (Element l l NodeWrap NodeWrap)]
recordConstructedValue :: Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
arrayConstructedValue :: Parser g Text [NodeWrap (Item l l NodeWrap NodeWrap)]
recordConstructor :: Parser g Text (Expression l l NodeWrap NodeWrap)
arrayConstructor :: Parser g Text (Expression l l NodeWrap NodeWrap)
retryStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
variableIdentifierList :: Parser
g Text (NonEmpty (NodeWrap (AddressedIdent l l NodeWrap NodeWrap)))
moduleBody :: Parser g Text (Block l l NodeWrap NodeWrap)
packedSetType :: Parser g Text (Type l l NodeWrap NodeWrap)
machineAddress :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
structureComponent :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (f (ConstExpression l l f f))
arrayPart :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (Item l l f f)
setConstructedValue :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p [f (Element l l f f)]
recordConstructedValue :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p [f (ConstExpression l l f f)]
arrayConstructedValue :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p [f (Item l l f f)]
recordConstructor :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (ConstExpression l l f f)
arrayConstructor :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (ConstExpression l l f f)
retryStatement :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (Statement l l f f)
variableIdentifierList :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (NonEmpty (f (AddressedIdent l l f f)))
moduleBody :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (Block l l f f)
packedSetType :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (Type l l f f)
machineAddress :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (f (ConstExpression l l f f))
..} = ISOMixin{
machineAddress :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
machineAddress = 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 =
forall (m :: * -> *) a sep.
Alternative m =>
m a -> m sep -> m (NonEmpty a)
sepByNonEmpty (forall (g :: (* -> *) -> *) a.
Apply g =>
Parser g Text a -> Parser g Text (NodeWrap a)
wrap (forall l l' (f' :: * -> *) (f :: * -> *).
Modula2 l =>
Text -> AddressedIdent l l' f' f
ISO.Abstract.unaddressedIdent forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text Text
ident
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> forall l (f :: * -> *) l' (f' :: * -> *).
Modula2 l =>
Text -> f (ConstExpression l' l' f' f') -> AddressedIdent l l' f' f
ISO.Abstract.addressedIdent forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text Text
ident forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall (m :: * -> *) a. TokenParsing m => m a -> m a
brackets Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
constExpression))
(forall (g :: (* -> *) -> *).
LexicalParsing (Parser g Text) =>
Text -> Parser g Text ()
delimiter Text
","),
packedSetType :: Parser g Text (Type l l NodeWrap NodeWrap)
packedSetType = forall l (f :: * -> *) l' (f' :: * -> *).
Modula2 l =>
f (Type l' l' f' f') -> Type l l' f' f
ISO.Abstract.packedSetType forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
"PACKED" forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
"SET" forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
"OF" forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> 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 = 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
ISO.Abstract.exceptionHandlingBlock forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text [NodeWrap (Declaration l l NodeWrap NodeWrap)]
declarationSequence
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
"BEGIN" forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
statementSequence)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
"EXCEPT" forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
statementSequence)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
"FINALLY" forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
statementSequence) forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
"END",
retryStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
retryStatement = forall l l' (f' :: * -> *) (f :: * -> *).
Modula2 l =>
Statement l l' f' f
ISO.Abstract.retryStatement forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
"RETRY",
arrayConstructor :: Parser g Text (Expression l l NodeWrap NodeWrap)
arrayConstructor = forall l l' (f :: * -> *) (f' :: * -> *).
Modula2 l =>
Maybe (QualIdent l')
-> [f (Item l' l' f' f')] -> Expression l l' f' f
ISO.Abstract.array forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. a -> Maybe a
Just forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text (QualIdent l)
qualident 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 = forall (m :: * -> *) a. TokenParsing m => m a -> m a
braces (forall (m :: * -> *) a sep. Alternative m => m a -> m sep -> m [a]
sepBy1 (forall (g :: (* -> *) -> *) a.
Apply g =>
Parser g Text a -> Parser g Text (NodeWrap a)
wrap Parser g Text (Item l l NodeWrap NodeWrap)
arrayPart) (forall (g :: (* -> *) -> *).
LexicalParsing (Parser g Text) =>
Text -> Parser g Text ()
delimiter Text
",")),
arrayPart :: Parser g Text (Item l l NodeWrap NodeWrap)
arrayPart = forall l (f :: * -> *) l' (f' :: * -> *).
Modula2 l =>
f (Expression l' l' f' f') -> Item l l' f' f
ISO.Abstract.single forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
structureComponent
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> forall l (f :: * -> *) l' (f' :: * -> *).
Modula2 l =>
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Item l l' f' f
ISO.Abstract.repeated forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
structureComponent forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
"BY" 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 forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> forall (g :: (* -> *) -> *) a.
Apply g =>
Parser g Text a -> Parser g Text (NodeWrap a)
wrap (forall l l' (f :: * -> *) (f' :: * -> *).
Modula2 l =>
Maybe (QualIdent l')
-> [f (Item l' l' f' f')] -> Expression l l' f' f
ISO.Abstract.array forall a. Maybe a
Nothing forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text [NodeWrap (Item l l NodeWrap NodeWrap)]
arrayConstructedValue
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> forall l l' (f :: * -> *) (f' :: * -> *).
Modula2 l =>
Maybe (QualIdent l')
-> [f (Expression l' l' f' f')] -> Expression l l' f' f
ISO.Abstract.record forall a. Maybe a
Nothing forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
recordConstructedValue
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> forall l l' (f :: * -> *) (f' :: * -> *).
Modula2 l =>
Maybe (QualIdent l')
-> [f (Element l' l' f' f')] -> Expression l l' f' f
Abstract.set forall a. Maybe a
Nothing 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 = forall l l' (f :: * -> *) (f' :: * -> *).
Modula2 l =>
Maybe (QualIdent l')
-> [f (Expression l' l' f' f')] -> Expression l l' f' f
ISO.Abstract.record forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. a -> Maybe a
Just forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text (QualIdent l)
qualident 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 = forall (m :: * -> *) a. TokenParsing m => m a -> m a
braces (forall (m :: * -> *) a sep. Alternative m => m a -> m sep -> m [a]
sepBy Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
structureComponent (forall (g :: (* -> *) -> *).
LexicalParsing (Parser g Text) =>
Text -> Parser g Text ()
delimiter Text
",")),
setConstructedValue :: Parser g Text [NodeWrap (Element l l NodeWrap NodeWrap)]
setConstructedValue = forall (m :: * -> *) a. TokenParsing m => m a -> m a
braces (forall (m :: * -> *) a sep. Alternative m => m a -> m sep -> m [a]
sepBy (forall (g :: (* -> *) -> *) a.
Apply g =>
Parser g Text a -> Parser g Text (NodeWrap a)
wrap Parser g Text (Element l l NodeWrap NodeWrap)
element) (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 = 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 forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *) (g :: (* -> *) -> *).
(GrammarParsing m, g ~ ParserGrammar m, GrammarConstraint m g,
Distributive g) =>
(g m -> g m) -> g m
fixGrammar 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 (Element l l NodeWrap NodeWrap)]
Parser g Text [NodeWrap (Expression 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 (Block l l NodeWrap NodeWrap)
Parser g Text (Expression l l NodeWrap NodeWrap)
Parser g Text (Statement l l NodeWrap NodeWrap)
Parser g Text (Type l l NodeWrap NodeWrap)
Parser g Text (Item l l NodeWrap NodeWrap)
structureComponent :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
arrayPart :: Parser g Text (Item l l NodeWrap NodeWrap)
setConstructedValue :: Parser g Text [NodeWrap (Element l l NodeWrap NodeWrap)]
recordConstructedValue :: Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
arrayConstructedValue :: Parser g Text [NodeWrap (Item l l NodeWrap NodeWrap)]
recordConstructor :: Parser g Text (Expression l l NodeWrap NodeWrap)
arrayConstructor :: Parser g Text (Expression l l NodeWrap NodeWrap)
retryStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
variableIdentifierList :: Parser
g Text (NonEmpty (NodeWrap (AddressedIdent l l NodeWrap NodeWrap)))
moduleBody :: Parser g Text (Block l l NodeWrap NodeWrap)
packedSetType :: Parser g Text (Type l l NodeWrap NodeWrap)
machineAddress :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
structureComponent :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (f (ConstExpression l l f f))
arrayPart :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (Item l l f f)
setConstructedValue :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p [f (Element l l f f)]
recordConstructedValue :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p [f (ConstExpression l l f f)]
arrayConstructedValue :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p [f (Item l l f f)]
recordConstructor :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (ConstExpression l l f f)
arrayConstructor :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (ConstExpression l l f f)
retryStatement :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (Statement l l f f)
variableIdentifierList :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (NonEmpty (f (AddressedIdent l l f f)))
moduleBody :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (Block l l f f)
packedSetType :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (Type l l f f)
machineAddress :: forall l (f :: * -> *) (p :: * -> *).
ISOMixin l f p -> p (f (ConstExpression l l f f))
..} report :: Modula2Grammar l NodeWrap (Parser g Text)
report@ReportGrammar.Modula2Grammar{Parser g Text [NodeWrap (FieldList l l NodeWrap NodeWrap)]
Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
Parser g Text [NodeWrap (Declaration l l NodeWrap NodeWrap)]
Parser g Text [NodeWrap (Definition l l NodeWrap NodeWrap)]
Parser
g Text (NonEmpty (NodeWrap (CaseLabels l l NodeWrap NodeWrap)))
Parser
g Text (NonEmpty (NodeWrap (Expression l l NodeWrap NodeWrap)))
Parser g Text (IdentList l)
Parser g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
Parser g Text (NodeWrap (Module l l NodeWrap NodeWrap))
Parser g Text (Text, ProcedureHeading l l NodeWrap NodeWrap)
Parser g Text Text
Parser g Text RelOp
Parser g Text (QualIdent l)
Parser g Text (Import l)
Parser g Text (Element l l NodeWrap NodeWrap)
Parser g Text (CaseLabels l l NodeWrap NodeWrap)
Parser g Text (Case l l NodeWrap NodeWrap)
Parser g Text (Block l l NodeWrap NodeWrap)
Parser g Text (FPSection l l NodeWrap NodeWrap)
Parser g Text (FormalParameters l l NodeWrap NodeWrap)
Parser g Text (FieldList l l NodeWrap NodeWrap)
Parser g Text (Value l l NodeWrap NodeWrap)
Parser g Text (Designator l l NodeWrap NodeWrap)
Parser g Text (Expression l l NodeWrap NodeWrap)
Parser g Text (Statement l l NodeWrap NodeWrap)
Parser g Text (Type l l NodeWrap NodeWrap)
Parser g Text (Declaration l l NodeWrap NodeWrap)
Parser g Text (Module l l NodeWrap NodeWrap)
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)
compilationUnit :: Parser g Text (NodeWrap (Module l l NodeWrap NodeWrap))
programModule :: Parser g Text (Module l l NodeWrap NodeWrap)
definitionSequence :: Parser g Text [NodeWrap (Definition l l NodeWrap NodeWrap)]
definitionModule :: Parser g Text (Module l l NodeWrap NodeWrap)
import_prod :: Parser g Text (Import l)
export :: Parser g Text (Export l)
priority :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
moduleDeclaration :: Parser g Text (Declaration l l NodeWrap NodeWrap)
formalType :: Parser g Text (Type l l NodeWrap NodeWrap)
fPSection :: Parser g Text (FPSection l l NodeWrap NodeWrap)
formalParameters :: Parser g Text (FormalParameters l l NodeWrap NodeWrap)
declarationSequence :: Parser g Text [NodeWrap (Declaration l l NodeWrap NodeWrap)]
block :: Parser g Text (Block l l NodeWrap NodeWrap)
procedureHeading :: Parser g Text (Text, ProcedureHeading l l NodeWrap NodeWrap)
procedureDeclaration :: Parser g Text (Declaration l l NodeWrap NodeWrap)
withStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
loopStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
forStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
repeatStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
whileStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
case_prod :: Parser g Text (Case l l NodeWrap NodeWrap)
caseStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
ifStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
statementSequence :: Parser g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
procedureCall :: Parser g Text (Statement l l NodeWrap NodeWrap)
assignment :: Parser g Text (Statement l l NodeWrap NodeWrap)
statement :: Parser g Text (Statement l l NodeWrap NodeWrap)
actualParameters :: Parser g Text [NodeWrap (Expression l l NodeWrap NodeWrap)]
factor :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
term :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
simpleExpression :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
expression :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
expList :: Parser
g Text (NonEmpty (NodeWrap (Expression l l NodeWrap NodeWrap)))
designator :: Parser g Text (Designator l l NodeWrap NodeWrap)
variableDefinition :: Parser g Text (Definition l l NodeWrap NodeWrap)
variableDeclaration :: Parser g Text (Declaration l l NodeWrap NodeWrap)
formalTypeList :: Parser g Text (FormalParameters l l NodeWrap NodeWrap)
procedureType :: Parser g Text (Type l l NodeWrap NodeWrap)
pointerType :: Parser g Text (Type l l NodeWrap NodeWrap)
setType :: Parser g Text (Type l l NodeWrap NodeWrap)
caseLabels :: Parser g Text (CaseLabels l l NodeWrap NodeWrap)
caseLabelList :: Parser
g Text (NonEmpty (NodeWrap (CaseLabels l l NodeWrap NodeWrap)))
variant :: Parser g Text (Variant l l NodeWrap NodeWrap)
fieldList :: Parser g Text (FieldList l l NodeWrap NodeWrap)
fieldListSequence :: Parser g Text [NodeWrap (FieldList l l NodeWrap NodeWrap)]
recordType :: Parser g Text (Type l l NodeWrap NodeWrap)
arrayType :: Parser g Text (Type l l NodeWrap NodeWrap)
subrangeType :: Parser g Text (Type l l NodeWrap NodeWrap)
identList :: Parser g Text (IdentList l)
enumeration :: Parser g Text (Type l l NodeWrap NodeWrap)
simpleType :: Parser g Text (Type l l NodeWrap NodeWrap)
type_prod :: Parser g Text (Type l l NodeWrap NodeWrap)
typeDefinition :: Parser g Text (Definition l l NodeWrap NodeWrap)
typeDeclaration :: Parser g Text (Declaration l l NodeWrap NodeWrap)
element :: Parser g Text (Element l l NodeWrap NodeWrap)
set :: Parser g Text (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)
addOperator :: Parser
g
Text
(NodeWrap (Expression l l NodeWrap NodeWrap)
-> NodeWrap (Expression l l NodeWrap NodeWrap)
-> Expression l l NodeWrap NodeWrap)
relation :: Parser g Text RelOp
constExpression :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
constantDefinition :: Parser g Text (Definition l l NodeWrap NodeWrap)
constantDeclaration :: Parser g Text (Declaration l l NodeWrap NodeWrap)
qualident :: Parser g Text (QualIdent l)
string_prod :: Parser g Text Text
octalDigit :: Parser g Text Text
digit :: Parser g Text Text
hexDigit :: Parser g Text Text
scaleFactor :: Parser g Text Text
real :: Parser g Text (Value l l NodeWrap NodeWrap)
integer :: Parser g Text (Value l l NodeWrap NodeWrap)
number :: Parser g Text (Value l l NodeWrap NodeWrap)
ident :: Parser g Text Text
compilationUnit :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (Module l l f f))
programModule :: 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)]
definitionModule :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Module l l f f)
import_prod :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Import l)
export :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Export l)
priority :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (ConstExpression l l f f))
moduleDeclaration :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Declaration l l f f)
formalType :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
fPSection :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (FPSection l l f f)
formalParameters :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (FormalParameters l l f f)
declarationSequence :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p [f (Declaration l l f f)]
block :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Block l l f f)
procedureHeading :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Text, ProcedureHeading l l f f)
procedureDeclaration :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Declaration l l f f)
withStatement :: 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)
forStatement :: 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)
whileStatement :: 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)
caseStatement :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
ifStatement :: 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))
procedureCall :: 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)
statement :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
actualParameters :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p [f (Expression l l f f)]
factor :: 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))
simpleExpression :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (ConstExpression l l f f))
expression :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (ConstExpression l l f f))
expList :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NonEmpty (f (Expression l l f f)))
designator :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Designator l l f f)
variableDefinition :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Definition l l f f)
variableDeclaration :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Declaration l l f f)
formalTypeList :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (FormalParameters l l f f)
procedureType :: 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)
setType :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
caseLabels :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (CaseLabels l l f f)
caseLabelList :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NonEmpty (f (CaseLabels l l f f)))
variant :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Variant l l f f)
fieldList :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (FieldList l l f f)
fieldListSequence :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p [f (FieldList l l f f)]
recordType :: 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)
subrangeType :: 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)
enumeration :: 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)
type_prod :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
typeDefinition :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Definition l l f f)
typeDeclaration :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Declaration l l f f)
element :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Element l l f f)
set :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (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)
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)
relation :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p RelOp
constExpression :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (ConstExpression l l f f))
constantDefinition :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Definition l l f f)
constantDeclaration :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Declaration l l f f)
qualident :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (QualIdent l)
string_prod :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
octalDigit :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
digit :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
hexDigit :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
scaleFactor :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
real :: 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)
number :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Value l l f f)
ident :: forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p Text
..}) =
forall {k} (f :: k -> *) (g :: k -> *) (a :: k).
f a -> g a -> Product f g a
Rank2.Pair (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) forall a b. (a -> b) -> a -> b
$
Modula2Grammar l NodeWrap (Parser g Text)
reportGrammar{
variableDeclaration :: Parser g Text (Declaration l l NodeWrap NodeWrap)
ReportGrammar.variableDeclaration =
forall l (f :: * -> *) l' (f' :: * -> *).
Modula2 l =>
NonEmpty (f (AddressedIdent l' l' f' f'))
-> f (Type l' l' f' f') -> Declaration l l' f' f
ISO.Abstract.addressedVariableDeclaration forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser
g Text (NonEmpty (NodeWrap (AddressedIdent l l NodeWrap NodeWrap)))
variableIdentifierList forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall (g :: (* -> *) -> *).
LexicalParsing (Parser g Text) =>
Text -> Parser g Text ()
delimiter Text
":" forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall (g :: (* -> *) -> *) a.
Apply g =>
Parser g Text a -> Parser g Text (NodeWrap a)
wrap Parser g Text (Type l l NodeWrap NodeWrap)
type_prod,
procedureDeclaration :: Parser g Text (Declaration l l NodeWrap NodeWrap)
ReportGrammar.procedureDeclaration =
forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Declaration l l f f)
ReportGrammar.procedureDeclaration Modula2Grammar l NodeWrap (Parser g Text)
reportGrammar
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> forall l (f :: * -> *) l' (f' :: * -> *).
Modula2 l =>
f (ProcedureHeading l' l' f' f') -> Declaration l l' f' f
ISO.Abstract.forwardProcedureDeclaration forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (g :: (* -> *) -> *) a.
Apply g =>
Parser g Text a -> Parser g Text (NodeWrap a)
wrap (forall a b. (a, b) -> b
snd forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text (Text, ProcedureHeading l l NodeWrap NodeWrap)
procedureHeading)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall (g :: (* -> *) -> *).
LexicalParsing (Parser g Text) =>
Text -> Parser g Text ()
delimiter Text
";" forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
"FORWARD",
type_prod :: Parser g Text (Type l l NodeWrap NodeWrap)
ReportGrammar.type_prod = forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Type l l f f)
ReportGrammar.type_prod Modula2Grammar l NodeWrap (Parser g Text)
reportGrammar forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser g Text (Type l l NodeWrap NodeWrap)
packedSetType,
subrangeType :: Parser g Text (Type l l NodeWrap NodeWrap)
ReportGrammar.subrangeType = forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (forall l l' (f :: * -> *) (f' :: * -> *).
Modula2 l =>
Maybe (QualIdent l')
-> f (ConstExpression l' l' f' f')
-> f (ConstExpression l' l' f' f')
-> Type l l' f' f
Abstract.subRange forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional Parser g Text (QualIdent l)
qualident)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall (m :: * -> *) a. TokenParsing m => m a -> m a
brackets ((,) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
constExpression forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall (g :: (* -> *) -> *).
LexicalParsing (Parser g Text) =>
Text -> Parser g Text ()
delimiter Text
".." forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
constExpression),
variant :: Parser g Text (Variant l l NodeWrap NodeWrap)
ReportGrammar.variant = forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Variant l l f f)
ReportGrammar.variant Modula2Grammar l NodeWrap (Parser g Text)
reportGrammar forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> forall (f :: * -> *) a. Applicative f => a -> f a
pure forall l l' (f' :: * -> *) (f :: * -> *).
Modula2 l =>
Variant l l' f' f
ISO.Abstract.emptyVariant,
block :: Parser g Text (Block l l NodeWrap NodeWrap)
ReportGrammar.block = 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
ISO.Abstract.exceptionHandlingBlock forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text [NodeWrap (Declaration l l NodeWrap NodeWrap)]
declarationSequence
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
"BEGIN" forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
statementSequence)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
"EXCEPT" forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
statementSequence) forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a. Maybe a
Nothing forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
"END",
statement :: Parser g Text (Statement l l NodeWrap NodeWrap)
ReportGrammar.statement = forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (Statement l l f f)
ReportGrammar.statement Modula2Grammar l NodeWrap (Parser g Text)
reportGrammar forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser g Text (Statement l l NodeWrap NodeWrap)
retryStatement,
caseStatement :: Parser g Text (Statement l l NodeWrap NodeWrap)
ReportGrammar.caseStatement = forall l (f :: * -> *) l' (f' :: * -> *).
Wirthy l =>
f (Expression l' l' f' f')
-> [f (Case l' l' f' f')]
-> Maybe (f (StatementSequence l' l' f' f'))
-> Statement l l' f' f
Abstract.caseStatement forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
"CASE" forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
expression
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
"OF" forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (forall a. [Maybe a] -> [a]
catMaybes forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (m :: * -> *) a sep. Alternative m => m a -> m sep -> m [a]
sepBy1 (forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional forall a b. (a -> b) -> a -> b
$ forall (g :: (* -> *) -> *) a.
Apply g =>
Parser g Text a -> Parser g Text (NodeWrap a)
wrap Parser g Text (Case l l NodeWrap NodeWrap)
case_prod) (forall (g :: (* -> *) -> *).
LexicalParsing (Parser g Text) =>
Text -> Parser g Text ()
delimiter Text
"|"))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
"ELSE" forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser g Text (NodeWrap (StatementSequence l l NodeWrap NodeWrap))
statementSequence) forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
"END",
factor :: Parser g Text (NodeWrap (Expression l l NodeWrap NodeWrap))
ReportGrammar.factor = forall l (f :: * -> *) (p :: * -> *).
Modula2Grammar l f p -> p (NodeWrap (ConstExpression l l f f))
ReportGrammar.factor Modula2Grammar l NodeWrap (Parser g Text)
reportGrammar forall (m :: * -> *) a. DeterministicParsing m => m a -> m a -> m a
<<|> forall (g :: (* -> *) -> *) a.
Apply g =>
Parser g Text a -> Parser g Text (NodeWrap a)
wrap Parser g Text (Expression l l NodeWrap NodeWrap)
arrayConstructor forall (m :: * -> *) a. DeterministicParsing m => m a -> m a -> m a
<<|> forall (g :: (* -> *) -> *) a.
Apply g =>
Parser g Text a -> Parser g Text (NodeWrap a)
wrap Parser g Text (Expression l l NodeWrap NodeWrap)
recordConstructor,
set :: Parser g Text (Expression l l NodeWrap NodeWrap)
ReportGrammar.set = forall l l' (f :: * -> *) (f' :: * -> *).
Modula2 l =>
Maybe (QualIdent l')
-> [f (Element l' l' f' f')] -> Expression l l' f' f
Abstract.set forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. a -> Maybe a
Just forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser g Text (QualIdent l)
qualident forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser g Text [NodeWrap (Element l l NodeWrap NodeWrap)]
setConstructedValue,
mulOperator :: Parser
g
Text
(NodeWrap (Expression l l NodeWrap NodeWrap)
-> NodeWrap (Expression l l NodeWrap NodeWrap)
-> Expression l l NodeWrap NodeWrap)
ReportGrammar.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)
ReportGrammar.mulOperator Modula2Grammar l NodeWrap (Parser g Text)
reportGrammar
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> forall l (f :: * -> *) l' (f' :: * -> *).
Modula2 l =>
f (Expression l' l' f' f')
-> f (Expression l' l' f' f') -> Expression l l' f' f
ISO.Abstract.remainder forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ forall (m :: * -> *). LexicalParsing m => ParserInput m -> m ()
keyword Text
"REM"}
where reportGrammar :: Modula2Grammar l NodeWrap (Parser g Text)
reportGrammar = 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 = forall (m :: * -> *). LexicalParsing m => m ()
someLexicalSpace
token :: forall a.
Parser (ISOGrammar l) Text a -> Parser (ISOGrammar l) Text a
token = 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 <- forall (g :: (* -> *) -> *). Apply g => Parser g Text Text
ReportGrammar.comment
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 = 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 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 = forall (m :: * -> *) a. LexicalParsing m => m a -> m a
lexicalToken (do Text
w <- Parser
(ISOGrammar l) Text (ParserInput (Parser (ISOGrammar l) Text))
word
forall (f :: * -> *). Alternative f => Bool -> f ()
guard (Text
w forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [Text]
reservedWords)
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 = forall a b. (a, b) -> b
snd forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall b (m :: * -> *) a (g :: (* -> *) -> *) s.
AmbiguityDecidable b =>
(m a -> m b) -> ParserT m g s a -> ParserT m g s b
tmap forall {b}. ([[Lexeme]], (Text, b)) -> ([[Lexeme]], (Text, b))
addOtherToken (forall (m :: * -> *) a.
ConsumedInputParsing m =>
m a -> m (ParserInput m, a)
match Parser (ISOGrammar l) Text a
p) forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* 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 = forall (m :: * -> *) a. LexicalParsing m => m a -> m a
lexicalToken (forall (m :: * -> *).
InputParsing m =>
ParserInput m -> m (ParserInput m)
string ParserInput (Parser (ISOGrammar l) Text)
s
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> forall (m :: * -> *). InputCharParsing m => (Char -> Bool) -> m ()
notSatisfyChar Char -> Bool
isAlphaNum
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall (m :: * -> *) s a (g :: (* -> *) -> *).
(Applicative m, Ord s) =>
m a -> ParserT m g s a
lift ([[TokenType -> Text -> Lexeme
ReportGrammar.Token TokenType
Keyword ParserInput (Parser (ISOGrammar l) Text)
s]], ()))
forall (m :: * -> *) a. Parsing m => m a -> String -> m a
<?> (String
"keyword " forall a. Semigroup a => a -> a -> a
<> forall a. Show a => a -> String
show ParserInput (Parser (ISOGrammar l) Text)
s)
reservedWords :: [Text]
reservedWords = [Text]
ReportGrammar.reservedWords forall a. Semigroup a => a -> a -> a
<> [Text
"EXCEPT", Text
"FINALLY", Text
"FORWARD", Text
"PACKEDSET", Text
"REM", Text
"RETRY"]