import { CaretInfixParselet, CharToken, TokensTag } from "@caret-js/core"; import { CaretNode, CaretParser } from "@caret-js/core"; import { MultiplyNode } from "../nodes/multiply"; import { MultiplicationStyleTag } from "./adjacentMultiplication"; export class MultiplyParselet extends CaretInfixParselet { public readonly associativity = "left"; parse(parser: CaretParser, left: CaretNode): MultiplyNode { const token = parser.consume(); this.assert( token instanceof CharToken && token.char === "*", "Expected '*' token" ); const right = parser.parseMinBP(this); return MultiplyNode.from([left, right]) .addTag(new TokensTag([token])) .addTag(new MultiplicationStyleTag("dot")); } }