A small lexer for TLA⁺ #
Lex a full module: raw-skip anything before the header and after the footer, tokenizing only what lies between them — both are ignorable junk by TLA⁺'s own rules, and need not lex as valid tokens at all (an unterminated string in a license preamble, say).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Lex an arbitrary TLA⁺ fragment with no module header or footer of its own, tokenizing
straight through to the end of input. Parser_/Annotations.lean's parseMailbox re-lexes a bare
expression pulled out of a @mailbox comment this way, as opposed to lexModule, which expects
a real module's ---- MODULE <name> ---- … ==== structure.
Equations
Instances For
Main parser for a single TLA⁺ module #
Equations
- SurfaceTLAPlus.Parser.instToStringOrdering_parser_ = { toString := fun (x : Ordering) => match x with | Ordering.lt => "<" | Ordering.eq => "=" | Ordering.gt => ">" }
Instances For
- prefix : PrefixOperator → OperatorOrExpression
- postfix : PostfixOperator → OperatorOrExpression
- infix : InfixOperator → OperatorOrExpression
- atom : Expression (List CommentAnnotation) → OperatorOrExpression
- index : Bool × List (Expression (List CommentAnnotation)) → OperatorOrExpression
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Returns true if the precedence range of the two operators overlap, false otherwise.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Associativity of an infix operator.
- left : Associativity
An operator
⊙is left-associative ifx ⊙ y ⊙ z = (x ⊙ y) ⊙ z. - right : Associativity
An operator
⊙is right-associative ifx ⊙ y ⊙ z = x ⊙ (y ⊙ z). - none : Associativity
An operator
⊙is non-associative if it does not make sense to writex ⊙ y ⊙ z.
Instances For
Maps a TLA+ infix operator to its associativity.
Equations
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc (SurfaceTLAPlus.InfixOperator.«/\ » x_1) = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc (SurfaceTLAPlus.InfixOperator.«\/ » x_1) = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«\cdot» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«@@» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc (SurfaceTLAPlus.InfixOperator.«\cap » x_1) = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc (SurfaceTLAPlus.InfixOperator.«\cup » x_1) = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«##» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«$» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«$$» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«??» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«\sqcap» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«\sqcup» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«\uplus» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc (SurfaceTLAPlus.InfixOperator.«(+) » x_1) = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«+» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«++» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«%%» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«|» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«||» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc (SurfaceTLAPlus.InfixOperator.«(-) » x_1) = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«-» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«--» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«&» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«&&» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc (SurfaceTLAPlus.InfixOperator.«(.) » x_1) = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc (SurfaceTLAPlus.InfixOperator.«(\X) » x_1) = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«*» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«**» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«\bigcirc» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«\bullet» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc (SurfaceTLAPlus.InfixOperator.«\o » x_1) = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«\star» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc (SurfaceTLAPlus.InfixOperator.«\X » x_1) = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc SurfaceTLAPlus.InfixOperator.«.» = SurfaceTLAPlus.Parser.Associativity.left
- SurfaceTLAPlus.Parser.TLAPlus.InfixOperator.assoc x✝ = SurfaceTLAPlus.Parser.Associativity.none
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
A modified Shunting Yard algorithm: also handles prefix/postfix operators and conflicts between precedence ranges.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Parse a full module.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Parse a full module, always pairing any collected ParserWarnings with the result —
whether or not parsing itself succeeded, so a warning emitted before a fatal parse error still
reaches the caller. A DiagT in all but name (Id base), ascribed that way so
Driver/Modules.lean can absorb it directly via DiagT.lift.
.reverse because ParserWarningM accumulates by prepending (Parser_/Common.lean,
modify (w :: ·) — O(1) per warning, unlike appending), so its list is newest-first. Every
other pass reports through DiagT, whose bind appends, so warnings elsewhere come out in
source order; reversing here is what puts the parser's on that same footing.
Equations
- One or more equations did not get rendered due to their size.