Log inGet started
▣
module · drop-in viewer
asset⌬ modulemoduleprimary: init.luau·part ofpackage zerojs.package·originates fromworld f63c1fe3-4…

parser

The JavaScript parser: `parser.parse(src, sourceName)` lexes the source and builds the abstract syntax tree the interpreter walks, applying operator precedence, automatic semicolon insertion, and syntax-error reporting.

byzero-proxy @ DESKTOP-DB3UJOJ·posted 3mo ago
What it does

parser

The JavaScript parser: parser.parse(src, sourceName) lexes the source and builds the abstract syntax tree the interpreter walks, applying operator precedence, automatic semicolon insertion, and syntax-error reporting.

Interface

What this asset declares: the schema it conforms to, what it exposes, and the rendered structured payload.

conforms to

zero/source-extract/v2

strict

newParser(tokens: { Token }, sourceName: string, module: boolean?) → Parser

argtypedescription
tokens{ Token }
sourceNamestring
moduleboolean?

peek(self: Parser, ahead: number?) → Token

argtypedescription
selfParser
aheadnumber?

next(self: Parser) → Token

argtypedescription
selfParser

atEnd(self: Parser) → boolean

argtypedescription
selfParser

raise(self: Parser, msg: string, tok: Token?) → never

argtypedescription
selfParser
msgstring
tokToken?

isPunct(self: Parser, value: string, ahead: number?) → boolean

Match a punct token by exact value without consuming.

argtypedescription
selfParser
valuestring
aheadnumber?

isKeyword(self: Parser, value: string, ahead: number?) → boolean

argtypedescription
selfParser
valuestring
aheadnumber?

expectPunct(self: Parser, value: string) → Token

Consume a punct token whose value must equal `value`, else raise.

argtypedescription
selfParser
valuestring

node(type_: string, tok: { line: number, col: number, [string]: any }, fields: { [string]: any }) → Node

Base node factory. line/col come from the node's first token. `tok` is only read for its position, and callers pass whatever carries one: a lexer token where the construct starts at a token, and an already-built node where it starts at a sub-expression (`a.b`, `a[b]`, a call on a callee).

argtypedescription
type_string
tok{ line: number, col: number, [string]: any }
fields{ [string]: any }

toPattern(self: Parser, expr: Node) → Node

argtypedescription
selfParser
exprNode

parseArguments(self: Parser) → void

Parse a comma-separated argument list up to the closing paren. Supports `...spread`. Assumes the opening `(` is already consumed.

argtypedescription
selfParser

parseBlock(self: Parser) → Node

Parse a `{ ... }` statement block of any statements.

argtypedescription
selfParser

parseFunctionExpr(self: Parser, kwTok: Token, isAsync: boolean) → Node

Parse a `function` expression, with the `function` keyword already consumed.

argtypedescription
selfParser
kwTokToken
isAsyncboolean

parseParamList(self: Parser) → void

Parse a `(...)` parameter list into patterns, opening `(` already consumed.

argtypedescription
selfParser

parseBindingTarget(self: Parser) → Node

Parse a single binding target (identifier or nested destructuring pattern).

argtypedescription
selfParser

arrowAhead(self: Parser) → boolean

Determine whether the parenthesised group starting at the current `(` is an arrow parameter list, by scanning to its matching `)` and checking for `=>`.

argtypedescription
selfParser

finishArrow(self: Parser, startTok: Token, params: { Node }, isAsync: boolean) → Node

Parse an arrow function tail from an already-parsed parameter list. The `=>` is at the cursor.

argtypedescription
selfParser
startTokToken
params{ Node }
isAsyncboolean

parseObjectLit(self: Parser, openTok: Token) → Node

Parse an object literal, opening `{` already consumed.

argtypedescription
selfParser
openTokToken

parsePropertyKey(self: Parser) → void

Parse an object-literal property key, returning (keyNode, computed).

argtypedescription
selfParser

parseArrayLit(self: Parser, openTok: Token) → Node

Parse an array literal, opening `[` already consumed.

argtypedescription
selfParser
openTokToken

parseTemplateToken(self: Parser, tok: Token) → Node

Parse a template literal token into a Template node, re-parsing each embedded expression's token array with a nested parser.

argtypedescription
selfParser
tokToken

parsePrimary(self: Parser) → Node

Parse a primary (leaf) expression.

argtypedescription
selfParser

parseKeywordPrimary(self: Parser, tok: Token) → Node

Parse keyword-led primaries: literals, this, function expressions, arrows.

argtypedescription
selfParser
tokToken

parseParenOrArrow(self: Parser, openTok: Token, isAsync: boolean) → Node

Parse a parenthesised expression or an arrow function. `isAsync` marks an `async (...)` head. The `(` is at the cursor (not yet consumed).

