UNPKG

@spellu/4op

Version:

Spellu example, four arithmetic operations.

47 lines (46 loc) 1.51 kB
import spellu from '@spellu/core'; declare namespace spellu$calculator$4op { } declare namespace spellu$calculator$4op { enum SyntaxType { Number = "Number+", BinaryExpression = "BinaryExpression", TokenNumber = "Number", TokenOpMultiple = "*", TokenOpDivide = "/", TokenOpAdd = "+", TokenOpSubtract = "-", TokenParenOpen = "(", TokenParenClose = ")" } type Node = spellu.Node<SyntaxType>; type Token = spellu.Token<SyntaxType>; interface NodeNumber extends Node { type: SyntaxType.Number; value: number; } interface NodeBinaryExpression extends Node { type: SyntaxType.BinaryExpression; operator: string; left: Node; right: Node; } } declare namespace spellu$calculator$4op { function Node<T extends Node>(type: SyntaxType, data: {}, range?: spellu.TextRange): T; } /** * EBNF * expr = term ( '+' term | '-' term ) * term = factor ( '*' factor | '/' factor ) * factor = number | '(' expr ')' * number = ( '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' )+ */ declare namespace spellu$calculator$4op { function grammar(): spellu.Parser<Node>; } declare namespace spellu$calculator$4op { function parse(source: spellu.Source): spellu.Success<Node> | spellu.Failure<spellu.Diagnosis[]>; function trace(source: spellu.Source): spellu.TraceResult; function evaluate(node: Node): number; } export default spellu$calculator$4op;