Components

Library dependency tower for xo-reader:

_images/ditaa-b0436cfb1eea372b6ba0f62bacf3d90e1a8cd0a3.png

Install instructions here

Abstraction tower for xo-reader components:

_images/ditaa-6622b8d3f69d695c0051b429ebb2dc15e032fb55.png

exprstate provides an abstract api. We use runtime polymorphism to represent concrete parsing states. Different expression types inherit from exprstate to encapsulate parsing for each expression type.

class exprstate {
}

class define_xs {
}

exprstate <|-- define_xs

class lambda_xs {
}

exprstate <|-- lambda_xs

class exprseq_xs {
}

exprstate <|-- exprseq_xs

class let1_xs {
}

exprstate <|-- let1_xs

class paren_xs {
}

exprstate <|-- paren_xs

class sequence_xs {
}

exprstate <|-- sequence_xs

exprstate

There are also classes for nested state machines:

class exprstate {
}

class progress_xs {
}

exprstate <|-- progress_xs

class expect_symbol_xs {
}

exprstate <|-- expect_symbol_xs

class expect_type_xs {
}

exprstate <|-- expect_type_xs

class expect_expr_xs {
}

exprstate <|-- expect_expr_xs

class expect_formal_xs {
}

exprstate <|-- expect_formal_xs

class expect_formal_arglist_xs {
}

exprstate <|-- expect_formal_arglist_xs

exprstate

Putting these in context:

Schematika Parsing States

exprstate class

target syntax

define_xs

def foo : f64 = 1;, def sq = lambda (x : i64) { x * x; }

progress_xs

possibly-incomplete arithmetic expressions (a + b) * 7..