| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Stg.Parser.Parser
Contents
Description
A parser for the STG language, modeled after the grammar given in the description in the 1992 paper (link) with a couple of differences to enhance usability:
- Function application uses no parentheses or commas like in Haskell
(
f x y z), not with curly parentheses and commas like in the paper (f {x,y,z}). - Comment syntax like in Haskell:
-- inline,{- multiline -}. - Constructors may end with a
#to allow labelling primitive boxes e.g. withInt#. - A lambda's head is written
\(free) bound -> body, wherefreeandboundare space-separated variable lists, instead of the paper's{free} \n {bound} -> body, which uses comma-separated lists. The update flag\uis signified using a double arrow=>instead of the normal arrow->.
- parse :: StgParser ast -> Text -> Either Doc ast
- data StgParser ast
- program :: StgParser Program
- binds :: StgParser Binds
- lambdaForm :: StgParser LambdaForm
- expr :: StgParser Expr
- alts :: StgParser Alts
- nonDefaultAlts :: StgParser NonDefaultAlts
- algebraicAlt :: StgParser AlgebraicAlt
- primitiveAlt :: StgParser PrimitiveAlt
- defaultAlt :: StgParser DefaultAlt
- literal :: StgParser Literal
- primOp :: StgParser PrimOp
- atom :: StgParser Atom
- var :: StgParser Var
- con :: StgParser Constr
General parsing
A parser for an STG syntax element.
Parser rules
binds :: StgParser Binds Source #
Parse a collection of bindings, used by let(rec) expressions and at the
top level of a program.
lambdaForm :: StgParser LambdaForm Source #
Parse a lambda form, consisting of a list of free variables, and update flag, a list of bound variables, and the function body.
expr :: StgParser Expr Source #
Parse an expression, which can be
- let,
let(rec) ... in ... - case,
case ... of ... - function application,
f (...) - constructor application,
C (...) - primitive application,
p# (...) - literal,
1#
nonDefaultAlts :: StgParser NonDefaultAlts Source #
Parse non-default alternatives. The list of alternatives can be either empty, all algebraic, or all primitive.
Nil -> ... Cons x xs -> ...
1# -> ... 2# -> ...
algebraicAlt :: StgParser AlgebraicAlt Source #
Parse a single algebraic alternative.
Cons x xs -> ...
primitiveAlt :: StgParser PrimitiveAlt Source #
Parse a single primitive alternative, such as 1#.
1# -> ...
defaultAlt :: StgParser DefaultAlt Source #
Parse the default alternative, taken if none of the other alternatives
in a case expression match.
default -> ...
v -> ...
Parse a variable identifier. Variables start with a lower-case letter or
_, followed by a string consisting of alphanumeric characters or ', _.