PseudoScript
Module

syntax

data

Assign #

public
syntax::Assign
Entities Entity diagram scroll to zoom · drag to pan
RECORDAssignnamestringvaluesyntax::ExprRECORDExprkindsyntax::ExprKindspansyntax::Span
data

BinOp #

public
syntax::BinOp

A binary operator (§7.5): arithmetic, comparison, equality, and boolean.

Entities Entity diagram scroll to zoom · drag to pan
UNIONBinOpAddSubMulDivRemEqNeLtGtLeGeAndOr
data

Binary #

public
syntax::Binary
Entities Entity diagram scroll to zoom · drag to pan
RECORDBinaryleftsyntax::Expropsyntax::BinOpopSpansyntax::Spanrightsyntax::ExprRECORDExprkindsyntax::ExprKindspansyntax::SpanUNIONBinOpAddSubMulDivRemEqNeLtGtLeGeAndOrRECORDSpanstartnumberendnumber
data

BlankLines #

public
syntax::BlankLines
Entities Entity diagram scroll to zoom · drag to pan
RECORDBlankLinescountnumber
data

Block #

public
syntax::Block

A `{ ... }` statement block (§7): statements in order, plus the brace span.

Entities Entity diagram scroll to zoom · drag to pan
RECORDBlockstmtssyntax::Stmt[]spansyntax::SpanRECORDStmtkindsyntax::StmtKindleadingTriviasyntax::SpannedTrivia[]spansyntax::SpanRECORDSpanstartnumberendnumber
data

BlockComment #

public
syntax::BlockComment
Entities Entity diagram scroll to zoom · drag to pan
RECORDBlockCommenttextstring
data

BodyMember #

public
syntax::BodyMember

A member of a disclosed node body: a callable, or — under error recovery — a nested structural declaration the parser flags as illegal (ADR-011).

Entities Entity diagram scroll to zoom · drag to pan
UNIONBodyMemberCallableMemberDeclMemberRECORDCallableMembercallablesyntax::CallableDeclRECORDDeclMemberdeclsyntax::Declaration
data

BoolLit #

public
syntax::BoolLit
Entities Entity diagram scroll to zoom · drag to pan
RECORDBoolLitvalueboolspansyntax::SpanRECORDSpanstartnumberendnumber
data

CallableDecl #

public
syntax::CallableDecl

A callable (implicit operation) declared inside a disclosed node (§5.1). `returnTy` is required (ADR-040) — a missing return type is a syntax error, recovered as `void`; `body` absent means a black box (`;`).

Entities Entity diagram scroll to zoom · drag to pan
RECORDCallableDecldocsyntax::DocBlockmacrossyntax::Macro[]isPublicboolnamestringparamssyntax::Param[]returnTysyntax::Typebodysyntax::BlockleadingTriviasyntax::SpannedTrivia[]spansyntax::SpanRECORDDocBlocksummarystring[]extendedstring[]tagssyntax::Tag[]RECORDMacronamesyntax::Pathargssyntax::MacroArgsspansyntax::SpanRECORDParamnamestringtysyntax::Typespansyntax::SpanRECORDTypenamesyntax::Pathgenericssyntax::Type[]isArrayboolspansyntax::SpanRECORDBlockstmtssyntax::Stmt[]spansyntax::SpanRECORDSpannedTriviatriviasyntax::Triviaspansyntax::SpanRECORDSpanstartnumberendnumber
data

CallableMember #

public
syntax::CallableMember
Entities Entity diagram scroll to zoom · drag to pan
RECORDCallableMembercallablesyntax::CallableDeclRECORDCallableDecldocsyntax::DocBlockmacrossyntax::Macro[]isPublicboolnamestringparamssyntax::Param[]returnTysyntax::Typebodysyntax::BlockleadingTriviasyntax::SpannedTrivia[]spansyntax::Span
data

Compose #

public
syntax::Compose
Entities Entity diagram scroll to zoom · drag to pan
RECORDComposesourcessyntax::Expr[]RECORDExprkindsyntax::ExprKindspansyntax::Span
data

Constant #

public
syntax::Constant
Entities Entity diagram scroll to zoom · drag to pan
RECORDConstantdeclsyntax::ConstantDeclRECORDConstantDeclnamestringvaluesyntax::Literalspansyntax::Span
data

ConstantDecl #

public
syntax::ConstantDecl

A `constant NAME = Literal` declaration (§3.6, ADR-039): a top-level primitive value. `public` lives on the enclosing `Declaration`, mirroring `data`.

Entities Entity diagram scroll to zoom · drag to pan
RECORDConstantDeclnamestringvaluesyntax::Literalspansyntax::SpanUNIONLiteralStringLitNumberLitBoolLitRECORDSpanstartnumberendnumber
data

Convert #

public
syntax::Convert
Entities Entity diagram scroll to zoom · drag to pan
RECORDConvertvaluesyntax::ExprRECORDExprkindsyntax::ExprKindspansyntax::Span
data

Data #

