MCPcopy Index your code
hub / github.com/aiscript-dev/aiscript / parsePrefix

Function parsePrefix

src/parser/syntaxes/expressions.ts:55–91  ·  view source on GitHub ↗
(s: ITokenStream, minBp: number)

Source from the content-addressed store, hash-verified

53];
54
55function parsePrefix(s: ITokenStream, minBp: number): Ast.Expression {
56 const startPos = s.getPos();
57 const op = s.getTokenKind();
58 s.next();
59
60 // 改行のエスケープ
61 if (s.is(TokenKind.BackSlash)) {
62 s.next();
63 s.expect(TokenKind.NewLine);
64 s.next();
65 }
66
67 const expr = parsePratt(s, minBp);
68
69 const endPos = expr.loc.end;
70
71 switch (op) {
72 case TokenKind.Plus: {
73 if (expr.type === 'num') {
74 return NODE('num', { value: expr.value }, startPos, endPos);
75 }
76 return NODE('plus', { expr }, startPos, endPos);
77 }
78 case TokenKind.Minus: {
79 if (expr.type === 'num') {
80 return NODE('num', { value: -1 * expr.value }, startPos, endPos);
81 }
82 return NODE('minus', { expr }, startPos, endPos);
83 }
84 case TokenKind.Not: {
85 return NODE('not', { expr }, startPos, endPos);
86 }
87 default: {
88 throw unexpectedTokenError(op, startPos);
89 }
90 }
91}
92
93function parseInfix(s: ITokenStream, left: Ast.Expression, minBp: number): Ast.Expression {
94 const startPos = s.getPos();

Callers 1

parsePrattFunction · 0.85

Calls 8

parsePrattFunction · 0.85
NODEFunction · 0.85
unexpectedTokenErrorFunction · 0.85
getPosMethod · 0.65
getTokenKindMethod · 0.65
nextMethod · 0.65
isMethod · 0.65
expectMethod · 0.65

Tested by

no test coverage detected