-function zeroOrOnceDo(f) {
- return (x) => {
- var wrapped_old_x = { _tag: "Some", value: x };
- var wrapped_new_x = thenDo(wrapped_old_x, f);
- if (wrapped_new_x._tag != "None") {
- return wrapped_new_x;
- }
- else {
- return wrapped_old_x;
- }
- };
-}
-exports.zeroOrOnceDo = zeroOrOnceDo;
-function tokenize(input) {
- var input_matchee_pair = toSome({ matched: "",
- remained: input });
- // integer = ([+]|[-])\d\d?
- let integer = (x) => {
- let wrapped_x = toSome(x);
- let plusMinus = orDo(match1Char('+'), match1Char('-')); // ([+]|[-])
- let d = matchRange('0', '9'); // \d
- return thenDo(thenDo(thenDo(wrapped_x, zeroOrOnceDo(plusMinus)), d), zeroOrMoreDo(d));
- };
- console.log(input + ", result: ");
- console.log(thenDo(input_matchee_pair, integer));
- // TODO: id, string, space, basic operator, 3 marks: @, {, }.
-}
-exports.tokenize = tokenize;
-tokenize("+123");
-tokenize("123");
-tokenize("-123");
-tokenize(" 123");
-tokenize("c123");
+let expr2 = term;
+/**
+ * expr = expr1 | expr2
+ */
+let expr = orDo(expr1, expr2);
+let tokens = tk.tokenize("12(13)(14)");
+//let tokens = tk.tokenize("(4-(3/4))");
+//tk.tokenize(argv[2]);
+let tokensFiltered = tokens.filter((x) => {
+ return (x.type != tk.TokenType.NL
+ && x.type != tk.TokenType.SP);
+});
+let wrappedTokens = tk.toSome({
+ matched: [],
+ remained: tokensFiltered,
+ ast: []
+});
+let beta = expr({
+ matched: [],
+ remained: tokensFiltered,
+ ast: []
+});
+console.log("RESULT=" + repr(beta));