// to end of line; discarded before token stream construction
—
Significant indentation
Spaces only (no tabs). Indentation deeper than the current block margin opens a block or continues an expression; returning to an outer column closes open blocks
E1011: tab in indentation E1004 / E2017: dedent to unaligned column
Inline-started blocks
Any block or branch body (|, !|, [guard], =>, !=>, @, @@, >--) is a block whether its first statement starts on the next line or on the same line as the opener (| first_line followed by subsequent statements at +2 spaces; fn = a, b => first_line or [Guard] first_line followed by subsequent statements at +3 spaces)
—
Line continuation
Lines inside (...), [...], {...}, or <...>, or following a trailing binary/continuation operator (indented +2 spaces), continue the current expression without emitting statement breaks
—
Multiline column alignment
Aligned items in multiline #type record/enum blocks are separated by newlines; multiple items on a single line require commas
E2015: missing comma on same line
Same-line sequence (;)
a; b sequences statements on a single line (LBP 20, RBP 30) and yields the last expression’s value
—
3.2 Identifiers, primes, and directives
Edva has no reserved keywords. Identifiers, types, and directives are distinguished by lexical form:
Category
Lexical Form
Rules & Semantics
Diagnostic
Value / function identifier
[a-z_][a-zA-Z0-9_]*
Lowercase or _-prefixed ASCII/Unicode name
—
Primed identifier
name', name'', …
Declares a mutable/rebindable variable or stepped SSA version (x' = x + 1). Once primed, reassignments may write x' = v or x = v