public
syntax::Data
Entities Entity diagram scroll to zoom · drag to pan
RECORDDatadeclsyntax::DataDeclRECORDDataDeclnamestringbodysyntax::DataBodyspansyntax::Span
data

DataBody #

public
syntax::DataBody

The three `data` forms. A bare `| Name` variant is an enum case; a `| Name { .. }` variant carries an inline record (§3.5, ADR-006).

Entities Entity diagram scroll to zoom · drag to pan
UNIONDataBodyRecordUnionBlackBoxRECORDRecordfieldssyntax::Field[]RECORDUnionvariantssyntax::Variant[]
data

DataDecl #

public
syntax::DataDecl

A `data` declaration: a record, a union, or a black box (§3.4, §3.5).

Entities Entity diagram scroll to zoom · drag to pan
RECORDDataDeclnamestringbodysyntax::DataBodyspansyntax::SpanUNIONDataBodyRecordUnionBlackBoxRECORDSpanstartnumberendnumber
data

DeclItem #

public
syntax::DeclItem
Entities Entity diagram scroll to zoom · drag to pan
RECORDDeclItemdeclsyntax::DeclarationRECORDDeclarationdocsyntax::DocBlockmacrossyntax::Macro[]isPublicboolkindsyntax::DeclKindleadingTriviasyntax::SpannedTrivia[]spansyntax::Span
data

DeclKind #

public
syntax::DeclKind

The structural payload of a declaration: a node (person/system/container/ component), a `data` type, or a top-level `constant` (§3.6, ADR-039).

Entities Entity diagram scroll to zoom · drag to pan
UNIONDeclKindNodeDataConstantRECORDNodenodesyntax::NodeDeclRECORDDatadeclsyntax::DataDeclRECORDConstantdeclsyntax::ConstantDecl
data

DeclMember #

public
syntax::DeclMember
Entities Entity diagram scroll to zoom · drag to pan
RECORDDeclMemberdeclsyntax::DeclarationRECORDDeclarationdocsyntax::DocBlockmacrossyntax::Macro[]isPublicboolkindsyntax::DeclKindleadingTriviasyntax::SpannedTrivia[]spansyntax::Span
data

Declaration #

public
syntax::Declaration

A documented, annotated structural declaration (§4): the shared `doc → macros → public` prefix plus the structural payload.

Entities Entity diagram scroll to zoom · drag to pan
RECORDDeclarationdocsyntax::DocBlockmacrossyntax::Macro[]isPublicboolkindsyntax::DeclKindleadingTriviasyntax::SpannedTrivia[]spansyntax::SpanRECORDDocBlocksummarystring[]extendedstring[]tagssyntax::Tag[]RECORDMacronamesyntax::Pathargssyntax::MacroArgsspansyntax::SpanUNIONDeclKindNodeDataConstantRECORDSpannedTriviatriviasyntax::Triviaspansyntax::SpanRECORDSpanstartnumberendnumber
data

Diagnostic #

public
syntax::Diagnostic

One message about a span of source. The single diagnostic type every crate emits, so a driver collects lexer, parser, and checker output into one ordered list. `code` is an optional stable identifier (e.g. `E0001`) for tooling; the human-facing text is `message`. `codeDescription` is an optional URL the code resolves to — an article explaining the rule — which the LSP surfaces as the diagnostic's clickable link. Empty when the code carries no article.

Entities Entity diagram scroll to zoom · drag to pan
RECORDDiagnosticseveritysyntax::Severityspansyntax::SpancodestringcodeDescriptionstringmessagestringUNIONSeverityErrorWarningInfoRECORDSpanstartnumberendnumber
data

DocBlock #

public
syntax::DocBlock

A `///` doc block split into summary and extended on the first blank `///` line (ADR-009): summary feeds compact diagrams, extended feeds tooltips, tags carry the ` ` markers.

#name
Entities Entity diagram scroll to zoom · drag to pan
RECORDDocBlocksummarystring[]extendedstring[]tagssyntax::Tag[]RECORDTagtextstringspansyntax::Span
data

Expr #

public
syntax::Expr

An expression (§7, §10): its form and source span.

Entities Entity diagram scroll to zoom · drag to pan
RECORDExprkindsyntax::ExprKindspansyntax::SpanUNIONExprKindMarkerFromPostfixRefLitUnaryBinaryParenRECORDSpanstartnumberendnumber
data

ExprKind #

public
syntax::ExprKind

The expression forms (§10). `Marker` is a built-in generic constructor — `Ok`/`Err` (`Result`) or `Some`/`None` (`Option`); `From` names a target type and its `source`, whose `FromSource` form is the §7.2 vs §7.4 split; `Postfix` is a `.name`/`.name(..)` access chain (ADR-007); `Unary`/`Binary` are the §7.5 operator forms. A `Marker` or `From` head is never a binary operand (§7.5).

