ghc-8.8.1.20191211: The GHC API
Safe HaskellNone
LanguageHaskell2010

Lexer

Synopsis

Documentation

data Token Source #

Constructors

ITas 
ITcase 
ITclass 
ITdata 
ITdefault 
ITderiving 
ITdo 
ITelse 
IThiding 
ITforeign 
ITif 
ITimport 
ITin 
ITinfix 
ITinfixl 
ITinfixr 
ITinstance 
ITlet 
ITmodule 
ITnewtype 
ITof 
ITqualified 
ITthen 
ITtype 
ITwhere 
ITforall IsUnicodeSyntax 
ITexport 
ITlabel 
ITdynamic 
ITsafe 
ITinterruptible 
ITunsafe 
ITstdcallconv 
ITccallconv 
ITcapiconv 
ITprimcallconv 
ITjavascriptcallconv 
ITmdo 
ITfamily 
ITrole 
ITgroup 
ITby 
ITusing 
ITpattern 
ITstatic 
ITstock 
ITanyclass 
ITvia 
ITunit 
ITsignature 
ITdependency 
ITrequires 
ITinline_prag SourceText InlineSpec RuleMatchInfo 
ITspec_prag SourceText 
ITspec_inline_prag SourceText Bool 
ITsource_prag SourceText 
ITrules_prag SourceText 
ITwarning_prag SourceText 
ITdeprecated_prag SourceText 
ITline_prag SourceText 
ITcolumn_prag SourceText 
ITscc_prag SourceText 
ITgenerated_prag SourceText 
ITcore_prag SourceText 
ITunpack_prag SourceText 
ITnounpack_prag SourceText 
ITann_prag SourceText 
ITcomplete_prag SourceText 
ITclose_prag 
IToptions_prag String 
ITinclude_prag String 
ITlanguage_prag 
ITminimal_prag SourceText 
IToverlappable_prag SourceText 
IToverlapping_prag SourceText 
IToverlaps_prag SourceText 
ITincoherent_prag SourceText 
ITctype SourceText 
ITcomment_line_prag 
ITdotdot 
ITcolon 
ITdcolon IsUnicodeSyntax 
ITequal 
ITlam 
ITlcase 
ITvbar 
ITlarrow IsUnicodeSyntax 
ITrarrow IsUnicodeSyntax 
ITat 
ITtilde 
ITdarrow IsUnicodeSyntax 
ITminus 
ITbang 
ITstar IsUnicodeSyntax 
ITdot 
ITbiglam 
ITocurly 
ITccurly 
ITvocurly 
ITvccurly 
ITobrack 
ITopabrack 
ITcpabrack 
ITcbrack 
IToparen 
ITcparen 
IToubxparen 
ITcubxparen 
ITsemi 
ITcomma 
ITunderscore 
ITbackquote 
ITsimpleQuote 
ITvarid FastString 
ITconid FastString 
ITvarsym FastString 
ITconsym FastString 
ITqvarid (FastString, FastString) 
ITqconid (FastString, FastString) 
ITqvarsym (FastString, FastString) 
ITqconsym (FastString, FastString) 
ITdupipvarid FastString 
ITlabelvarid FastString 
ITchar SourceText Char 
ITstring SourceText FastString 
ITinteger IntegralLit 
ITrational FractionalLit 
ITprimchar SourceText Char 
ITprimstring SourceText ByteString 
ITprimint SourceText Integer 
ITprimword SourceText Integer 
ITprimfloat FractionalLit 
ITprimdouble FractionalLit 
ITopenExpQuote HasE IsUnicodeSyntax 
ITopenPatQuote 
ITopenDecQuote 
ITopenTypQuote 
ITcloseQuote IsUnicodeSyntax 
ITopenTExpQuote HasE 
ITcloseTExpQuote 
ITidEscape FastString 
ITparenEscape 
ITidTyEscape FastString 
ITparenTyEscape 
ITtyQuote 
ITquasiQuote (FastString, FastString, RealSrcSpan) 
ITqQuasiQuote (FastString, FastString, FastString, RealSrcSpan) 
ITproc 
ITrec 
IToparenbar IsUnicodeSyntax
(|
ITcparenbar IsUnicodeSyntax
|)
ITlarrowtail IsUnicodeSyntax
-<
ITrarrowtail IsUnicodeSyntax
>-
ITLarrowtail IsUnicodeSyntax
-<<
ITRarrowtail IsUnicodeSyntax
>>-
ITtypeApp

