@spellu/4op
Version:
Spellu example, four arithmetic operations.
47 lines (46 loc) • 1.51 kB
TypeScript
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;