Entities Entity diagram scroll to zoom · drag to pan
UNIONExprKindMarkerFromPostfixRefLitUnaryBinaryParenRECORDMarkerkindsyntax::MarkerKindpayloadsyntax::ExprRECORDFromtysyntax::Typesourcesyntax::FromSourceRECORDPostfixbasesyntax::Exprsegmentssyntax::PostfixSeg[]RECORDReftargetsyntax::ReferenceRECORDLitvaluesyntax::LiteralRECORDUnaryopsyntax::UnaryOpopSpansyntax::Spanexprsyntax::ExprRECORDBinaryleftsyntax::Expropsyntax::BinOpopSpansyntax::Spanrightsyntax::ExprRECORDPareninnersyntax::Expr
data

ExprStmt #

public
syntax::ExprStmt
Entities Entity diagram scroll to zoom · drag to pan
RECORDExprStmtexprsyntax::ExprRECORDExprkindsyntax::ExprKindspansyntax::Span
data

FeatureDecl #

public
syntax::FeatureDecl

A `feature Name for Path { given* when+ then+ }` BDD scenario (§5.2). Steps are prose, not resolved against the model; the strict given→when→then order is enforced by the parser. A feature takes no macros and no `public`.

Entities Entity diagram scroll to zoom · drag to pan
RECORDFeatureDecldocsyntax::DocBlocknamestringtargetsyntax::Pathstepssyntax::FeatureStep[]leadingTriviasyntax::SpannedTrivia[]spansyntax::SpanRECORDDocBlocksummarystring[]extendedstring[]tagssyntax::Tag[]RECORDPathsegmentsstring[]spansyntax::SpanRECORDFeatureStepkindsyntax::StepKindtextstringspansyntax::SpanRECORDSpannedTriviatriviasyntax::Triviaspansyntax::SpanRECORDSpanstartnumberendnumber
data

FeatureItem #

public
syntax::FeatureItem
Entities Entity diagram scroll to zoom · drag to pan
RECORDFeatureItemdeclsyntax::FeatureDeclRECORDFeatureDecldocsyntax::DocBlocknamestringtargetsyntax::Pathstepssyntax::FeatureStep[]leadingTriviasyntax::SpannedTrivia[]spansyntax::Span
data

FeatureStep #

public
syntax::FeatureStep

One step line in a feature flow: a step keyword and its prose string (§5.2).

Entities Entity diagram scroll to zoom · drag to pan
RECORDFeatureStepkindsyntax::StepKindtextstringspansyntax::SpanUNIONStepKindGivenWhenThenAndButRECORDSpanstartnumberendnumber
data

Field #

public
syntax::Field

A record field `name: Type`.

Entities Entity diagram scroll to zoom · drag to pan
RECORDFieldnamestringtysyntax::Typespansyntax::SpanRECORDTypenamesyntax::Pathgenericssyntax::Type[]isArrayboolspansyntax::SpanRECORDSpanstartnumberendnumber
data

For #

public
syntax::For
Entities Entity diagram scroll to zoom · drag to pan
RECORDForbindingstringitersyntax::Exprbodysyntax::BlockRECORDExprkindsyntax::ExprKindspansyntax::SpanRECORDBlockstmtssyntax::Stmt[]spansyntax::Span
data

From #

public
syntax::From
Entities Entity diagram scroll to zoom · drag to pan
RECORDFromtysyntax::Typesourcesyntax::FromSourceRECORDTypenamesyntax::Pathgenericssyntax::Type[]isArrayboolspansyntax::SpanUNIONFromSourceComposeConvert
data

FromSource #

public
syntax::FromSource

The source of a `from` expression (§7.2, §7.4, ADR-035) — the parser branches on the leading token, so the two forms are distinct: a `{` opens `Compose`, a set the target `data` record/variant is built from; anything else is `Convert`, carrying the target type onto one value.

Entities Entity diagram scroll to zoom · drag to pan
UNIONFromSourceComposeConvertRECORDComposesourcessyntax::Expr[]RECORDConvertvaluesyntax::Expr
data

If #

public
syntax::If
Entities Entity diagram scroll to zoom · drag to pan
RECORDIfcondsyntax::ExprthenBlocksyntax::BlockelseBlocksyntax::BlockRECORDExprkindsyntax::ExprKindspansyntax::SpanRECORDBlockstmtssyntax::Stmt[]spansyntax::Span
data

InnerDoc #

public
syntax::InnerDoc

One `//!` inner-doc line documenting the module (§2.1).

Entities Entity diagram scroll to zoom · drag to pan
RECORDInnerDoctextstringspansyntax::SpanRECORDSpanstartnumberendnumber
data

Item #

public
syntax::Item

A top-level item: a documented structural declaration, or a `feature` BDD scenario.

Entities Entity diagram scroll to zoom · drag to pan
UNIONItemDeclItemFeatureItemRECORDDeclItemdeclsyntax::DeclarationRECORDFeatureItemdeclsyntax::FeatureDecl
data

Lexed #

public
syntax::Lexed

The full result of lexing: the conformance token stream plus interleaved trivia for the formatter.

Inbound