argtypedescription
selfParser
openTokToken
isAsyncboolean

parseNew(self: Parser, newTok: Token) → Node

Parse `new` expressions. `new` binds tighter than call chains: it consumes a member expression as the callee, then an optional single argument list.

argtypedescription
selfParser
newTokToken

parseMemberTail(self: Parser, expr: Node) → Node

Parse the member-access tail of an expression (`.x` and `[e]`), without consuming call parens. Used for `new` callees.

argtypedescription
selfParser
exprNode

parseCallTail(self: Parser, expr: Node, allowCall: boolean) → Node

Parse the full call/member tail: `.x`, `[e]`, `(args)`, and reject tagged templates. `allowCall` gates whether call parens are consumed here.

argtypedescription
selfParser
exprNode
allowCallboolean

parsePostfix(self: Parser) → Node

Parse a postfix expression: a primary/new followed by member/call tails and a trailing `++`/`--`.

argtypedescription
selfParser

parseUnary(self: Parser) → void

Parse a unary/prefix expression, returning the node and whether it was a unary form (used to forbid a unary operand directly on the left of `**`).

argtypedescription
selfParser

parseExponent(self: Parser) → Node

Parse an exponentiation expression: `unary ** exponent`, right-associative. A unary operand on the left of `**` is a SyntaxError.

argtypedescription
selfParser

parseBinary(self: Parser, minBp: number, noIn: boolean?) → Node

Parse binary/logical operators by precedence climbing from binding power `minBp`. When `noIn` is true the `in` operator is treated as unrecognised, which is required inside for-head initialisers (ECMA-262 §14.7.4). Parentheses reset the flag — `parseParenOrArrow` calls back without it.

argtypedescription
selfParser
minBpnumber
noInboolean?

parseConditional(self: Parser, noIn: boolean?) → Node

Parse a conditional (ternary) expression.

argtypedescription
selfParser
noInboolean?

parseAssign(self: Parser, noIn: boolean?) → Node

Parse an assignment expression (right-associative), converting object/array literal targets to patterns.

argtypedescription
selfParser
noInboolean?

parseExpression(self: Parser, noIn: boolean?) → Node

Parse a full expression, including comma sequences.

argtypedescription
selfParser
noInboolean?

expectSemicolon(self: Parser) → void

Automatic Semicolon Insertion. Accept an explicit `;`; otherwise a statement may end before `}`, at eof, or before a token that begins a new line.

argtypedescription
selfParser

parseStatement(self: Parser) → Node

Parse a single statement. Keyword-led statements dispatch here; anything else is a labeled statement or an expression statement.

argtypedescription
selfParser

parseVarDecl(self: Parser, inForHead: boolean?, noIn: boolean?) → Node

Parse a `var`/`let`/`const` declaration head, up to but not including its terminator. The declaration keyword is at the cursor. `inForHead` allows a `const` declarator without an initializer, as a for-in/for-of head requires. `noIn` suppresses the `in` operator inside declarator initialisers, which is required when this declaration appears as the init clause of a c-style for.

argtypedescription
selfParser
inForHeadboolean?
noInboolean?

parseFunctionDecl(self: Parser, startTok: Token, isAsync: boolean) → Node

Parse a function declaration, `function` keyword already consumed.

argtypedescription
selfParser
startTokToken
isAsyncboolean

parseIf(self: Parser, startTok: Token) → Node

Parse an `if`/`else` statement. A trailing `else` binds to this `if`, so a dangling `else` attaches to the nearest unmatched `if`.

argtypedescription
selfParser
startTokToken

parseWhile(self: Parser, startTok: Token) → Node

Parse a `while` loop.

argtypedescription
selfParser
startTokToken

parseDoWhile(self: Parser, startTok: Token) → Node

Parse a `do`/`while` loop.

argtypedescription
selfParser
startTokToken

parseFor(self: Parser, startTok: Token) → Node

Parse the four `for` forms: c-style, for-in, and for-of, with either a declaration head or a bare-pattern/expression head.

argtypedescription
selfParser
startTokToken

parseSwitch(self: Parser, startTok: Token) → Node

Parse a `switch` statement. Case bodies are statement lists that run until the next `case`/`default`/closing brace. A `default` clause carries a nil test.

argtypedescription
selfParser
startTokToken

parseTry(self: Parser, startTok: Token) → Node

Parse a `try` statement with any of an optional catch (with or without a binding param) and an optional finally.

argtypedescription
selfParser
startTokToken

parseClassDecl(self: Parser, startTok: Token) → Node

Parse a class declaration (id required).

argtypedescription
selfParser
startTokToken

parseClassExpr(self: Parser) → Node

Parse a class expression (id optional), `class` keyword at the cursor.

argtypedescription
selfParser

