Clause
← All dokumentation

Översatt från det engelska originalet · 06042fa · 2026-10-09 · Läs på engelska

Parser

Tolkar hela OTP 29-grammatiken från preprocessade token till ett ägt AST.

CLI

clau --parse-check -I include -DDEBUG module.erl preprocessar och tolkar, skriver diagnostik till stderr och ingenting till stdout vid lyckat utfall. Alla preprocessoralternativ gäller. --print-pp och --print-ast skriver ut expanderad källkod eller trädet från samma genomgång. Alternativ för utdatasökväg är användningsfel i kontroll-/utskriftslägen. Indata är isolerade; varje fel ger en felaktig slutstatus. -- tillåter sökvägar som börjar med -. Slutstatus: 0 lyckat (varningar tillåtna), 1 fel i källkod/filsystem, 2 användningsfel.

AST-texten använder objekt inom parentes, indrag med två mellanslag och fält av formen name=value:

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

Utskrivaren är iterativ; bortom 64 nivåer begränsar den indraget och lägger till etiketter [depth=N]. AST-texten är endast till för inspektion; det finns ingen läsare.

API

Headerfil clause/compiler/parser.hpp, CMake-mål 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);
}

Grammatisk täckning: attribut och literala termer, tupel-/native records, deklarationer av type/opaque/nominal, specs/callbacks, alla uttryck, mönster, guards, klausuler, binaries, fun/try/maybe/receive, och list-/map-/binary- comprehensions med OTP 29:s strikta generatorer och zip-grupper. SSA-testannoteringar är undantagna. Lyckad syntax säger ingenting om lint, bindningar eller kodgenerering.

Återhämtning och gränser

Misslyckade former rullar tillbaka arenor och ursprung; senare former förblir tillgängliga men felet kvarstår. Diagnostik bär kategori, logiska koordinater, spår av makron/inkluderingar, närmaste omatchade öppnare och terminaler i Diagnostic::expected.

Standardvärden: 1 000 000 token/form, 4 000 000 token/modul, 1 000 000 noder, 1 000 diagnostiska meddelanden (+1 meddelande om uttömning), nästling 256 (hårt tak i API:t 512), 16 000 000 arbetsenheter. Trädutskrivaren har som standard 4 000 000 besökta objekt och kastar std::length_error vid uttömning. Detta är bokföringsgränser, inte garantier för väggklocktid. Resursuttömning stoppar sessionen.

Belägg för kompatibilitet