Clause
← Gesamte Dokumentation

Übersetzt aus dem englischen Original · 06042fa · 2026-10-09 · Auf Englisch lesen

Parser

Parst die vollständige OTP-29-Grammatik aus vorverarbeiteten Tokens in einen besitzenden AST.

CLI

clau --parse-check -I include -DDEBUG module.erl führt Präprozessor und Parser aus, schreibt Diagnosen nach stderr und bei Erfolg nichts nach stdout. Alle Präprozessoroptionen gelten. --print-pp und --print-ast geben den expandierten Quelltext oder den Baum aus demselben Durchlauf aus. Optionen für Ausgabepfade sind in Prüf-/Ausgabemodi Verwendungsfehler. Eingaben sind voneinander isoliert; jeder Fehlschlag sorgt für einen fehlschlagenden Exit-Code. -- erlaubt Pfade, die mit - beginnen. Exit-Codes: 0 Erfolg (Warnungen erlaubt), 1 Quell-/Dateisystemfehler, 2 Verwendungsfehler.

Der AST-Text verwendet geklammerte Objekte, Einrückung um zwei Leerzeichen und Felder der Form name=value:

(Function name=i arity=0 clauses=1
  clause[0]=(FunctionClause arguments=0 guard=none body=1
    body[0]=(IntegerLiteral value=42)
  )
)

Der Printer arbeitet iterativ; ab 64 Ebenen begrenzt er die Einrückung und fügt Beschriftungen [depth=N] hinzu. Der AST-Text dient nur der Inspektion; es gibt keinen Leser dafür.

API

Header clause/compiler/parser.hpp, CMake-Ziel clause_frontend:

clause::ParseResult load(const std::filesystem::path &path) {
    clause::SourceManager sources;
    clause::PreprocessorSession pp(sources.read(path));
    return clause::parse_module(pp);
}
auto result = load("module.erl"); // Sources and session are gone; AST owns its data.
for (const auto &id : result.module.forms()) {
    const auto &origin = result.module.anchor(result.module.form(id).source);
}

Grammatikabdeckung: Attribute und literale Terme, Tupel-/native Records, Type/Opaque/Nominal-Deklarationen, Specs/Callbacks, alle Ausdrücke, Muster, Guards, Klauseln, Binaries, fun/try/maybe/receive sowie Listen-, Map- und Binary-Comprehensions mit den strikten Generatoren und Zip-Gruppen von OTP 29. SSA-Testannotationen sind ausgeschlossen. Erfolg bei der Syntax sagt nichts über Lint, Bindungen oder Codegenerierung aus.

Wiederherstellung und Grenzen

Fehlgeschlagene Formen setzen Arenen und Herkunftsangaben zurück; spätere Formen bleiben verfügbar, aber der Fehlschlag bleibt bestehen. Diagnosen enthalten Kategorie, logische Koordinaten, Makro-/Include-Trace, die nächste nicht geschlossene öffnende Klammer und Diagnostic::expected-Terminale.

Standards: 1.000.000 Tokens/Form, 4.000.000 Tokens/Modul, 1.000.000 Knoten, 1.000 Diagnosen (+1 Erschöpfungsmeldung), Verschachtelung 256 (harte API-Obergrenze 512), 16.000.000 Arbeitseinheiten. Der Baum-Printer hat standardmäßig 4.000.000 besuchte Objekte und wirft bei Erschöpfung std::length_error. Dies sind Abrechnungsgrenzen, keine Garantien für die Laufzeit. Ressourcenerschöpfung beendet die Sitzung.

Nachweise der Kompatibilität