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 399383x 399383x 399383x 399383x 399383x 399383x 63091x 63091x 399383x 1x 1x 2135508x 2135508x 1x 1x 336292x 336292x 336292x 336292x 1x 1x 437943x 437943x 1x 1x 673248x 673248x 1x 1x 323941x 323941x 1x 1x 3078318x 3078318x 1x 1x | import {AbstractToken} from "../1_lexer/tokens/abstract_token"; import {ExpressionNode} from "../nodes/expression_node"; import {TokenNode} from "../nodes/token_node"; export class Result { private readonly tokens: readonly AbstractToken[]; private readonly tokenIndex: number; private nodes: (ExpressionNode | TokenNode)[] | undefined; public constructor(tokens: readonly AbstractToken[], 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(): AbstractToken { 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; } } |