CX · Reference guideCore syntax
PlaygroundDownloadsAboutv0.18.0-pre.1

Core syntax

The CX surface syntax — the data / document layer specified in lexicon.ebnf, grammar.ebnf, and code.md §3 / cxdm.md. Elements, attributes, scalars and type annotations, atoms, anchors / merges / ids, comments, raw and block content, entity references, namespaces, and table literals. Each example shows a source snippet and its cx fmt canonical render, pinned verbatim to the data conformance corpora.

element

[name attr=val CHILD…] — An element: a bracketed head name followed by optional attributes and a body of text, scalars, or nested elements.

Kind · structure

        [input type=text name=q]
      
        [input type=text name=q]
      

nested-elements

[parent [child …] …] — Elements nest as body children; whitespace between children is non-semantic and is normalised on render.

Kind · structure

        [config
  [db host=localhost port=5432]
  [server port=8080]
]
      
        [config
  [db host=localhost port=5432]
  [server port=8080]
]
      

mixed-content

[name TEXT [child] TEXT] — Mixed content interleaves bare text and child elements in one body; bare text runs render quoted.

Kind · structure

        [p text [b bold] more]
      
        [p 'text ' [b bold] ' more']
      

attribute

name=value — A scalar attribute on an element; the value auto-types (int, bool, atom, string) unless quoted.

Kind · attribute

        [socket port=8080 protocol=:tcp]
      
        [socket port=8080 protocol=:tcp]
      

boolean-scalar

[name true] / [name false] — Bare true/false in body position auto-type to booleans; quote them to keep a string.

Kind · scalar

        [active true]
      
        [active true]
      

null-scalar

[name null] — Bare null in body position auto-types to the null value.

Kind · scalar

        [value null]
      
        [value null]
      

quoted-string

[name 'value'] — A quoted body value is kept verbatim as a string — auto-typing is suppressed.

Kind · scalar

        [status 'true']
      
        [status 'true']
      

type-annotation

name::Type — A glued ::T type annotation pins a scalar to an explicit type, overriding auto-typing.

Kind · annotation

        [age::int 30]
      
        [age::int 30]
      

atom

:NAME — An atom literal: an interned, type-strict symbolic scalar that never equals a same-spelled string.

Kind · scalar

        [status :active]
      
        [status :active]
      

atom-collection

[:a, :b] / (:a, :b) / {k: :v} — Atoms are first-class scalars usable inside arrays, sequences, and map values.

Kind · scalar

        [transitions [:idle, :running, :complete]]
      
        [transitions [:idle, :running, :complete]]
      

anchor

&name — An anchor labels an element so it can be aliased or merged elsewhere in the document.

Kind · identity

        [defaults &def timeout=30 retries=3]
      
        [defaults &def timeout=30 retries=3]
      

merge

*name — A merge pulls an anchored element's attributes into the current element (later attributes win).

Kind · identity

        [defaults &def timeout=30 retries=3]
[production *def host=prod.example.com retries=5]
      
        [defaults &def timeout=30 retries=3]
[production *def host=prod.example.com retries=5]
      

id

#id — An ID declaration names an element for reference; @id refers back to it.

Kind · identity

        [user #u-1 name=alice]
      
        [user #u-1 name=alice]
      

id-reference

@id — An IDREF refers to a declared #id; forward references resolve.

Kind · identity

        [users
  [user #u-1 name=alice]
  [reviewer assigned-to=@u-1]
]
      
        [users
  [user #u-1 name=alice]
  [reviewer assigned-to=@u-1]
]
      

block-content

[| … |] — Block content: a verbatim text block delimited by [| and |].

Kind · structure

        [p [|hello world|]]
      
        [p [|hello world|]]
      

comment

[; … ] — A block comment [; … ] is preserved by the lossless formatter and dropped by the strict canonical form.

Kind · comment

        [;a comment]
[p text]
      
        [;a comment]
[p text]
      

raw-text

[# … #] — Raw text / CDATA: content between [# and #] is taken literally (no parsing) — distinct from a comment.

Kind · structure

entity-reference

&name; / &#nnn; — Entity and character references in text: named XML entities and numeric character references are recognised.

Kind · scalar

        [p & < >]
      
        [p & < >]
      

namespace

xmlns:prefix=URI / prefix:name — XML namespaces: declare with xmlns / xmlns:prefix and qualify names as prefix:local.

Kind · namespace

        [doc xmlns:dc=http://purl.org/dc/elements/1.1/
  [dc:title Hello]
]
      
        [doc xmlns:dc=http://purl.org/dc/elements/1.1/
  [dc:title Hello]
]
      

table

[table[col::T …]] ROW… — A typed table literal: a column header ([table[…]]) followed by whitespace-separated cell rows.

Kind · table

        [users [table[name::string age::int active::bool]]
  alice 30 true
  bob 25 false
]
      
        [users [table[name::string age::int active::bool]]
  alice 30 true
  bob 25 false
]