Entities Entity diagram scroll to zoom · drag to pan
RECORDLexedtokenssyntax::Token[]triviasyntax::SpannedTrivia[]RECORDTokenkindsyntax::TokenKindspansyntax::SpantextstringRECORDSpannedTriviatriviasyntax::Triviaspansyntax::Span
component

Lexer #

private
syntax::Lexer

Hand-written lexer for LANG.md §2. One pass yields the conformance token stream (comments discarded, `///`→`Doc`+`Tag`, `//!`→`InnerDoc`) and full-fidelity trivia for the formatter. Infallible: lexical anomalies surface as parser diagnostics, never a failed lex.

#critical

Parent

Inbound

Outbound

Scenarios

LexerNeverStalls

The lexer is greedy and never stalls on bad input.

  • given source containing an unknown byte or an unterminated string
  • when the lexer scans it
  • then the offending bytes are skipped or the string is closed at end of line
  • and lexing reaches the end of input
Flow Flow — LexerNeverStalls scroll to zoom · drag to pan
FEATURELexerNeverStallsfor LexerGIVENsource containing an unknown byte oran unterminated stringWHENthe lexer scans itTHENthe offending bytes are skipped or thestring is closed at end of lineANDlexing reaches the end of input
GreedyKeywordMatch

The longest identifier wins, then a keyword lookup classifies it.

  • given an identifier-start byte
  • when the lexer consumes the run of identifier bytes
  • then a reserved spelling lexes as its keyword kind
  • but a primitive name or `Result` stays an identifier, classified later
Flow Flow — GreedyKeywordMatch scroll to zoom · drag to pan
FEATUREGreedyKeywordMatchfor LexerGIVENan identifier-start byteWHENthe lexer consumes the run ofidentifier bytesTHENa reserved spelling lexes as itskeyword kindBUTa primitive name or `Result` stays anidentifier, classified later
DocCommentDisambiguation

A leading `/` resolves to a comment, doc, or inner doc by its run length.

  • given a line beginning with two or more slashes
  • when the lexer reads the marker
  • then `//!` becomes an inner-doc token
  • and `///` becomes a doc line of prose and tag tokens
  • but plain `//` is discarded as line-comment trivia
Flow Flow — DocCommentDisambiguation scroll to zoom · drag to pan
FEATUREDocCommentDisambiguationfor LexerGIVENa line beginning with two or moreslashesWHENthe lexer reads the markerTHEN`//!` becomes an inner-doc tokenAND`///` becomes a doc line of prose andtag tokensBUTplain `//` is discarded asline-comment trivia
HashDisambiguation

On a `///` line, ` ` is a tag while `#[` is a macro.

#name
  • given a `#` in the source
  • when the lexer classifies it
  • then `#name` on a doc line becomes a tag token including the `#`
  • and `#[` becomes a macro-open token
  • but a bare `#` in ordinary prose is skipped, with no grammar role
Flow Flow — HashDisambiguation scroll to zoom · drag to pan
FEATUREHashDisambiguationfor LexerGIVENa `#` in the sourceWHENthe lexer classifies itTHEN`#name` on a doc line becomes a tagtoken including the `#`AND`#[` becomes a macro-open tokenBUTa bare `#` in ordinary prose isskipped, with no grammar role
TriviaPreservedForFormatter

Comments and blank-line runs are preserved for the formatter.

  • given source interleaving tokens with comments and blank lines
  • when the lexer runs
  • then the token stream carries no comment trivia
  • and comments and blank-line runs are returned alongside as spanned trivia
Flow Flow — TriviaPreservedForFormatter scroll to zoom · drag to pan
FEATURETriviaPreservedForFormatterfor LexerGIVENsource interleaving tokens withcomments and blank linesWHENthe lexer runsTHENthe token stream carries no commenttriviaANDcomments and blank-line runs arereturned alongside as spanned trivia
ConformanceTokenRendering

Token rendering matches the conformance golden form.

  • given a source string
  • when its tokens are rendered
  • then each token prints as `KIND@line:col \"lexeme\"` on its own line
  • and interior backslashes and quotes in the lexeme are escaped
Flow Flow — ConformanceTokenRendering scroll to zoom · drag to pan
FEATUREConformanceTokenRenderingfor LexerGIVENa source stringWHENits tokens are renderedTHENeach token prints as `KIND@line:col\"lexeme\"` on its own lineANDinterior backslashes and quotes in thelexeme are escaped
data

LineComment #

public
syntax::LineComment
Entities Entity diagram scroll to zoom · drag to pan
RECORDLineCommenttextstring
component

LineIndex #

public
syntax::LineIndex

Precomputed newline offsets turning a byte offset into a 1-based (line, col) pair in O(log n). Built once per source and reused for every lookup; column counts bytes from the line start.

Parent

Inbound

Scenarios

OffsetToLineColumn

A byte offset maps to a 1-based line and column.

  • given a line index built over a source string
  • when a byte offset is looked up
  • then the 1-based line and byte column are returned
  • but an offset past the end clamps to the end of the source