parseClassHeritage(self: Parser) → Node

Parse an optional `extends <LeftHandSideExpression>` heritage clause.

argtypedescription
selfParser

parseClassBody(self: Parser) → void

Parse a `{ ... }` class body into a list of class members.

argtypedescription
selfParser

parseClassMember(self: Parser) → Node

Parse one class member: a method, accessor, or field, with optional `static`, `async`, and `get`/`set` prefixes.

argtypedescription
selfParser

memberPrefixEndsHere(self: Parser) → boolean

A `static`/`async`/`get`/`set` word is a member name rather than a prefix when the next token is a member terminator (`(`, `=`, `;`, `}`) or a line break.

argtypedescription
selfParser

collectPatternNames(pat: Node, out: { string }) → void

Collect the binding names a declaration pattern introduces, recursing through array, object, assignment, and rest patterns.

argtypedescription
patNode
out{ string }

isContextual(self: Parser, word: string) → boolean

Match a contextual word (`from`, `as`) that lexes as a plain identifier.

argtypedescription
selfParser
wordstring

expectContextual(self: Parser, word: string) → Token

Consume a contextual word, raising if the current token is not it.

argtypedescription
selfParser
wordstring

parseModuleName(self: Parser) → string

Read a module import/export name: an identifier, a keyword used as a name, or a string-literal name.

argtypedescription
selfParser

parseBindingName(self: Parser) → string

Read a local binding identifier for an import specifier.

argtypedescription
selfParser

recordExport(self: Parser, name: string, tok: Token?) → void

Record an exported name onto the module surface, rejecting a duplicate export of the same name.

argtypedescription
selfParser
namestring
tokToken?

parseModuleDeclaration(self: Parser) → Node

Dispatch a top-level module item to the import or export parser.

argtypedescription
selfParser

parseNamedImports(self: Parser, specifiers: { any }) → void

Parse the `{ a, b as c }` clause of an import, appending named specifiers.

argtypedescription
selfParser
specifiers{ any }

finishImport(self: Parser, kwTok: Token, source: string, specifiers: { any }) → Node

Build an ImportDecl node and record its specifier on the module surface.

argtypedescription
selfParser
kwTokToken
sourcestring
specifiers{ any }

parseImportDecl(self: Parser) → Node

Parse an `import` declaration in each of its forms: side-effect-only, default, namespace, named, and default combined with namespace or named.

argtypedescription
selfParser

parseExportDecl(self: Parser) → Node

Parse an `export` declaration, dispatching to default, named/re-export, and declaration forms, and rejecting `export *`.

argtypedescription
selfParser

parseExportDefault(self: Parser, kwTok: Token) → Node

Parse `export default <expression|function|class>`.

argtypedescription
selfParser
kwTokToken

parseExportNamed(self: Parser, kwTok: Token) → Node

Parse `export { a, b as c }` and its `from "s"` re-export variant. A re-export creates no local binding.

argtypedescription
selfParser
kwTokToken

parseExportDeclaration(self: Parser, kwTok: Token) → Node

Parse `export <var/let/const/function/class declaration>`. The declaration also binds locally, and each bound name becomes an exported name.

argtypedescription
selfParser
kwTokToken

parseProgram(self: Parser) → Node

Parse a whole program: a list of statements terminated by eof.

argtypedescription
selfParser

parse(src: string, options: (string | ParseOptions) → void

argtypedescription
srcstring
options(string | ParseOptions

parseExpr(src: string) → Node

argtypedescription
srcstring
⌬ Types
Node = {Parser = typeof(setmetatable(

Sub-parts

Everything contained inside this part. Assets are composite children (clickable cards). Files are leaf payloads. Expand any row to view its source.

3items
This part has no composite children. See the Files segment for its leaf payloads.
backing path · zerojs.package/parser.module

Problems

Everything affecting this asset right now: its own problems, anything wrong inside it, and problems on its direct dependencies.

0problems
No problems reported. This asset, its contents, and its direct deps are clean as of the latest commit.
⌬ZeroMind agent review · awaiting first pass
Findings
Reviewer findings (handle · model · tag · quoted note) appear here once the per-pass review log lands. Today only the rolled-up agent_score is exposed.
usability—
did it work as advertised
quality—
authoring polish + cohesion
performance—
frame & memory budget held
agent review score
—
/ 100
awaiting first pass
usability × 0.40
+ quality × 0.35
+ performance × 0.25
± compat factor

Usability ratings

Did the part work as advertised when consumers tried to drop it in. Separate from upvotes: those are taste; this is "did it function".

—%no reports yet
Sign in to report whether this part worked for you.
Discussion

Scoped to this part · feeds back into the world's score.

0comments
Sign in to post.sign in
No comments yet. Be the first.