import { CaretNode, CaretParser, CaretPrefixParselet, TokensTag, } from "@caret-js/core"; import { CharToken } from "@caret-js/core"; import { PositiveNode } from "../nodes/positive"; // This parselet looks for a sequence of `CharToken`s that form a decimal number, // meaning it has digits, optionally a single decimal point, and more digits. The digits // are optional on either side of the decimal point, but at least one digit must be present. export class UnaryPlusParselet extends CaretPrefixParselet { parse(parser: CaretParser): CaretNode { const token = parser.consume(); this.assert( token instanceof CharToken && token.char === "+", "Expected '+' token" ); const child = parser.parseMinBP(this); return PositiveNode.from(child).addTag(new TokensTag([token])); } }