Flow Flow — OffsetToLineColumn scroll to zoom · drag to pan
FEATUREOffsetToLineColumnfor LineIndexGIVENa line index built over a sourcestringWHENa byte offset is looked upTHENthe 1-based line and byte column arereturnedBUTan offset past the end clamps to theend of the source
data

List #

public
syntax::List
Entities Entity diagram scroll to zoom · drag to pan
RECORDListargssyntax::MacroArg[]UNIONMacroArgLiteralArgPathArgNestedArg
data

Lit #

public
syntax::Lit
Entities Entity diagram scroll to zoom · drag to pan
RECORDLitvaluesyntax::LiteralUNIONLiteralStringLitNumberLitBoolLit
data

Literal #

public
syntax::Literal

A literal value (ADR-013). `raw` carries the source text (string literals keep their quotes).

Entities Entity diagram scroll to zoom · drag to pan
UNIONLiteralStringLitNumberLitBoolLitRECORDStringLitrawstringspansyntax::SpanRECORDNumberLitrawstringspansyntax::SpanRECORDBoolLitvalueboolspansyntax::Span
data

LiteralArg #

public
syntax::LiteralArg
Entities Entity diagram scroll to zoom · drag to pan
RECORDLiteralArgvaluesyntax::LiteralUNIONLiteralStringLitNumberLitBoolLit
data

Macro #

public
syntax::Macro

A `#[..]` macro (outer attribute) on a callable (§2.4): its name path and argument form.

Entities Entity diagram scroll to zoom · drag to pan
RECORDMacronamesyntax::Pathargssyntax::MacroArgsspansyntax::SpanRECORDPathsegmentsstring[]spansyntax::SpanUNIONMacroArgsWordListNameValueRECORDSpanstartnumberendnumber
data

MacroArg #

public
syntax::MacroArg

One argument inside a macro's `( .. )` list (§10 `MetaArg`).

Entities Entity diagram scroll to zoom · drag to pan
UNIONMacroArgLiteralArgPathArgNestedArgRECORDLiteralArgvaluesyntax::LiteralRECORDPathArgpathsyntax::PathRECORDNestedArgmacrosyntax::Macro
data

MacroArgs #

public
syntax::MacroArgs

The three macro argument forms (§2.4): `#[manual]` word, `#[onevent(Path)]`/ `#[http("..")]` list, `#[schedule = "..]` name=value.

Entities Entity diagram scroll to zoom · drag to pan
UNIONMacroArgsWordListNameValueRECORDListargssyntax::MacroArg[]RECORDNameValuevaluesyntax::Literal
data

Marker #

public
syntax::Marker
Entities Entity diagram scroll to zoom · drag to pan
RECORDMarkerkindsyntax::MarkerKindpayloadsyntax::ExprUNIONMarkerKindKwOkKwErrKwSomeKwNoneRECORDExprkindsyntax::ExprKindspansyntax::Span
data

MarkerKind #

public
syntax::MarkerKind

The built-in generic constructor a `Marker` names (§6, ADR-019). The variants mirror the four marker keywords (their names carry the `Kw` prefix because `Ok`/`Err`/`Some`/`None` are reserved words): `KwOk`/`KwErr` build a `Result`, `KwSome`/`KwNone` build an `Option`.

Entities Entity diagram scroll to zoom · drag to pan
UNIONMarkerKindKwOkKwErrKwSomeKwNone
data

Module #

public
syntax::Module

The typed syntax tree of one module (LANG.md §10): module-level inner docs, then declarations and features in source order. Every node carries a `Span`; declarations and statements also carry leading trivia so the formatter can reproduce layout.

Inbound

Entities Entity diagram scroll to zoom · drag to pan
RECORDModuleinnerDocssyntax::InnerDoc[]itemssyntax::Item[]spansyntax::SpanRECORDInnerDoctextstringspansyntax::SpanUNIONItemDeclItemFeatureItemRECORDSpanstartnumberendnumber
data

NameValue #

public
syntax::NameValue
Entities Entity diagram scroll to zoom · drag to pan
RECORDNameValuevaluesyntax::LiteralUNIONLiteralStringLitNumberLitBoolLit
data

NestedArg #

public
syntax::NestedArg
Entities Entity diagram scroll to zoom · drag to pan
RECORDNestedArgmacrosyntax::MacroRECORDMacronamesyntax::Pathargssyntax::MacroArgsspansyntax::Span
data

Node #

public
syntax::Node
Entities Entity diagram scroll to zoom · drag to pan
RECORDNodenodesyntax::NodeDeclRECORDNodeDeclkindsyntax::NodeKindnamestringparentsyntax::Pathbodysyntax::BodyMember[]spansyntax::Span
data

NodeDecl #

public
syntax::NodeDecl

A `person` / `system` / `container` / `component` declaration. `parent` is the `for <Parent>` path, present for container/component. `body` is the disclosed member list, or absent for a black box (`;`).