Type application '@' (lexed differently than as-pattern '@', due to checking for preceding whitespace)

ITunknown String

Used when the lexer can't make sense of it

ITeof

end of file token

ITdocCommentNext String

something beginning -- |

ITdocCommentPrev String

something beginning -- ^

ITdocCommentNamed String

something beginning -- $

ITdocSection Int String

a section heading

ITdocOptions String

doc options (prune, ignore-exports, etc)

ITlineComment String

comment starting by "--"

ITblockComment String

comment in {- -}

Instances

Instances details
Show Token # 
Instance details

Defined in Lexer

Outputable Token # 
Instance details

Defined in Lexer

lexer :: Bool -> (Located Token -> P a) -> P a Source #

mkPState :: DynFlags -> StringBuffer -> RealSrcLoc -> PState Source #

Creates a parse state from a DynFlags value

mkPStatePure :: ParserFlags -> StringBuffer -> RealSrcLoc -> PState Source #

Creates a parse state from a ParserFlags value

newtype P a Source #

Constructors

P 

Fields

Instances

Instances details
Monad P # 
Instance details

Defined in Lexer

Methods

(>>=) :: P a -> (a -> P b) -> P b Source #

(>>) :: P a -> P b -> P b Source #

return :: a -> P a Source #

Functor P # 
Instance details

Defined in Lexer

Methods

fmap :: (a -> b) -> P a -> P b Source #

(<$) :: a -> P b -> P a Source #

MonadFail P # 
Instance details

Defined in Lexer

Methods

fail :: String -> P a Source #

Applicative P # 
Instance details

Defined in Lexer

Methods

pure :: a -> P a Source #

(<*>) :: P (a -> b) -> P a -> P b Source #

liftA2 :: (a -> b -> c) -> P a -> P b -> P c Source #

(*>) :: P a -> P b -> P b Source #

(<*) :: P a -> P b -> P a Source #

mkParserFlags :: DynFlags -> ParserFlags Source #

Extracts the flag information needed for parsing

mkParserFlags' Source #

Arguments

:: EnumSet WarningFlag

warnings flags enabled

-> EnumSet Extension

permitted language extensions enabled

-> UnitId

key of package currently being compiled

-> Bool

are safe imports on?

-> Bool

keeping Haddock comment tokens

-> Bool

keep regular comment tokens

-> Bool

If this is enabled, '{-}' and '{--}' update the internal position kept by the parser. Otherwise, those pragmas are lexed as ITline_prag and ITcolumn_prag tokens.

-> ParserFlags 

Given exactly the information needed, set up the ParserFlags

data ParserFlags Source #

The subset of the DynFlags used by the parser. See mkParserFlags or mkParserFlags' for ways to construct this.

data ExtBits Source #

Various boolean flags, mostly language extensions, that impact lexing and parsing. Note that a handful of these can change during lexing/parsing.

getBit :: ExtBits -> P Bool Source #

Check if a given flag is currently set in the bitmap.

type AddAnn = SrcSpan -> P () Source #

Encapsulated call to addAnnotation, requiring only the SrcSpan of the AST construct the annotation belongs to; together with the AnnKeywordId, this is the key of the annotation map.

This type is useful for places in the parser where it is not yet known what SrcSpan an annotation should be added to. The most common situation is when we are parsing a list: the annotations need to be associated with the AST element that *contains* the list, not the list itself. AddAnn lets us defer adding the annotations until we finish parsing the list and are now parsing the enclosing element; we then apply the AddAnn to associate the annotations. Another common situation is where a common fragment of the AST has been factored out but there is no separate AST node for this fragment (this occurs in class and data declarations). In this case, the annotation belongs to the parent data declaration.

The usual way an AddAnn is created is using the mj ("make jump") function, and then it can be discharged using the ams function.

addAnnsAt :: SrcSpan -> [AddAnn] -> P () Source #

Given a location and a list of AddAnn, apply them all to the location.

mkParensApiAnn :: SrcSpan -> [AddAnn] Source #

Given a SrcSpan that surrounds a HsPar or HsParTy, generate AddAnn values for the opening and closing bordering on the start and end of the span