The CST Aether.Reader.read/2 produces: grammar-wide pragmas plus
every token/rule definition in file order, each body an
Aether.Reader.cst() tree. Aether.Eval.build/1 is the only
consumer.
Summary
Types
@type def_t() :: {:token, atom(), Aether.Reader.cst(), Aether.Reader.pos()} | {:rule, atom(), Aether.Reader.cst(), Aether.Reader.pos()} | {:keywords, atom(), %{required(String.t()) => atom()}, Aether.Reader.pos()} | {:refine, atom(), String.t(), String.t(), [atom()], Aether.Reader.pos()}
@type t() :: %Aether.Reader.Grammar{ case_insensitive: boolean(), defs: [def_t()], engine: :peg | :lr | :glr, file: String.t() | nil, name: String.t(), root: atom(), root_pos: Aether.Reader.pos(), skip_mode: :none | :default | {:custom, atom()}, skip_pos: Aether.Reader.pos() | nil, source: String.t() }