Entities Entity diagram scroll to zoom · drag to pan
RECORDNodeDeclkindsyntax::NodeKindnamestringparentsyntax::Pathbodysyntax::BodyMember[]spansyntax::SpanUNIONNodeKindPersonSystemContainerComponentRECORDPathsegmentsstring[]spansyntax::SpanUNIONBodyMemberCallableMemberDeclMemberRECORDSpanstartnumberendnumber
data

NodeKind #

public
syntax::NodeKind

The structural keyword class of a node.

Entities Entity diagram scroll to zoom · drag to pan
UNIONNodeKindPersonSystemContainerComponentRECORDContainerofstringRECORDComponentofstring
data

NumberLit #

public
syntax::NumberLit
Entities Entity diagram scroll to zoom · drag to pan
RECORDNumberLitrawstringspansyntax::SpanRECORDSpanstartnumberendnumber
data

Param #

public
syntax::Param

A callable parameter `name: Type`.

Entities Entity diagram scroll to zoom · drag to pan
RECORDParamnamestringtysyntax::Typespansyntax::SpanRECORDTypenamesyntax::Pathgenericssyntax::Type[]isArrayboolspansyntax::SpanRECORDSpanstartnumberendnumber
data

Paren #

public
syntax::Paren
Entities Entity diagram scroll to zoom · drag to pan
RECORDPareninnersyntax::ExprRECORDExprkindsyntax::ExprKindspansyntax::Span
data

Parsed #

public
syntax::Parsed

Parser output: the tree (always present, recovered on error) plus the diagnostics collected while parsing. Parsing never fails outright.

Entities Entity diagram scroll to zoom · drag to pan
RECORDParsedastsyntax::Modulediagnosticssyntax::Diagnostic[]RECORDModuleinnerDocssyntax::InnerDoc[]itemssyntax::Item[]spansyntax::SpanRECORDDiagnosticseveritysyntax::Severityspansyntax::SpancodestringcodeDescriptionstringmessagestring
component

Parser #

private
syntax::Parser

Recursive-descent parser for the §10 grammar with error recovery: on unexpected input it records a `Diagnostic`, resynchronises to the next statement/declaration boundary, and continues. Always yields a (possibly partial) `Module`; never panics.

#critical

Parent

Inbound

Outbound

Scenarios

ParsingIsInfallible

Parsing always yields a tree, even on malformed input.

#critical
  • given source text that may contain syntax errors
  • when the parser runs
  • then a syntax tree is returned, recovered around the errors
  • and each error rides alongside as a diagnostic
  • but parsing never throws or aborts
Flow Flow — ParsingIsInfallible scroll to zoom · drag to pan
FEATUREParsingIsInfalliblefor ParserGIVENsource text that may contain syntaxerrorsWHENthe parser runsTHENa syntax tree is returned, recoveredaround the errorsANDeach error rides alongside as adiagnosticBUTparsing never throws or aborts
StrayTokenTerminates

A stray `;` in statement position never spins the block loop (regression).

  • given a callable body with a stray `;` in statement position
  • when the block is parsed
  • then the stray token is reported as a diagnostic
  • and the forward-progress guard advances past it
  • but the surrounding callable still parses
Flow Flow — StrayTokenTerminates scroll to zoom · drag to pan
FEATUREStrayTokenTerminatesfor ParserGIVENa callable body with a stray `;` instatement positionWHENthe block is parsedTHENthe stray token is reported as adiagnosticANDthe forward-progress guard advancespast itBUTthe surrounding callable still parses
MarkerAndFromAreNotOperands

A marker or `from` expression never combines with a binary operator (§7.5).

  • given an expression whose head is a marker or a `Type from ..`
  • when a binary operator follows the head
  • then the operator is reported as a diagnostic
  • and the head expression still parses, with its postfix chain
  • but the operator is left unconsumed for the enclosing context to resync on
Flow Flow — MarkerAndFromAreNotOperands scroll to zoom · drag to pan
FEATUREMarkerAndFromAreNotOperandsfor ParserGIVENan expression whose head is a markeror a `Type from ..`WHENa binary operator follows the headTHENthe operator is reported as adiagnosticANDthe head expression still parses, withits postfix chainBUTthe operator is left unconsumed forthe enclosing context to resync on
DocSummaryBodySplit

A blank `///` line splits the doc block into summary and extended.

  • given a doc block whose lines are separated by one blank `///` line
  • when the doc block is parsed
  • then lines before the blank become the summary
  • and lines after it become the extended description
  • and tags are gathered regardless of which side they sit on
Flow Flow — DocSummaryBodySplit scroll to zoom · drag to pan
FEATUREDocSummaryBodySplitfor ParserGIVENa doc block whose lines are separatedby one blank `///` lineWHENthe doc block is parsedTHENlines before the blank become thesummaryANDlines after it become the extendeddescriptionANDtags are gathered regardless of whichside they sit on
data

Path #

public
syntax::Path

A `::`-separated path of identifiers (§2.2, §10 `Path`); never empty.

