Reducer_Expression.resi
This commit is contained in:
parent
158381dfbb
commit
12113cad7e
|
@ -5,6 +5,8 @@ type errorValue =
|
||||||
| RERecordPropertyNotFound(string, string)
|
| RERecordPropertyNotFound(string, string)
|
||||||
| RETodo(string) // To do
|
| RETodo(string) // To do
|
||||||
|
|
||||||
|
type t = errorValue
|
||||||
|
|
||||||
let showError = err =>
|
let showError = err =>
|
||||||
switch err {
|
switch err {
|
||||||
| REArrayIndexNotFound(msg, index) => `${msg}: ${Js.String.make(index)}`
|
| REArrayIndexNotFound(msg, index) => `${msg}: ${Js.String.make(index)}`
|
||||||
|
|
|
@ -8,6 +8,7 @@ open Reducer_ErrorValue
|
||||||
|
|
||||||
type expression = T.expression
|
type expression = T.expression
|
||||||
type expressionValue = ExpressionValue.expressionValue
|
type expressionValue = ExpressionValue.expressionValue
|
||||||
|
type t = expression
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Shows the Lisp Code as text lisp code
|
Shows the Lisp Code as text lisp code
|
||||||
|
@ -31,10 +32,10 @@ let showResult = codeResult =>
|
||||||
/*
|
/*
|
||||||
Converts a MathJs code to Lisp Code
|
Converts a MathJs code to Lisp Code
|
||||||
*/
|
*/
|
||||||
let parse_ = (expr: string, parser, converter): result<expression, errorValue> =>
|
let parse_ = (expr: string, parser, converter): result<t, errorValue> =>
|
||||||
expr->parser->Result.flatMap(node => converter(node))
|
expr->parser->Result.flatMap(node => converter(node))
|
||||||
|
|
||||||
let parse = (mathJsCode: string): result<expression, errorValue> =>
|
let parse = (mathJsCode: string): result<t, errorValue> =>
|
||||||
mathJsCode->parse_(MathJs.Parse.parse, MathJs.ToExpression.fromNode)
|
mathJsCode->parse_(MathJs.Parse.parse, MathJs.ToExpression.fromNode)
|
||||||
|
|
||||||
module MapString = Belt.Map.String
|
module MapString = Belt.Map.String
|
||||||
|
@ -54,7 +55,7 @@ let reduceValueList = (valueList: list<expressionValue>): result<expressionValue
|
||||||
/*
|
/*
|
||||||
Recursively evaluate/reduce the code tree
|
Recursively evaluate/reduce the code tree
|
||||||
*/
|
*/
|
||||||
let rec reduceExpression = (expression: expression, bindings): result<expressionValue, 'e> =>
|
let rec reduceExpression = (expression: t, bindings): result<expressionValue, 'e> =>
|
||||||
switch expression {
|
switch expression {
|
||||||
| T.EValue(value) => value->Ok
|
| T.EValue(value) => value->Ok
|
||||||
| T.EList(list) => {
|
| T.EList(list) => {
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
module Result = Belt.Result
|
||||||
|
module T = Reducer_Expression_T
|
||||||
|
type expression = T.expression
|
||||||
|
type expressionValue = ReducerInterface.ExpressionValue.expressionValue
|
||||||
|
type t = expression
|
||||||
|
let show: T.expression => Js.String.t
|
||||||
|
let showResult: result<T.expression, 'a> => string
|
||||||
|
let parse_: (
|
||||||
|
string,
|
||||||
|
string => Result.t<'a, Reducer_ErrorValue.t>,
|
||||||
|
'a => Result.t<expression, Reducer_ErrorValue.t>,
|
||||||
|
) => result<expression, Reducer_ErrorValue.t>
|
||||||
|
let parse: string => result<expression, Reducer_ErrorValue.t>
|
||||||
|
module MapString = Belt.Map.String
|
||||||
|
type bindings = MapString.t<unit>
|
||||||
|
let defaultBindings: bindings
|
||||||
|
let reduceValueList: list<expressionValue> => result<
|
||||||
|
expressionValue,
|
||||||
|
Reducer_ErrorValue.t,
|
||||||
|
>
|
||||||
|
let reduceExpression: (expression, 'a) => result<
|
||||||
|
expressionValue,
|
||||||
|
Reducer_ErrorValue.t,
|
||||||
|
>
|
||||||
|
let evalWBindingsExpression: (expression, 'a) => result<
|
||||||
|
expressionValue,
|
||||||
|
Reducer_ErrorValue.t,
|
||||||
|
>
|
||||||
|
let evalWBindings: (string, bindings) => Result.t<
|
||||||
|
expressionValue,
|
||||||
|
Reducer_ErrorValue.t,
|
||||||
|
>
|
||||||
|
let eval: string => Result.t<expressionValue, Reducer_ErrorValue.t>
|
Loading…
Reference in New Issue
Block a user