36 lines
611 B
Nim
36 lines
611 B
Nim
import ../scanner
|
|
import ../chunk
|
|
import ../types/value
|
|
|
|
type
|
|
Parser* = ref object
|
|
scanner*: Scanner
|
|
current*: Token
|
|
previous*: Token
|
|
hadError*: bool
|
|
panicMode*: bool
|
|
|
|
NodeKind* = enum
|
|
nkBlockExpr, nkRoot,
|
|
nkExprStmt,
|
|
nkBreak,
|
|
nkConst
|
|
|
|
Node* = ref object
|
|
case kind*: NodeKind:
|
|
of nkBlockExpr, nkRoot:
|
|
children*: seq[Node]
|
|
of nkExprStmt:
|
|
expression*: Node
|
|
of nkBreak:
|
|
label*: string
|
|
of nkConst:
|
|
constant*: NdValue
|
|
|
|
CompileResult* = object
|
|
case ok*: bool:
|
|
of true:
|
|
chunk*: Chunk
|
|
of false:
|
|
discard
|