Entities Entity diagram scroll to zoom · drag to pan
RECORDPathsegmentsstring[]spansyntax::SpanRECORDSpanstartnumberendnumber
data

PathArg #

public
syntax::PathArg
Entities Entity diagram scroll to zoom · drag to pan
RECORDPathArgpathsyntax::PathRECORDPathsegmentsstring[]spansyntax::Span
data

PathRef #

public
syntax::PathRef
Entities Entity diagram scroll to zoom · drag to pan
RECORDPathRefpathsyntax::PathRECORDPathsegmentsstring[]spansyntax::Span
data

Postfix #

public
syntax::Postfix
Entities Entity diagram scroll to zoom · drag to pan
RECORDPostfixbasesyntax::Exprsegmentssyntax::PostfixSeg[]RECORDExprkindsyntax::ExprKindspansyntax::SpanRECORDPostfixSegnamestringcallArgssyntax::Expr[]spansyntax::Span
data

PostfixSeg #

public
syntax::PostfixSeg

One `.name` or `.name(args)` step in a postfix chain (ADR-007). `callArgs` present marks a call; absent marks field access.

Entities Entity diagram scroll to zoom · drag to pan
RECORDPostfixSegnamestringcallArgssyntax::Expr[]spansyntax::SpanRECORDExprkindsyntax::ExprKindspansyntax::SpanRECORDSpanstartnumberendnumber
data

Record #

public
syntax::Record
Entities Entity diagram scroll to zoom · drag to pan
RECORDRecordfieldssyntax::Field[]RECORDFieldnamestringtysyntax::Typespansyntax::Span
data

Ref #

public
syntax::Ref
Entities Entity diagram scroll to zoom · drag to pan
RECORDReftargetsyntax::ReferenceUNIONReferenceSelfNodePathRef
data

Reference #

public
syntax::Reference

A reference primary (§10 `Ref`): `self` or an FQN.

Entities Entity diagram scroll to zoom · drag to pan
UNIONReferenceSelfNodePathRefRECORDSelfNodespansyntax::SpanRECORDPathRefpathsyntax::Path
data

Return #

public
syntax::Return
Entities Entity diagram scroll to zoom · drag to pan
RECORDReturnvaluesyntax::ExprRECORDExprkindsyntax::ExprKindspansyntax::Span
data

SelfNode #

public
syntax::SelfNode
Entities Entity diagram scroll to zoom · drag to pan
RECORDSelfNodespansyntax::SpanRECORDSpanstartnumberendnumber
data

Severity #

public
syntax::Severity

Diagnostic severity. `Error` invalidates the input; `Warning`/`Info` advise and never block compilation.

Entities Entity diagram scroll to zoom · drag to pan
UNIONSeverityErrorWarningInfo
data

Span #

public
syntax::Span

A half-open byte range `[start, end)` into one module's source. Offsets are bytes, not characters; columns derived via `LineIndex` count bytes too, matching the conformance token goldens.

Entities Entity diagram scroll to zoom · drag to pan
RECORDSpanstartnumberendnumber
data

SpannedTrivia #

public
syntax::SpannedTrivia

A trivia element paired with the source span it occupies.

Entities Entity diagram scroll to zoom · drag to pan
RECORDSpannedTriviatriviasyntax::Triviaspansyntax::SpanUNIONTriviaLineCommentBlockCommentBlankLinesRECORDSpanstartnumberendnumber
data

StepKind #

public
syntax::StepKind

The step keyword class of a feature step (§5.2). `And`/`But` continue the preceding step's flow phase.

Entities Entity diagram scroll to zoom · drag to pan
UNIONStepKindGivenWhenThenAndBut
data

Stmt #

public
syntax::Stmt

A statement valid inside a callable body (§7), with the leading trivia that preceded it.

Entities Entity diagram scroll to zoom · drag to pan
RECORDStmtkindsyntax::StmtKindleadingTriviasyntax::SpannedTrivia[]spansyntax::SpanUNIONStmtKindAssignReturnIfForWhileExprStmtRECORDSpannedTriviatriviasyntax::Triviaspansyntax::SpanRECORDSpanstartnumberendnumber
data

StmtKind #

public
syntax::StmtKind

The statement forms (§7).

Entities Entity diagram scroll to zoom · drag to pan
UNIONStmtKindAssignReturnIfForWhileExprStmtRECORDAssignnamestringvaluesyntax::ExprRECORDReturnvaluesyntax::ExprRECORDIfcondsyntax::ExprthenBlocksyntax::BlockelseBlocksyntax::BlockRECORDForbindingstringitersyntax::Exprbodysyntax::BlockRECORDWhilecondsyntax::Exprbodysyntax::BlockRECORDExprStmtexprsyntax::Expr
data

StringLit #

public
syntax::StringLit
Entities Entity diagram scroll to zoom · drag to pan
RECORDStringLitrawstringspansyntax::SpanRECORDSpanstartnumberendnumber
container

Syntax #

