Designing form and meaning
Symp is composed of three independent but composable subsystems in two parts of a structure:
Symbolmatch → Symbolverse / Symbolprose
(form) (meaning)
Each subsystem is implemented as a frame — a symbolic interpreter that takes a symbolic input and produces a new symbolic result. The glue language (APPLY …)
binds them into a single computation.
A frame is a pair of subprograms:
(FRAME
(SYNTAX <apply>)
(SEMANTICS <apply>))
When executed via (APPLY <frame> <expr>)
, the following happens:
<expr>
is passed to the (SYNTAX …)
subprogram. This is typically an (APPLY symbolmatch …)
expression that validates grammar.
<expr>
is then passed to the (SEMANTICS …)
subprogram. This is typically (APPLY symbolverse …)
or (APPLY symbolprose …)
, which transform or execute the expression.(APPLY
(FRAME
(SYNTAX
(APPLY
symbolmatch
(SEXPR (RULES (FLAT <start> ATOMIC)))))
(SEMANTICS
(APPLY
symbolprose
(SEXPR
(GRAPH
(EDGE
(SOURCE BEGIN)
(INSTR
(ASGN RESULT ("Hello" "from" PARAMS)))
(TARGET END)))))))
(SEXPR Symp))
Execution Steps:
(Hello from Symp)
All components use a shared symbolic representation:
<s-expression> = <ATOM> | (<s-expression>+)
Each (APPLY …)
passes these symbolic structures along the pipeline:
Input
↓
Symbolmatch — verifies shape
↓
Symbolverse/Symbolprose — rewrites structure or returns a graph execution result
↓
Output
Because the data format is uniform, any module can be swapped or nested.
Symp can act as a backend framework in multiple contexts:
(APPLY …)
directly.(APPLY …)
payloadsSymp is fully modular:
(FRAME (SYNTAX …) (SEMANTICS …))
pattern..frame
files.Symp is not a compiler. It’s a conversation between symbols. Grammar and meaning are distinct layers of that conversation, open for introspection and modification. This is the foundation of Symbolic Computing in the world where symbols won.