Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 355130x 355130x 355130x 355130x 355130x 355130x 56738x 56738x 355130x 1x 1x 1848400x 1848400x 1x 1x 298392x 298392x 298392x 298392x 1x 1x 397713x 397713x 1x 1x 608549x 608549x 1x 1x 292836x 292836x 1x 1x 2702321x 2702321x 1x 1x | import {Token} from "../1_lexer/tokens/_token"; import {ExpressionNode} from "../nodes/expression_node"; import {TokenNode} from "../nodes/token_node"; export class Result { private readonly tokens: readonly Token[]; private readonly tokenIndex: number; private nodes: (ExpressionNode | TokenNode)[] | undefined; public constructor(tokens: readonly Token[], tokenIndex: number, nodes?: (ExpressionNode | TokenNode)[]) { // tokens: all tokens, from the tokenIndex = not yet matched // nodes: matched tokens this.tokens = tokens; this.tokenIndex = tokenIndex; this.nodes = nodes; if (this.nodes === undefined) { this.nodes = []; } } public peek(): Token { return this.tokens[this.tokenIndex]; } public shift(node: ExpressionNode | TokenNode): Result { const cp = this.nodes!.slice(); cp.push(node); return new Result(this.tokens, this.tokenIndex + 1, cp); } public popNode(): ExpressionNode | TokenNode | undefined { return this.nodes!.pop(); } public getNodes(): (ExpressionNode | TokenNode)[] { return this.nodes!; } public setNodes(n: (ExpressionNode | TokenNode)[]): void { this.nodes = n; } public remainingLength(): number { return this.tokens.length - this.tokenIndex; } } |