public
syntax::Syntax

`crates/pseudoscript-syntax`. The foundation crate: source text to tokens and a typed AST, emitting the shared `Diagnostic`. WASM-safe and I/O-free.

#critical

Inbound

Outbound

  • from cli::string
  • from format::Parsed
  • from model::Parsed
  • call syntax::Lexer · renderTokens
  • call syntax::Parser · parse
Components Component diagram scroll to zoom · drag to pan
PseudoscriptSyntaxCOMPONENTLexerHand-written lexer for LANG.md §2. One passyields the conformance token stream…COMPONENTLineIndexPrecomputed newline offsets turning a byteoffset into a 1-based (line, col) pair in…COMPONENTParserRecursive-descent parser for the §10 grammarwith error recovery: on unexpected input it…CONTAINERCli`crates/pseudoscript` — the binary crate(`pds`). The composition root and only I/O…CONTAINERFormat`crates/pseudoscript-format`. The canonicalformatter: parse, then pretty-print the tre…CONTAINERModel`crates/pseudoscript-model`. AST to oneresolved graph; static checks (resolution,…formatcheckcheckWorkspacecheckWorkspaceModulesgraphbuildlex
data

Tag #

public
syntax::Tag

A ` ` tag from a doc block, including the leading `#` (§2.4).

#name
Entities Entity diagram scroll to zoom · drag to pan
RECORDTagtextstringspansyntax::SpanRECORDSpanstartnumberendnumber
data

Token #

public
syntax::Token

A lexical token: its kind, source span, and rendered lexeme (LANG.md §2).

For most tokens `text` is the raw source slice. For `Doc`/`InnerDoc` it is the doc text with the marker and surrounding whitespace stripped; for `Tag` it includes the leading `#`.

Inbound

Entities Entity diagram scroll to zoom · drag to pan
RECORDTokenkindsyntax::TokenKindspansyntax::SpantextstringUNIONTokenKindKeywordIdentPunctuationStringLiteralNumberLiteralDocInnerDocTagHashLBracketRECORDSpanstartnumberendnumber
data

TokenKind #

public
syntax::TokenKind

Every lexical token class (LANG.md §2). The `name` rendering (e.g. `KW_SYSTEM`) is the conformance golden's `KIND`. Primitive type names and `Result` are NOT keywords — they lex as `Ident` and are classified in type position by the model crate.

Entities Entity diagram scroll to zoom · drag to pan
UNIONTokenKindKeywordIdentPunctuationStringLiteralNumberLiteralDocInnerDocTagHashLBracketRECORDInnerDoctextstringspansyntax::SpanRECORDTagtextstringspansyntax::Span
data

Trivia #

public
syntax::Trivia

Non-token source between tokens, preserved for the formatter. Doc comments, tags, macros, and modifiers are first-class tokens/AST data, not trivia — only discarded comments and blank-line gaps live here.

Entities Entity diagram scroll to zoom · drag to pan
UNIONTriviaLineCommentBlockCommentBlankLinesRECORDLineCommenttextstringRECORDBlockCommenttextstringRECORDBlankLinescountnumber
data

Type #

public
syntax::Type

A type expression: a named base with optional generic arguments and an optional trailing `[]` array suffix (§3.3, ADR-008 — no optionality marker).

Entities Entity diagram scroll to zoom · drag to pan
RECORDTypenamesyntax::Pathgenericssyntax::Type[]isArrayboolspansyntax::SpanRECORDPathsegmentsstring[]spansyntax::SpanRECORDSpanstartnumberendnumber
data

Unary #

public
syntax::Unary
Entities Entity diagram scroll to zoom · drag to pan
RECORDUnaryopsyntax::UnaryOpopSpansyntax::Spanexprsyntax::ExprUNIONUnaryOpNotNegRECORDSpanstartnumberendnumberRECORDExprkindsyntax::ExprKindspansyntax::Span
data

UnaryOp #

public
syntax::UnaryOp

A unary operator (§7.5): boolean `!` or numeric `-`.

Entities Entity diagram scroll to zoom · drag to pan
UNIONUnaryOpNotNeg
data

Union #

public
syntax::Union
Entities Entity diagram scroll to zoom · drag to pan
RECORDUnionvariantssyntax::Variant[]RECORDVariantnamestringrecordsyntax::Field[]spansyntax::Span
data

Variant #

public
syntax::Variant

One union variant: its name and an optional inline record body.

Entities Entity diagram scroll to zoom · drag to pan
RECORDVariantnamestringrecordsyntax::Field[]spansyntax::SpanRECORDFieldnamestringtysyntax::Typespansyntax::SpanRECORDSpanstartnumberendnumber
data

While #

public
syntax::While
Entities Entity diagram scroll to zoom · drag to pan
RECORDWhilecondsyntax::Exprbodysyntax::BlockRECORDExprkindsyntax::ExprKindspansyntax::SpanRECORDBlockstmtssyntax::Stmt[]spansyntax::Span
Generated by pds doc.