mevento 2.0.1 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/mevento.mjs +24 -10
- package/fesm2015/mevento.mjs +23 -9
- package/fesm2015/mevento.mjs.map +1 -1
- package/fesm2020/mevento.mjs +23 -9
- package/fesm2020/mevento.mjs.map +1 -1
- package/lib/mevento.d.ts +12 -4
- package/package.json +1 -1
package/fesm2015/mevento.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mevento.mjs","sources":["../../../projects/mevento/src/lib/mevento.ts","../../../projects/mevento/src/public-api.ts","../../../projects/mevento/src/mevento.ts"],"sourcesContent":["import { Type } from \"@angular/core\";\n\nfunction error(token: Token, expected?: TokenType) {\n const text =\n `Invalid token ${token.type}[${token.value}] at ${token.line}, ${token.col} ${expected ? `: expecting ${expected} token` : ''}\\n`;\n throw Error(text);\n}\nfunction isNum(value: any) {\n return typeof value === 'number';\n}\nfunction isBoolean(value: any) {\n return typeof value === 'boolean';\n}\nfunction isString(value: any) {\n return typeof value === 'string';\n}\nfunction _boolValue(test: any): boolean {\n return (test === null ||\n (isNum(test) && test === 0) ||\n (isString(test) && test.length === 0) ||\n (isBoolean(test) && !test)) ? false : true;\n};\n\nfunction hashCode(str: string) {\n let hash = 0;\n let i = 0;\n let chr;\n if (str.length === 0) return hash;\n for (i = 0; i < str.length; i++) {\n chr = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + chr;\n hash |= 0; // Convert to 32bit integer\n }\n return hash;\n};\nexport class TokenType {\n static id = 0;\n static comma = 1;\n static semi = 2;\n static numberConst = 3;\n static stringConst = 4;\n static equal = 5;\n static lparen = 6\n static rparen = 7;\n static eol = 8;\n static eof = 9;\n static lbrace = 10;\n static rbrace = 11;\n static lbracket = 12;\n static rbracket = 13;\n static great = 14;\n static greatEq = 15;\n static less = 16;\n static lessEq = 17;\n static eqeq = 18;\n static IF = 19;\n static ELSE = 20;\n static TRUE = 21;\n static FALSE = 22;\n static NULL = 23;\n static not = 24;\n static notEq = 25;\n static and = 26;\n static or = 27;\n static plus = 28;\n static minus = 29;\n static div = 30;\n static mult = 31;\n static mod = 32;\n static invalid = 33;\n static colon = 34;\n static WHILE_TILL = 35;\n static FOR_LOOP = 36;\n static up = 37;\n static down = 38;\n static with = 39;\n static in = 40;\n static TILL = 41;\n static BREAK = 42;\n static CONTINUE = 43;\n static nullity = 44;\n static RETURN = 45;\n}\n\nexport class Token {\n type: number;\n value: any;\n line?: number;\n col?: number;\n constructor(type: number, value: any, line: number = 1, col: number = 1) {\n this.type = type;\n this.value = value;\n this.line = line;\n this.col = col;\n }\n static from(type: number, value: any) {\n return new Token(type, value);\n }\n\n toString(): string {\n return `[${this.type.toString()}, ${this.value}]`;\n }\n}\n\n\nclass Chars {\n static equal = '='.charCodeAt(0);\n static comma = ','.charCodeAt(0);\n static semiColon = ';'.charCodeAt(0);\n static lparen = '('.charCodeAt(0);\n static rparen = ')'.charCodeAt(0);\n static backslash = '\\\\'.charCodeAt(0);\n static quote = '\"'.charCodeAt(0);\n static squote = \"'\".charCodeAt(0);\n static plus = \"+\".charCodeAt(0);\n static minus = \"-\".charCodeAt(0);\n static star = \"*\".charCodeAt(0);\n static slash = \"/\".charCodeAt(0);\n static percent = \"%\".charCodeAt(0);\n static lbrace = \"{\".charCodeAt(0);\n static rbrace = \"}\".charCodeAt(0);\n static lbracket = \"[\".charCodeAt(0);\n static rbracket = \"]\".charCodeAt(0);\n static not = \"!\".charCodeAt(0);\n static great = \">\".charCodeAt(0);\n static less = \"<\".charCodeAt(0);\n static and = \"&\".charCodeAt(0);\n static pipe = \"|\".charCodeAt(0);\n static colon = \":\".charCodeAt(0);\n static questionMark = \"?\".charCodeAt(0);\n static shebang = \"#\".charCodeAt(0);\n}\n\nexport class LexerDictionary {\n lang: string;\n keywords: { [key: string]: string } = {};\n constructor(lang: string, keywords: { [key: string]: string }) {\n this.keywords = { ...keywords };\n this.lang = lang;\n }\n}\n\n/**\n * Lexing => Parsing ===> AST ===> Walking\n */\n/**\n * Lexer\n */\nclass Lexer {\n static _defaultLanguage = new LexerDictionary(\"en\", {\n \"if\": \"if\",\n \"else\": \"else\",\n \"true\": \"true\",\n \"false\": \"false\",\n \"null\": \"null\",\n \"while\": \"while\",\n \"for\": \"for\",\n \"with\": \"with\",\n \"up\": \"up\",\n \"down\": \"down\",\n \"till\": \"till\",\n \"in\": \"in\",\n \"break\": \"break\",\n \"continue\": \"continue\",\n \"return\": \"return\",\n });\n static languages: LexerDictionary[] = [\n Lexer._defaultLanguage,\n new LexerDictionary(\"fr\", {\n \"si\": \"if\",\n \"sinon\": \"else\",\n \"vrai\": \"true\",\n \"faux\": \"false\",\n \"nul\": \"null\",\n \"tanque\": \"while\",\n \"pour\": \"for\",\n \"avec\": \"with\",\n \"mont\": \"up\",\n \"desc\": \"down\",\n \"jusqua\": \"till\",\n \"dans\": \"in\",\n \"couper\": \"break\",\n \"continuer\": \"continue\",\n \"returner\": \"return\",\n }),\n new LexerDictionary(\"bm\", {\n \"nii\": \"if\",\n \"note\": \"else\",\n \"tien\": \"true\",\n \"galon\": \"false\",\n \"gansan\": \"null\",\n \"foo\": \"while\",\n \"seginka\": \"for\",\n \"niin\": \"with\",\n \"kay\": \"up\",\n \"kaj\": \"down\",\n \"kata\": \"till\",\n \"kono\": \"in\",\n \"tike\": \"break\",\n \"ipan\": \"continue\",\n \"segin\": \"return\",\n }),\n ];\n static RESERVED: { [key: string]: Token } = {\n \"if\": Token.from(TokenType.IF, \"if\"),\n \"else\": Token.from(TokenType.ELSE, \"else\"),\n \"true\": Token.from(TokenType.TRUE, true),\n \"false\": Token.from(TokenType.FALSE, false),\n \"null\": Token.from(TokenType.NULL, null),\n \"for\": Token.from(TokenType.FOR_LOOP, \"for\"),\n \"while\": Token.from(TokenType.WHILE_TILL, \"while\"),\n \"with\": Token.from(TokenType.with, \"with\"),\n \"up\": Token.from(TokenType.up, \"up\"),\n \"down\": Token.from(TokenType.down, \"down\"),\n \"till\": Token.from(TokenType.TILL, \"till\"),\n \"in\": Token.from(TokenType.in, \"in\"),\n \"break\": Token.from(TokenType.BREAK, \"break\"),\n \"continue\": Token.from(TokenType.CONTINUE, \"continue\"),\n \"return\": Token.from(TokenType.RETURN, \"return\"),\n };\n _language?: LexerDictionary;\n _source!: string;\n _position = 0;\n _line = 1;\n _col = 1;\n _currentChar = -1;\n get source() {\n return this._source;\n }\n constructor(source: string) {\n this._source = source;\n this._currentChar = this._source[this._position].charCodeAt(0);\n this._resolveLanguage();\n }\n private _resolveLanguage() {\n let token = this.nextToken();\n if (token.type === TokenType.less) {\n // language setting\n const idToken = this.nextToken();\n if (idToken.type !== TokenType.id) {\n error(token);\n }\n const lang = idToken.value.toString();\n this._language = Lexer.languages.find((element) => element.lang === lang) ?? Lexer._defaultLanguage;\n token = this.nextToken();\n if (token.type !== TokenType.great) {\n error(token);\n }\n } else {\n this._language = Lexer._defaultLanguage;\n // reset reading\n this._position = 0;\n this._currentChar = this._source[this._position].charCodeAt(0);\n }\n }\n\n private _advance() {\n this._position++;\n if (this._position >= this._source.length) {\n this._currentChar = -1;\n return;\n }\n this._currentChar = this._source[this._position].charCodeAt(0);\n this._col++;\n }\n\n private _pick(): number {\n if (this._position + 1 >= this._source.length) {\n return -1;\n }\n return this._source[this._position + 1].charCodeAt(0);\n }\n\n private _isId(code: number): boolean {\n if (code < 48) {\n return code === 36;\n }\n if (code < 58) {\n return true;\n }\n if (code < 65) {\n return false;\n }\n if (code < 91) {\n return true;\n }\n if (code < 97) {\n return code === 95;\n }\n if (code < 123) {\n return true;\n }\n return false;\n }\n\n private _isIdStart(code: number): boolean {\n if (code < 65) {\n return code === 36;\n }\n if (code < 91) {\n return true;\n }\n if (code < 97) {\n return code === 95;\n }\n if (code < 123) {\n return true;\n }\n return false;\n }\n\n private _id(): Token {\n let ret = \"\";\n const lastC = this._col;\n const lastP = this._position;\n const line = this._line;\n while (this._isId(this._currentChar)) {\n ret += String.fromCharCode(this._currentChar);\n this._advance();\n }\n const translatedId = this._language\n ? (this._language.keywords[ret]) ?? ret\n : ret;\n return Lexer.RESERVED[translatedId] ?? new Token(TokenType.id, ret, line, lastC);\n }\n\n private _isLineEnd(c: number): boolean {\n return c === 10 ||\n c === 13 ||\n ['\\n', '\\r', '\\u2028', '\\u2029'].includes(String.fromCharCode(c));\n }\n\n private _isWhiteSpace(c: number): boolean {\n return [' ', '\\t'].includes(String.fromCharCode(c));\n }\n\n private _isDigit(c: number): boolean {\n // tslint:disable-next-line:no-bitwise\n return c > 0 && (c ^ 0x30) <= 9;\n }\n private _skipWhiteSpace() {\n while (this._isWhiteSpace(this._currentChar) === true) {\n this._advance();\n }\n }\n\n private _number(): Token {\n let ret = \"\";\n const lastC = this._col;\n const lastP = this._position;\n const line = this._line;\n const first = String.fromCharCode(this._currentChar);\n this._advance();\n const bc = String.fromCharCode(this._currentChar);\n let base = 10;\n if (first === '0' && ['b', 'B', 'x', 'X', 'o', 'O'].includes(bc)) {\n // look ahead to see that the number is tagged\n this._advance();\n switch (bc.toLowerCase()) {\n case 'b':\n base = 2;\n break;\n case \"o\":\n base = 8;\n break;\n case \"x\":\n base = 16;\n break;\n default:\n base = 10;\n }\n } else {\n ret += first;\n base = 10;\n }\n while (this._isDigit(this._currentChar) ||\n (base === 16 &&\n ['A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e', 'F', 'f']\n .includes(String.fromCharCode(this._currentChar)))) {\n ret += String.fromCharCode(this._currentChar);\n this._advance();\n }\n if (String.fromCharCode(this._currentChar) === '.' && this._isDigit(this._pick()) === true) {\n if (base !== 10) {\n error(new Token(TokenType.id, bc, line, lastP));\n }\n // floating number\n ret += String.fromCharCode(this._currentChar);\n this._advance();\n while (this._isDigit(this._currentChar)) {\n ret += String.fromCharCode(this._currentChar);\n this._advance();\n }\n return new Token(TokenType.numberConst, parseFloat(ret), line, lastC);\n }\n return new Token(\n TokenType.numberConst, parseInt(ret, base), line, lastC);\n }\n\n private _literalString(startChar: number): Token {\n let ret = \"\";\n let lastChar = -1;\n const lastP = this._position;\n const lastC = this._col;\n const lastL = this._line;\n while (this._currentChar !== -1) {\n const next = String.fromCharCode(this._pick());\n if (this._currentChar === Chars.backslash) {\n // scape char\n if ([\n startChar,\n '\\\\',\n '0',\n 'a',\n 'b',\n 'e',\n 'f',\n 'n',\n 'r',\n 't',\n 'u',\n 'U',\n 'v',\n 'x'\n ].includes(next)) {\n lastChar = this._currentChar;\n this._advance();\n continue;\n }\n }\n if (this._currentChar === startChar && lastChar !== Chars.backslash) {\n // end\n break;\n }\n\n ret += String.fromCharCode(this._currentChar);\n lastChar = this._currentChar;\n this._advance();\n }\n return new Token(TokenType.stringConst, ret, lastL, lastC);\n }\n\n private _skipLineComment() {\n while (!this._isLineEnd(this._currentChar) === true) {\n this._advance();\n }\n }\n private _skipComment() {\n while (this._currentChar !== -1) {\n if (this._currentChar === Chars.star && this._pick() === Chars.shebang) {\n // end of block comment\n this._advance();\n this._advance();\n break;\n }\n this._advance();\n }\n }\n // f=SUBMIT_FORM(xxx);\n // r = CALL_API(API_ID, f);\n // DISPLAY(\"MSG #r\")\n nextToken(): Token {\n const lastL = this._line;\n const lastC = this._col;\n const lastP = this._position;\n\n while (this._currentChar !== -1) {\n if (this._isLineEnd(this._currentChar)) {\n this._line++;\n this._col = 1;\n this._advance();\n return new Token(TokenType.eol, \"\\n\", lastL, lastC);\n }\n\n if (this._isWhiteSpace(this._currentChar)) {\n this._skipWhiteSpace();\n continue;\n }\n if (this._currentChar == Chars.shebang) {\n this._advance();\n if (this._currentChar === Chars.star) {\n // mutli block comment\n this._advance();\n this._skipComment();\n } else {\n this._skipLineComment();\n }\n continue;\n }\n if (this._isDigit(this._currentChar)) {\n return this._number();\n }\n if (this._isIdStart(this._currentChar)) {\n return this._id();\n }\n if (this._currentChar === Chars.equal) {\n this._advance();\n if (this._currentChar === Chars.equal) {\n this._advance();\n return new Token(TokenType.eqeq, \"==\", lastL, lastC);\n }\n return new Token(TokenType.equal, \"=\", lastL, lastC);\n }\n if (this._currentChar === Chars.great) {\n this._advance();\n if (this._currentChar === Chars.equal) {\n this._advance();\n return new Token(TokenType.greatEq, \">=\", lastL, lastC);\n }\n return new Token(TokenType.great, \">\", lastL, lastC);\n }\n if (this._currentChar === Chars.less) {\n this._advance();\n if (this._currentChar === Chars.equal) {\n this._advance();\n return new Token(TokenType.lessEq, \"<=\", lastL, lastC);\n }\n return new Token(TokenType.less, \"<\", lastL, lastC);\n }\n if (this._currentChar === Chars.semiColon) {\n this._advance();\n return new Token(TokenType.semi, \";\", lastL, lastC);\n }\n if (this._currentChar === Chars.lparen) {\n this._advance();\n return new Token(TokenType.lparen, \"(\", lastL, lastC);\n }\n if (this._currentChar === Chars.rparen) {\n this._advance();\n return new Token(TokenType.rparen, \")\", lastL, lastC);\n }\n if (this._currentChar === Chars.comma) {\n this._advance();\n return new Token(TokenType.comma, \",\", lastL, lastC);\n }\n if (this._currentChar === Chars.lbrace) {\n this._advance();\n return new Token(TokenType.lbrace, \"{\", lastL, lastC);\n }\n if (this._currentChar === Chars.rbrace) {\n this._advance();\n return new Token(TokenType.rbrace, \"}\", lastL, lastC);\n }\n if (this._currentChar === Chars.lbracket) {\n this._advance();\n return new Token(TokenType.lbracket, \"[\", lastL, lastC);\n }\n if (this._currentChar === Chars.rbracket) {\n this._advance();\n return new Token(TokenType.rbracket, \"]\", lastL, lastC);\n }\n if (this._currentChar === Chars.plus) {\n this._advance();\n return new Token(TokenType.plus, \"+\", lastL, lastC);\n }\n if (this._currentChar === Chars.minus) {\n this._advance();\n return new Token(TokenType.minus, \"-\", lastL, lastC);\n }\n if (this._currentChar === Chars.slash) {\n this._advance();\n return new Token(TokenType.div, \"/\", lastL, lastC);\n }\n if (this._currentChar === Chars.star) {\n this._advance();\n return new Token(TokenType.mult, \"*\", lastL, lastC);\n }\n if (this._currentChar === Chars.percent) {\n this._advance();\n return new Token(TokenType.mod, \"%\", lastL, lastC);\n }\n if (this._currentChar === Chars.colon) {\n this._advance();\n return new Token(TokenType.colon, \":\", lastL, lastC);\n }\n if (this._currentChar === Chars.not) {\n this._advance();\n if (this._currentChar === Chars.equal) {\n this._advance();\n return new Token(TokenType.notEq, \"!=\", lastL, lastC);\n }\n return new Token(TokenType.not, \"!\", lastL, lastC);\n }\n if (this._currentChar === Chars.and && this._pick() === Chars.and) {\n this._advance();\n this._advance();\n return new Token(TokenType.and, \"&&\", lastL, lastC);\n }\n if (this._currentChar === Chars.pipe && this._pick() === Chars.pipe) {\n this._advance();\n this._advance();\n return new Token(TokenType.or, '||', lastL, lastC);\n }\n if (this._currentChar === Chars.questionMark && this._pick() === Chars.questionMark) {\n this._advance();\n this._advance();\n return new Token(TokenType.nullity, '??', lastL, lastC);\n }\n if (this._currentChar === Chars.quote || this._currentChar === Chars.squote) {\n const startChar = this._currentChar;\n this._advance();\n const t = this._literalString(startChar);\n this._advance();\n return t;\n }\n return new Token(\n TokenType.invalid, String.fromCharCode(this._currentChar), lastL, lastC);\n }\n return new Token(TokenType.eof, \"\", lastL, lastC);\n }\n}\n\n\n/**\n * Parser\n */\n\nexport abstract class AST {\n line?: number;\n col?: number;\n constructor(line?: number, col?: number) {\n this.line = line;\n this.col = col;\n }\n dump(): string {\n return this.toString();\n }\n}\n\nexport class RootAST extends AST {\n body: AST[];\n source: string;\n name: string;\n constructor(body: AST[], name: string, source: string) {\n super(1, 1);\n this.body = body;\n this.name = name;\n this.source = source;\n }\n\n override dump(): string {\n let builder = `Module ${this.name} Start {`;\n for (const it of this.body) {\n builder += `${it.dump()}\\n`;\n }\n builder += \"}\";\n return builder;\n }\n}\n\nexport class BlockStatementAST extends AST {\n body: AST[];\n constructor(body: AST[], token: Token) {\n super(token.line, token.col);\n this.body = body;\n }\n override toString(): string {\n return `{\\n${this.body.map((e) => e.toString()).join(\"\\n\")}}`;\n }\n}\n\nexport class IdentifierAST extends AST {\n value: string;\n constructor(token: Token) {\n super(token.line, token.col);\n this.value = token.value.toString();\n }\n override toString(): string {\n return this.value;\n }\n}\n\nexport class LiteralAST extends AST {\n value: any;\n raw: string;\n constructor(token: Token, raw: string) {\n super(token.line, token.col);\n this.value = token.value;\n this.raw = raw;\n }\n override toString(): string {\n return this.value.toString();\n }\n}\n\nexport class AssignmentExpressionAST extends AST {\n identifier: AST;\n init: AST;\n constructor(identifier: AST, init: AST) {\n super(identifier.line, identifier.col);\n this.identifier = identifier;\n this.init = init;\n }\n override toString(): string {\n return `${this.identifier} = ${this.init}`;\n }\n}\n\nexport class ExpressionStatementAST extends AST {\n expression: AST;\n constructor(expression: AST) {\n super(expression.line, expression.col);\n this.expression = expression;\n }\n override toString(): string {\n return this.expression.toString();\n }\n}\n\nexport class CallExpressionAST extends AST {\n callee: IdentifierAST;\n arguments: AST[];\n constructor(callee: IdentifierAST, ags: AST[]) {\n super(callee.line, callee.col);\n this.callee = callee;\n this.arguments = ags;\n }\n override toString(): string {\n return `${this.callee.toString()}(...${this.arguments.length})`;\n }\n}\n\nexport class BinaryExpressionAST extends AST {\n left: AST;\n operation: Token;\n right: AST;\n constructor(left: AST, operation: Token, right: AST) {\n super(left.line, left.col);\n this.left = left;\n this.operation = operation;\n this.right = right;\n }\n override toString(): string {\n return `${this.left} ${this.operation} ${this.right}`;\n }\n}\n\nexport class UnaryExpressionAST extends AST {\n operation: Token;\n argument: AST;\n constructor(operation: Token, argument: AST) {\n super(operation.line, operation.col);\n this.operation = operation, this.argument = argument;\n }\n override toString(): string {\n return `${this.operation} ${this.argument}`;\n }\n}\n\nexport class IfStatementAST extends AST {\n test: AST;\n consequent: AST;\n alternate?: AST;\n constructor(test: AST, consequent: AST, alternate?: AST) {\n super(test.line, test.col);\n this.test = test;\n this.consequent = consequent;\n this.alternate = alternate;\n }\n\n override toString(): string {\n return `if ${this.test} ${this.consequent} ${this.alternate ? `else ${this.alternate} ` : ''}`;\n }\n}\n\nexport class LogicalExpressionAST extends AST {\n left: AST;\n operator: Token;\n right: AST;\n constructor(left: AST, operator: Token, right: AST) {\n super(left.line, left.col);\n this.left = left;\n this.operator = operator;\n this.right = right;\n }\n override toString(): string {\n return `${this.left} ${this.operator.value} ${this.right}`;\n }\n}\n\nexport class IndexAccessorAST extends AST {\n owner: AST;\n key: AST;\n computed: boolean = false;\n constructor(owner: AST, key: AST, computed: boolean = false) {\n super(owner.line, owner.col);\n this.owner = owner;\n this.key = key;\n this.computed = computed;\n }\n override toString(): string {\n return `${this.owner}[${this.key}]`;\n }\n}\n\nexport class ObjectExpression extends AST {\n properties: AST[];\n constructor(props: AST[], startToken?: Token, endToken?: Token) {\n super(startToken?.line, startToken?.col);\n this.properties = props;\n }\n override toString(): string {\n return \"{...}\";\n }\n}\n\nexport class ArrayExpression extends AST {\n elements: AST[];\n constructor(props: AST[], start?: AST, end?: AST) {\n super(start?.line, start?.col);\n this.elements = props;\n }\n override toString(): string {\n return \"[...]\";\n }\n}\nexport class ObjectProperty extends AST {\n key: AST;\n value: AST;\n constructor(key: AST, value: AST) {\n super(key.line, key.col);\n this.value = value;\n this.key = key;\n }\n}\nexport class WhileLoopStatement extends AST {\n test: AST;\n body: AST;\n retain: boolean = false;\n constructor(test: AST, body: AST, startToken?: Token, endToken?: Token, retain: boolean = false) {\n super(startToken?.line, startToken?.col);\n this.test = test;\n this.body = body;\n this.retain = retain;\n }\n}\nexport class ForLoopStatement extends AST {\n\n constructor(public init: AssignmentExpressionAST,\n public test: AST,\n public update: AST,\n public direction: Token,\n public body: AST,\n startToken?: Token,\n endToken?: Token,\n public retain: boolean = false) {\n super(startToken?.line, startToken?.col)\n }\n}\nexport class ForOfStatement extends AST {\n constructor(\n public identifier: AST,\n public collection: AST,\n public body: AST,\n startToken?: Token,\n endToken?: Token,\n public retain: boolean = false) {\n super(startToken?.line, startToken?.col)\n }\n}\nexport class TupleExpression extends AST {\n constructor(public first: AST, public second: AST) {\n super(first.line, first.col)\n }\n}\nexport class BreakAST extends AST {\n constructor(line?: number, col?: number) {\n super(line, col)\n }\n}\nexport class ReturnAST extends AST {\n value?: AST;\n constructor(value?: AST, line?: number, col?: number) {\n super(line, col)\n this.value = value;\n }\n}\nexport class ContinueAST extends AST {\n constructor(line?: number, col?: number) {\n super(line, col);\n }\n}\nclass Parser {\n static _binopPrecdences: { [k: number]: number } = {\n [TokenType.eqeq]: 10,\n [TokenType.notEq]: 10,\n [TokenType.great]: 10,\n [TokenType.greatEq]: 10,\n [TokenType.less]: 10,\n [TokenType.lessEq]: 10,\n [TokenType.plus]: 20,\n [TokenType.minus]: 20,\n [TokenType.mult]: 40,\n [TokenType.div]: 40,\n [TokenType.mod]: 40,\n };\n\n lexer!: Lexer;\n currentToken?: Token;\n constructor(lexer: Lexer) {\n this.currentToken = lexer.nextToken();\n this.lexer = lexer;\n }\n\n private _eat(type: TokenType) {\n if (this.currentToken?.type === type) {\n this.currentToken = this.lexer.nextToken();\n } else {\n error(this.currentToken!, type);\n }\n }\n\n private _eatEOL() {\n while (this.currentToken?.type === TokenType.eol) {\n this._eat(TokenType.eol);\n }\n }\n\n private _eatSemiOrEOL() {\n while (this.currentToken?.type === TokenType.eol ||\n this.currentToken?.type === TokenType.semi) {\n this._eat(this.currentToken!.type);\n }\n }\n\n private _eatSemi() {\n while (this.currentToken?.type === TokenType.semi) {\n this._eat(TokenType.semi);\n }\n }\n\n private _variable(): IdentifierAST {\n const node = new IdentifierAST(this.currentToken!);\n this._eat(TokenType.id);\n return node;\n }\n private _return(): AST {\n const token = this.currentToken;\n let value: AST | undefined = undefined;\n if (!this._expect(TokenType.eol) && !this._expect(TokenType.semi)) {\n value = this._expression()\n }\n return new ReturnAST(value, token?.line, token?.col);\n }\n private _factor(): AST {\n const token = this.currentToken!;\n switch (token.type) {\n case TokenType.plus:\n case TokenType.minus:\n case TokenType.not:\n this._eat(this.currentToken!.type);\n return new UnaryExpressionAST(token!, this._term());\n case TokenType.numberConst:\n this._eat(TokenType.numberConst);\n return new LiteralAST(token, token.value.toString());\n case TokenType.stringConst:\n this._eat(TokenType.stringConst);\n return new LiteralAST(token, token.value.toString());\n case TokenType.lparen:\n this._eat(TokenType.lparen);\n const node = this._expression();\n this._eat(TokenType.rparen);\n return node;\n case TokenType.TRUE:\n case TokenType.FALSE:\n this._eat(this.currentToken!.type);\n return new LiteralAST(token, token.value.toString());\n case TokenType.NULL:\n this._eat(TokenType.NULL);\n return new LiteralAST(token, \"null\");\n case TokenType.lbracket:\n // literal array expression\n return this._arrayExpression();\n case TokenType.lbrace:\n return this._objectExpression();\n default:\n return this._variable();\n }\n }\n\n private _term(): AST {\n let node = this._factor();\n node = this._tryParsingMemberExpression(node);\n node = this._tryParsingFunctionCall(node);\n return node;\n }\n\n private _expression(): AST {\n let node = this._term();\n node = this._tryBinaryExpression(0, node);\n while ([TokenType.and, TokenType.or, TokenType.nullity].includes(this.currentToken!.type)) {\n const token = this.currentToken!;\n this._eat(token.type);\n node = new LogicalExpressionAST(node, token, this._expression());\n }\n if (this._expect(TokenType.equal)) {\n if (node instanceof IdentifierAST || node instanceof IndexAccessorAST) {\n const token = this.currentToken!;\n this._eat(TokenType.equal);\n node = new AssignmentExpressionAST(node, this._expression());\n } else {\n throw new Error(\"Unexpected token\");\n }\n }\n return node;\n }\n private _objectProperty(): ObjectProperty {\n let key: AST;\n switch (this.currentToken?.type) {\n case TokenType.stringConst:\n {\n key = new LiteralAST(this.currentToken, this.currentToken.value);\n this._eat(TokenType.stringConst);\n break;\n }\n case TokenType.lbracket:\n {\n this._eat(TokenType.lbracket);\n var expr = this._expression();\n this._eat(TokenType.rbracket);\n key = expr;\n break;\n }\n case TokenType.id:\n {\n const id = this._variable();\n key = new LiteralAST(new Token(TokenType.id, id.value, id.line, id.col), id.value);\n break;\n }\n default:\n throw `Unexpected token ${this.currentToken}`;\n }\n this._eat(TokenType.colon);\n var value = this._expression();\n return new ObjectProperty(key!, value);\n }\n private _property(): AST {\n return this._objectProperty();\n }\n\n private _objectProperties(): AST[] {\n const properties: AST[] = [];\n if (this.currentToken?.type != TokenType.rbrace) {\n this._eatEOL();\n properties.push(this._property());\n this._eatEOL();\n }\n while (this.currentToken?.type === TokenType.comma) {\n this._eat(TokenType.comma);\n this._eatEOL();\n if (this._expect(TokenType.rbrace)) {\n break;\n }\n properties.push(this._property());\n this._eatEOL();\n }\n return properties;\n }\n\n private _objectExpression(braceToken?: Token): AST {\n var token = braceToken ?? this.currentToken;\n if (!braceToken) this._eat(TokenType.lbrace);\n var properties = this._objectProperties();\n this._eat(TokenType.rbrace);\n return new ObjectExpression(properties, token, this.currentToken);\n }\n\n private _arrayExpression(): AST {\n this._eat(TokenType.lbracket);\n const elements: AST[] = this._expect(TokenType.rbracket) ? [] : this._expressionsList();\n this._eat(TokenType.rbracket);\n var startNode = elements.length !== 0 ? elements[0] : undefined;\n var lastNode = elements.length !== 0 ? elements[elements.length - 1] : undefined;\n return new ArrayExpression(elements, startNode, lastNode);\n }\n private _tryParsingMemberExpression(n: AST): AST {\n let node = n;\n while (this.currentToken!.type === TokenType.lbracket) {\n this._eat(TokenType.lbracket);\n const key = this._expression();\n node = new IndexAccessorAST(node, key);\n this._eat(TokenType.rbracket);\n }\n return node;\n }\n\n private _tryBinaryExpression(prec: number, left: AST): AST {\n let node = left;\n while (true) {\n const currentPrec = Parser._binopPrecdences[this.currentToken!.type] || -1;\n if (currentPrec < prec) return node;\n const operator = this.currentToken!;\n this._eat(operator.type);\n let right = this._term();\n const nextPrec = Parser._binopPrecdences[this.currentToken!.type] || -1;\n if (currentPrec < nextPrec) {\n const tmp = this._tryBinaryExpression(currentPrec + 1, right);\n if (tmp === node) return tmp;\n right = tmp;\n }\n node = new BinaryExpressionAST(node, operator, right);\n }\n }\n\n private _expressionsList(): AST[] {\n this._eatEOL();\n // if (expect(Lexer.TokenType.RPAREN)) return emptyList()\n let expr = this._expression();\n this._eatEOL();\n const result = [expr];\n while (this.currentToken?.type === TokenType.comma) {\n this._eat(TokenType.comma);\n this._eatEOL();\n if (this._expect(TokenType.rbracket)) {\n break;\n }\n expr = this._expression();\n result.push(expr);\n this._eatEOL();\n }\n return result;\n }\n\n private _callExpression(node: AST): CallExpressionAST {\n this._eat(TokenType.lparen);\n let args: AST[] = [];\n if (!this._expect(TokenType.rparen)) {\n args = this._expressionsList();\n }\n this._eat(TokenType.rparen);\n if (!(node instanceof IdentifierAST)) {\n error(this.currentToken!);\n }\n return new CallExpressionAST(node as IdentifierAST, args);\n }\n\n private _tryParsingFunctionCall(n: AST): AST {\n let node = n;\n while (this.currentToken!.type === TokenType.lparen) {\n // probable function call\n node = this._callExpression(node);\n }\n return node;\n }\n\n private _statementExpression(): AST {\n\n const node = this._expression();\n\n if (![TokenType.semi, TokenType.eol, TokenType.eof]\n .includes(this.currentToken!.type)) {\n error(this.currentToken!);\n }\n return node;\n }\n\n private _blockStatement(ignoreFirstBrace = false): BlockStatementAST {\n if (!ignoreFirstBrace) this._eat(TokenType.lbrace);\n this._eatEOL();\n if (this._expect(TokenType.rbrace)) {\n this._eat(TokenType.rbrace);\n return new BlockStatementAST([], this.currentToken!);\n }\n // const body = _statements();\n const body = [this._statement()];\n while (true) {\n this._eatSemiOrEOL();\n if (this.currentToken!.type === TokenType.rbrace || this.currentToken!.type === TokenType.eof) {\n // _eat(this.currentToken!.type);\n break;\n }\n body.push(this._statement());\n if (this._expect(TokenType.rbrace)) break;\n if (this.currentToken!.type !== TokenType.eol &&\n this.currentToken!.type !== TokenType.semi &&\n this.currentToken!.type !== TokenType.eof) {\n error(this.currentToken!);\n }\n }\n this._eat(TokenType.rbrace);\n if (this.currentToken?.type === TokenType.rbrace) {\n // endBlock\n this._eat(TokenType.rbrace);\n }\n\n return new BlockStatementAST(body, this.currentToken!);\n }\n\n private _ifStatement(): IfStatementAST {\n this._eat(TokenType.IF);\n const withPar = this.currentToken!.type === TokenType.lparen;\n if (withPar) {\n this._eat(TokenType.lparen);\n }\n const test = this._expression();\n if (withPar) {\n this._eat(TokenType.rparen);\n }\n let consequent: AST;\n if (this.currentToken!.type === TokenType.lbrace) {\n consequent = this._blockStatement();\n } else {\n consequent = this._expression();\n }\n\n // this._eatSemiOrEOL();\n let alternate: AST | undefined;\n if (this.currentToken!.type === TokenType.ELSE) {\n this._eat(TokenType.ELSE);\n switch (this.currentToken!.type) {\n case TokenType.IF:\n alternate = this._ifStatement();\n break;\n case TokenType.lbrace:\n alternate = this._blockStatement();\n break;\n default:\n alternate = this._expression();\n }\n }\n\n return new IfStatementAST(test, consequent, alternate);\n }\n private _whileLoop(): WhileLoopStatement {\n const token = this.currentToken!;\n this._eat(TokenType.WHILE_TILL)\n const test = this._expression()\n const body = this.currentToken!.type === TokenType.lbrace ? this._blockStatement() : this._expression()\n return new WhileLoopStatement(test, body, token, this.currentToken!)\n }\n\n private _forOfIdentifier(): AST {\n switch (this.currentToken!.type) {\n case TokenType.lparen: {\n // probable tuple\n this._eat(TokenType.lparen)\n const first = this._variable()\n this._eat(TokenType.comma)\n const second = this._variable()\n this._eat(TokenType.rparen)\n return new TupleExpression(\n first,\n second\n );\n }\n // TokenType.LBRACE -> objectPattern()\n // TokenType.LBRACKET -> arrayPattern()\n default:\n return this._variable()\n }\n\n }\n /**\n * # ForLoopStatement with step\n * (seginka|for) a=0 (foo|to) 10 (kay|kaj) niin 2 { # for a = 0; a<10; a+=2\n *\n * }\n * (seginka|for) mali kono a\n */\n private _forLoop(): AST {\n const startToken = this.currentToken!;\n this._eat(TokenType.FOR_LOOP)\n let forOf =\n [TokenType.lparen].includes(this.currentToken!.type);\n let node: AST;\n if (forOf) {\n node = this._forOfIdentifier();\n } else {\n const expr = this._expression();\n if (!(expr instanceof AssignmentExpressionAST)) {\n forOf = true;\n }\n node = expr;\n }\n\n\n if (!forOf && node instanceof AssignmentExpressionAST) {\n // normal for\n this._eat(TokenType.TILL);\n const test = this._expression();\n let direction: Token;\n\n if (this.currentToken!.type === TokenType.up || this.currentToken!.type === TokenType.down) {\n const t = this.currentToken!;\n this._eat(t.type)\n direction = t\n } else {\n direction = new Token(TokenType.up, \"up\");\n }\n let update;\n if (this._expect(TokenType.with)) {\n this._eat(TokenType.with)\n const expr = this._expression();\n update = expr\n } else {\n update = new LiteralAST(new Token(TokenType.numberConst, 1, this.currentToken!.line, this.currentToken!.col), \"1\");\n }\n\n const body = (this.currentToken!.type === TokenType.lbrace) ? this._blockStatement() : this._expression()\n\n node = new ForLoopStatement(node, test, update, direction, body, startToken, this.currentToken!);\n } else if (forOf) {\n this._eat(TokenType.in);\n const collection = this._expression();\n const body = (this.currentToken!!.type === TokenType.lbrace) ? this._blockStatement() : this._expression()\n node = new ForOfStatement(\n node,\n collection,\n body,\n startToken,\n this.currentToken!\n )\n } else {\n error(this.currentToken!);\n }\n return node\n }\n\n private _statement(): AST {\n switch (this.currentToken!.type) {\n case TokenType.BREAK:\n this._eat(TokenType.BREAK);\n return new BreakAST(this.currentToken?.line, this.currentToken?.col);\n case TokenType.CONTINUE:\n this._eat(TokenType.CONTINUE);\n return new ContinueAST(this.currentToken?.line, this.currentToken?.col);\n case TokenType.RETURN:\n this._eat(TokenType.RETURN)\n return this._return();\n case TokenType.semi:\n this._eatSemi();\n return this._statement();\n case TokenType.eol:\n this._eatEOL();\n return this._statement();\n case TokenType.IF:\n return this._ifStatement();\n case TokenType.WHILE_TILL:\n return this._whileLoop();\n case TokenType.FOR_LOOP:\n return this._forLoop();\n default:\n return this._statementExpression();\n }\n }\n\n private _expect(type: TokenType) {\n return this.currentToken?.type === type;\n }\n private _definition(): AST[] {\n this._eatSemiOrEOL();\n\n if (this._expect(TokenType.eof)) {\n return [];\n }\n const results = [this._statement()];\n while (true) {\n this._eatSemiOrEOL();\n if (this.currentToken!.type === TokenType.eof) {\n this._eat(TokenType.eof);\n break;\n }\n if (this.currentToken!.type === TokenType.lbrace) {\n results.push(this._blockStatement());\n } else {\n results.push(this._statement());\n }\n // if (this.currentToken!.type !== TokenType.eol &&\n // this.currentToken!.type !== TokenType.semi &&\n // this.currentToken!.type !== TokenType.eof) {\n // error(this.currentToken!);\n // }\n }\n return results;\n }\n\n private _root(): RootAST {\n const source = this.lexer.source;\n const name = \"<module>\";\n const list = this._definition();\n return new RootAST(list, name, source);\n }\n\n parse(): AST {\n return this._root();\n }\n}\n\n\nexport class LoopControl {\n}\nexport class BreakBranch extends LoopControl { }\nexport class ContinueBranch extends LoopControl { }\nexport class ReturnBranch {\n value: any;\n constructor(value: any) {\n this.value = value;\n }\n};\n\ntype Func = (node: any) => any;\n// AST Wallker\nabstract class ANodeVisitor {\n protected _nodesVisitors: { [k: string]: Func } = {};\n protected registerVisitor(type: Type<AST>, visitor: Func) {\n const methodName = `visit${type.name}`;\n this._nodesVisitors[methodName] = visitor;\n }\n\n abstract visit(node: AST): any;\n}\n\n\nexport abstract class NodeVisitor extends ANodeVisitor {\n constructor() {\n super();\n this.registerVisitor(RootAST, this.visitRootAST);\n this.registerVisitor(BlockStatementAST, this.visitBlockStatementAST);\n this.registerVisitor(IdentifierAST, this.visitIdentifierAST);\n this.registerVisitor(LiteralAST, this.visitLiteralAST);\n this.registerVisitor(AssignmentExpressionAST, this.visitAssignmentExpressionAST);\n this.registerVisitor(ExpressionStatementAST, this.visitExpressionStatementAST);\n this.registerVisitor(CallExpressionAST, this.visitCallExpressionAST);\n this.registerVisitor(BinaryExpressionAST, this.visitBinaryExpressionAST);\n this.registerVisitor(UnaryExpressionAST, this.visitUnaryExpressionAST);\n this.registerVisitor(IfStatementAST, this.visitIfStatementAST);\n this.registerVisitor(LogicalExpressionAST, this.visitLogicalExpressionAST);\n this.registerVisitor(IndexAccessorAST, this.visitIndexAccessorAST);\n this.registerVisitor(ObjectProperty, this.visitObjectProperty);\n this.registerVisitor(ObjectExpression, this.visitObjectExpression);\n this.registerVisitor(ArrayExpression, this.visitArrayExpression);\n\n this.registerVisitor(WhileLoopStatement, this.visitWhileLoopStatement);\n this.registerVisitor(ForLoopStatement, this.visitForLoopStatement);\n this.registerVisitor(ForOfStatement, this.visitForOfStatement);\n this.registerVisitor(BreakAST, this.visitBreakAST);\n this.registerVisitor(ContinueAST, this.visitContinueAST);\n this.registerVisitor(ReturnAST, this.visitReturnAST);\n }\n override visit(node: AST): any {\n try {\n const methodName = `visit${node.constructor.name}`;\n // const fn = Object.getPrototypeOf(this)[methodName];\n const fn = this._nodesVisitors[methodName];\n return fn?.call(this, node) ?? null;\n } catch (error) {\n return null;\n }\n }\n protected assignProperty(owner: any, property: any, value: any): any {\n if (Array.isArray(owner)) {\n owner[property] = value;\n } else if (typeof owner === 'object') {\n owner[property] = value;\n } else { }\n }\n\n\n protected abstract visitRootAST(node: RootAST): any;\n protected abstract visitBlockStatementAST(node: BlockStatementAST): any;\n protected abstract visitIdentifierAST(node: IdentifierAST): any;\n protected abstract visitLiteralAST(node: AST): any;\n protected abstract visitAssignmentExpressionAST(node: AssignmentExpressionAST): any;\n\n protected abstract visitExpressionStatementAST(node: ExpressionStatementAST): any;\n protected abstract visitCallExpressionAST(node: CallExpressionAST): any;\n\n protected abstract visitBinaryExpressionAST(node: BinaryExpressionAST): any;\n protected abstract visitUnaryExpressionAST(node: UnaryExpressionAST): any;\n protected abstract visitIfStatementAST(node: IfStatementAST): any;\n protected abstract visitLogicalExpressionAST(node: LogicalExpressionAST): any;\n protected abstract visitIndexAccessorAST(node: IndexAccessorAST): any;\n protected abstract visitObjectProperty(node: AST): any;\n protected abstract visitObjectExpression(ast: AST): any;\n protected abstract visitArrayExpression(ast: AST): any;\n protected abstract visitBreakAST(node: BreakAST): any;\n protected abstract visitWhileLoopStatement(node: WhileLoopStatement): any;\n\n protected abstract visitForLoopStatement(node: ForLoopStatement): any;\n\n protected abstract visitForOfStatement(node: ForOfStatement): any;\n protected abstract visitContinueAST(node: ContinueAST): any;\n protected abstract visitReturnAST(node: ReturnAST): any;\n}\nexport class MEventScope {\n name: string;\n parent?: MEventScope;\n memory: { [k: string]: any } = {};\n constructor(name: string, memory: { [k: string]: any }, parent?: MEventScope) {\n this.name = name;\n this.memory = memory;\n this.parent = parent;\n }\n resolve(key: string): any {\n return Object.keys(this.memory).includes(key) ? this.memory[key] : (this.parent?.resolve(key) ?? null);\n }\n change(key: string, value: any, declare = true): boolean {\n if (Object.keys(this.memory).includes(key)) {\n // change here\n this.memory[key] = value;\n return true;\n }\n if (this.parent && this.parent.change(key, value, false)) {\n return true;\n }\n if (!declare) {\n return false;\n }\n this.memory[key] = value;\n return true;\n }\n}\nexport type MEventoFBinding = (args: any[], vm: MEvento) => any;\nexport class MEvento extends NodeVisitor {\n\n rootScope: MEventScope = new MEventScope(\"Program\", {});\n protected currentScope?: MEventScope = this.rootScope;\n\n debug = false;\n private static _globalFunctionsRegistry: { [k: string]: MEventoFBinding } = {};\n private static _cache: Map<number, AST> = new Map();\n protected _functionsRegistry: { [k: string]: MEventoFBinding } = {};\n protected _functionResolver?: (name: string) => MEventoFBinding | undefined;\n constructor() {\n super();\n this._functionsRegistry = { ...MEvento._globalFunctionsRegistry };\n }\n\n protected resolve(name: string): any {\n return this.currentScope?.resolve(name) ?? null;\n }\n protected changeVariable(name: string, value: any): any {\n if (this.currentScope?.change(name, value)) {\n return value;\n } else return null;\n }\n protected pushScope(name: string) {\n const scope = new MEventScope(name, {}, this.currentScope);\n this.currentScope = scope;\n }\n protected popScope() {\n this.currentScope = this.currentScope?.parent;\n }\n protected log(message: any) {\n if (this.debug) {\n console.log(message)\n }\n }\n protected override visitRootAST(node: RootAST): any {\n const list = node.body;\n let last;\n for (const n of list) {\n last = this.visit(n);\n if (last instanceof ReturnBranch) {\n return last.value ?? null;\n }\n }\n return last ?? null;\n }\n\n protected override visitBlockStatementAST(node: BlockStatementAST): any {\n const list = node.body;\n let last;\n this.pushScope(\"Block\");\n for (const n of list) {\n last = this.visit(n);\n if (last instanceof LoopControl) {\n break;\n }\n if (last instanceof ReturnBranch) {\n break;\n }\n }\n this.popScope();\n return last ?? null;\n }\n\n protected override visitIdentifierAST(node: IdentifierAST): any {\n const id = node.value;\n return this?.resolve(id) ?? null;\n }\n\n protected override visitLiteralAST(node: AST): any {\n const value = (node as LiteralAST).value;\n return value;\n }\n\n protected override visitAssignmentExpressionAST(node: AssignmentExpressionAST): any {\n\n const id: AST = node.identifier;\n\n const init: AST = node.init;\n let value: any = null;\n if (id instanceof IndexAccessorAST) {\n var target = this.visit(id.owner);\n value = this.visit(node.init);\n var property = this.visit(id.key);\n this.assignProperty(target, property, value);\n } else if (id instanceof IdentifierAST) {\n value = this.visit(init);\n this.changeVariable(id.value, value);\n }\n return value;\n }\n\n protected override visitExpressionStatementAST(node: ExpressionStatementAST): any {\n const expr = node.expression;\n return this.visit(expr);\n }\n\n protected override visitCallExpressionAST(node: CallExpressionAST) {\n const callee = node.callee;\n const args = node.arguments;\n const calleeName = callee.value;\n const fn = this.resolveFunction(calleeName);\n const argValues = args.map((e) => this.visit(e));\n // print(\"argValues::\", argValues)\n return fn?.(argValues, this);\n }\n\n protected override visitBinaryExpressionAST(node: BinaryExpressionAST): any {\n const left = node.left;\n const right = node.right;\n const op = node.operation;\n const lValue = this.visit(left);\n const rValue = this.visit(right);\n switch (op.type) {\n case TokenType.plus:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue + rValue;\n }\n return `${lValue}${rValue}`;\n case TokenType.minus:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue - rValue;\n }\n if (isString(lValue) && isNum(rValue)) {\n return lValue * rValue;\n }\n if (isNum(lValue) && isString(rValue)) {\n return rValue * lValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.mult:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue * rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.div:\n if (isNum(lValue) && isNum(rValue)) {\n if (rValue === 0) {\n throw new Error(\"Invalid division by 0\");\n }\n return lValue / rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.mod:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue % rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.great:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue > rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.greatEq:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue >= rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.less:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue < rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.lessEq:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue <= rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.eqeq:\n return lValue === rValue;\n case TokenType.notEq:\n return lValue !== rValue;\n default:\n throw new Error(`Operation ${op.value} not allowed no num value`);\n }\n }\n\n protected override visitUnaryExpressionAST(node: UnaryExpressionAST): any {\n const arg = node.argument;\n const op = node.operation;\n const argValue = this.visit(arg);\n if (op.type === TokenType.not) {\n return _boolValue(argValue) === false;\n }\n if (isNum(argValue)) {\n throw new Error(`Operation ${op.value} not allowed no num value`);\n }\n if (op.type === TokenType.plus) {\n return argValue;\n } else if (op.type === TokenType.minus) {\n return -argValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n }\n\n protected override visitIfStatementAST(node: IfStatementAST): any {\n const testNode: AST = node.test;\n const test = this.visit(testNode);\n const testBoolValue = _boolValue(test);\n\n if (testBoolValue) {\n return this.visit(node.consequent);\n }\n if (node.alternate) {\n return this.visit(node.alternate!);\n }\n\n return null;\n }\n\n\n\n protected override visitLogicalExpressionAST(node: LogicalExpressionAST): any {\n const leftNode = node.left;\n let test = this.visit(leftNode);\n if (node.operator.type === TokenType.nullity) {\n if (test != null) {\n return test;\n }\n return this.visit(node.right)\n }\n const testBoolValue = _boolValue(test);\n if (node.operator.type === TokenType.and) {\n if (!testBoolValue) {\n return false;\n }\n return _boolValue(this.visit(node.right));\n }\n\n if (node.operator.type === TokenType.or) {\n if (testBoolValue) {\n return true;\n }\n return _boolValue(this.visit(node.right));\n }\n return null;\n }\n\n protected override visitIndexAccessorAST(node: IndexAccessorAST): any {\n const ownerNode = (node as IndexAccessorAST).owner;\n const owner = this.visit(ownerNode);\n if (owner === null || owner === undefined) {\n return null;\n }\n if (typeof owner === 'object') {\n const key = this.visit(node.key);\n return owner[key] ?? null;\n } else if (Array.isArray(owner)) {\n const key = this.visit(node.key);\n return isNum(key) && owner.length < key && key >= 0 ? owner[key] ?? null : null;\n }\n return null;\n }\n\n protected override visitObjectProperty(node: AST): any { }\n\n protected override visitObjectExpression(ast: AST): any {\n const instance: any = {};\n const node = ast as ObjectExpression;\n for (const it of node.properties) {\n if (it instanceof ObjectProperty) {\n let key = this.visit(it.key);\n key = isString(key) ? key : key.toString();\n instance[key] = this.visit(it.value);\n }\n }\n return instance;\n }\n\n protected override visitArrayExpression(ast: AST): any {\n const node = ast as ArrayExpression;\n const args = this.resolveArguments(node.elements);\n return args;\n }\n protected override visitBreakAST(node: BreakAST) {\n return new BreakBranch();\n }\n protected override visitWhileLoopStatement(node: WhileLoopStatement): any {\n this.log(`WhileLoopStatement ${node.test} ${node.body}`)\n const retainer: any[] | undefined = node.retain ? [] : undefined;\n while (_boolValue(this.visit(node.test))) {\n const ret = this.visit(node.body)\n if (ret instanceof BreakBranch) {\n break;\n }\n if (ret instanceof ContinueBranch) {\n continue;\n } \n if (ret instanceof ReturnBranch) {\n this.popScope();\n return ret;\n }\n retainer?.push(ret)\n }\n return retainer ?? null;\n }\n\n protected override visitForLoopStatement(node: ForLoopStatement): any {\n const retainer: any[] | undefined = node.retain ? [] : undefined;\n const loopIdentifier = node.init.identifier\n if (!(loopIdentifier instanceof IdentifierAST)) throw new Error(\"Unexpected identifer found\")\n this.pushScope(\"ForLoopStatement\");\n const initialValue = this.visit(node.init.init)\n this.changeVariable(loopIdentifier.value, initialValue)\n retainer?.push(initialValue)\n const test = () => {\n const ret = this.visit(node.test)\n if (isNum(ret)) {\n const tmp = this.resolve(loopIdentifier.value)\n return node.direction.type === TokenType.up ? ret >= tmp : ret <= tmp\n }\n return _boolValue(ret);\n }\n const update = () => {\n const updateValue = this.visit(node.update);\n if (isNum(updateValue)) {\n // auto handle\n const tmp = this.resolve(loopIdentifier.value);\n if (!isNum(tmp)) throw Error(\"Cant update value\");\n this.changeVariable(loopIdentifier.value, node.direction.type === TokenType.up ? tmp + updateValue : tmp - updateValue);\n } else {\n throw Error(\"Update value cant be non number\");\n }\n }\n while (test()) {\n const ret = this.visit(node.body)\n if (ret instanceof BreakBranch) {\n break;\n }\n if (ret instanceof ContinueBranch) {\n update();\n continue;\n }\n if (ret instanceof ReturnBranch) {\n this.popScope();\n return ret;\n }\n retainer?.push(ret)\n // update\n update();\n }\n this.popScope();\n return retainer ?? null;\n }\n\n protected override visitForOfStatement(node: ForOfStatement): any {\n const collection = this.visit(node.collection);\n if (!Array.isArray(collection)) {\n throw Error(\"Can iterate non array object\")\n }\n const retainer: any[] | undefined = node.retain ? [] : undefined;\n this.pushScope(\"ForOfStatement\");\n for (const it of collection) {\n this._declareForIdentifier(node.identifier, it)\n const ret = this.visit(node.body)\n if (ret instanceof BreakBranch) {\n break;\n }\n if (ret instanceof ContinueBranch) {\n continue;\n }\n if (ret instanceof ReturnBranch) {\n this.popScope();\n return ret;\n }\n retainer?.push(ret)\n }\n this.popScope();\n return retainer ?? null;\n }\n protected override visitContinueAST(node: ContinueAST) {\n return new ContinueBranch();\n }\n protected visitReturnAST(node: ReturnAST): any {\n return new ReturnBranch(node.value != null ? this.visit(node.value) : null);\n }\n protected _declareForIdentifier(node: AST, value: any): any {\n if (node instanceof TupleExpression) {\n if (!Array.isArray(value)) {\n throw Error(\"Unable to make a tuple from non Array element\")\n }\n this.changeVariable((node.first as IdentifierAST).value, value[0]);\n this.changeVariable((node.second as IdentifierAST).value, value[1]);\n }\n this.changeVariable((node as IdentifierAST).value, value);\n }\n resolveArguments(args: AST[]): any {\n return args.map((it: AST) => {\n return this.visit(it);\n });\n }\n setFunctionResolver(resolver: (name: string) => MEventoFBinding | undefined) {\n this._functionResolver = resolver;\n }\n resolveFunction(name: string): MEventoFBinding | undefined {\n return this._functionsRegistry[name] ?? this._functionResolver?.(name);\n }\n registerFunction(id: string, fn: MEventoFBinding) {\n this._functionsRegistry[id] = fn;\n }\n\n unregisterFunction(id: string) {\n delete this._functionsRegistry[id];\n }\n\n execute(source: string, cache = true) {\n const module = MEvento.compile(source, cache);\n return this.visit(module);\n }\n\n static compile(source: string, cache = false): AST {\n const hash = hashCode(source);\n if (cache && this._cache.has(hash)) {\n return this._cache.get(hash)!;\n }\n const lexer = new Lexer(source);\n const parser = new Parser(lexer);\n const module = parser.parse();\n\n if (cache) this._cache.set(hash, module);\n return module;\n }\n\n static register(id: string, fn: MEventoFBinding) {\n MEvento._globalFunctionsRegistry[id] = fn;\n }\n\n static unregister(id: string) {\n delete MEvento._globalFunctionsRegistry[id];\n }\n\n static run(source: string, cache = false) {\n const mevento = new MEvento();\n const module = MEvento.compile(source, cache);\n return mevento.visit(module);\n }\n\n static newInstance(): MEvento {\n // const lexer = Lexer(source);\n // const parser = Parser(lexer);\n // const module = parser.parse();\n return new MEvento();\n }\n\n clone(): MEvento {\n var ret = new MEvento();\n ret._functionsRegistry = { ... this._functionsRegistry };\n ret.rootScope.memory = { ...this.rootScope.memory };\n return ret;\n }\n newAsyncInstance(): MEventoAsync {\n const asyncIns = MEventoAsync.newInstance();\n asyncIns.rootScope.memory = this.rootScope.memory;\n /// ????\n asyncIns._functionsRegistry = this._functionsRegistry;\n return asyncIns;\n };\n\n}\n\nexport class MEventoAsync extends MEvento {\n\n constructor() {\n super();\n }\n\n protected override async visitRootAST(node: RootAST) {\n const list = node.body;\n let last;\n for (const n of list) {\n last = await this.visit(n);\n if (last instanceof ReturnBranch) {\n return last.value ?? null;\n }\n }\n return last ?? null;\n }\n protected override async visitBlockStatementAST(node: BlockStatementAST): Promise<any> {\n const list = node.body;\n let last;\n this.pushScope(\"Block\");\n for (const n of list) {\n last = await this.visit(n);\n if (last instanceof LoopControl) {\n break;\n }\n if (last instanceof ReturnBranch) {\n break;\n }\n }\n this.popScope();\n return last;\n }\n protected override async visitIdentifierAST(node: AST): Promise<any> {\n const id = (node as IdentifierAST).value;\n return this.resolve(id);\n }\n protected override async visitLiteralAST(node: LiteralAST): Promise<any> {\n const value = node.value;\n return value;\n }\n protected override async visitAssignmentExpressionAST(node: AssignmentExpressionAST) {\n const id: AST = node.identifier;\n\n const init: AST = node.init;\n let value: any = null;\n if (id instanceof IndexAccessorAST) {\n var target = await this.visit(id.owner);\n value = await this.visit(node.init);\n var property = await this.visit(id.key);\n this.assignProperty(target, property, value);\n } else if (id instanceof IdentifierAST) {\n value = await this.visit(init);\n this.changeVariable(id.value, value);\n }\n return value;\n }\n protected override async visitExpressionStatementAST(node: ExpressionStatementAST) {\n const expr = node.expression;\n return await this.visit(expr);\n }\n protected override async visitCallExpressionAST(node: CallExpressionAST) {\n const callee = node.callee;\n const args = node.arguments;\n const calleeName = callee.value;\n const fn = this._functionsRegistry[calleeName];\n const argValues = await Promise.all(args.map((e) => this.visit(e)));\n // print(\"argValues::\", argValues)\n return await fn?.(argValues, this);\n }\n protected override async visitBinaryExpressionAST(node: BinaryExpressionAST) {\n const left = node.left;\n const right = node.right;\n const op = node.operation;\n const lValue = await this.visit(left);\n const rValue = await this.visit(right);\n switch (op.type) {\n case TokenType.plus:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue + rValue;\n }\n return `${lValue}${rValue}`;\n case TokenType.minus:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue - rValue;\n }\n if (isString(lValue) && isNum(rValue)) {\n return lValue * rValue;\n }\n if (isNum(lValue) && isString(rValue)) {\n return rValue * lValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.mult:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue * rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.div:\n if (isNum(lValue) && isNum(rValue)) {\n if (rValue === 0) {\n throw new Error(\"Invalid division by 0\");\n }\n return lValue / rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.mod:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue % rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.great:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue > rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.greatEq:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue >= rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.less:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue < rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.lessEq:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue <= rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.eqeq:\n return lValue === rValue;\n case TokenType.notEq:\n return lValue !== rValue;\n default:\n throw new Error(`Operation ${op.value} not allowed no num value`);\n }\n }\n protected override async visitUnaryExpressionAST(node: UnaryExpressionAST) {\n const arg = node.argument;\n const op = node.operation;\n const argValue = await this.visit(arg);\n if (op.type === TokenType.not) {\n return _boolValue(argValue) === false;\n }\n if (isNum(argValue)) {\n throw new Error(`Operation ${op.value} not allowed no num value`);\n }\n if (op.type === TokenType.plus) {\n return argValue;\n } else if (op.type === TokenType.minus) {\n return -argValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n }\n protected override async visitIfStatementAST(node: IfStatementAST) {\n const testNode: AST = node.test;\n const test = await this.visit(testNode);\n const testBoolValue = _boolValue(test);\n\n if (testBoolValue) {\n return await this.visit(node.consequent);\n }\n if (node.alternate) {\n return await this.visit(node.alternate!);\n }\n\n return null;\n }\n protected override async visitLogicalExpressionAST(node: LogicalExpressionAST) {\n const leftNode = node.left;\n let test = await this.visit(leftNode);\n if (node.operator.type === TokenType.nullity) {\n if (test != null) {\n return test;\n }\n return await this.visit(node.right)\n }\n const testBoolValue = _boolValue(test);\n if (node.operator.type === TokenType.and) {\n if (!testBoolValue) {\n return false;\n }\n return _boolValue(await this.visit(node.right));\n }\n if (node.operator.type === TokenType.or) {\n if (testBoolValue) {\n return true;\n }\n\n return _boolValue(await this.visit(node.right));\n }\n return false;\n }\n protected override async visitIndexAccessorAST(node: IndexAccessorAST) {\n const ownerNode = (node as IndexAccessorAST).owner;\n const owner = await this.visit(ownerNode);\n if (owner === null || owner === undefined) {\n return null;\n }\n if (typeof owner === 'object') {\n const key = await this.visit(node.key);\n return owner[key] ?? null;\n } else if (Array.isArray(owner)) {\n const key = await this.visit(node.key);\n return isNum(key) && owner.length < key && key >= 0 ? owner[key] ?? null : null;\n }\n return null;\n }\n protected override async visitObjectProperty(node: AST) { }\n\n protected override async visitObjectExpression(ast: AST) {\n const instance: any = {};\n const node = ast as ObjectExpression;\n for (const it of node.properties) {\n if (it instanceof ObjectProperty) {\n let key = await this.visit(it.key);\n key = isString(key) ? key : key.toString();\n instance[key] = await this.visit(it.value);\n }\n }\n return instance;\n }\n\n protected override async visitArrayExpression(ast: AST) {\n const node = ast as ArrayExpression;\n const args = await this.resolveArgumentsAsync(node.elements);\n return args;\n }\n protected override async visitWhileLoopStatement(node: WhileLoopStatement) {\n this.log(`WhileLoopStatement ${node.test} ${node.body}`)\n const retainer: any[] | undefined = node.retain ? [] : undefined;\n while (_boolValue(await this.visit(node.test))) {\n const ret = await this.visit(node.body)\n if (ret instanceof BreakBranch) {\n break;\n }\n if (ret instanceof ContinueBranch) {\n continue;\n }\n if (ret instanceof ReturnBranch) {\n this.popScope();\n return ret;\n }\n retainer?.push(ret)\n }\n return retainer;\n }\n\n protected override async visitForLoopStatement(node: ForLoopStatement) {\n const retainer: any[] | undefined = node.retain ? [] : undefined;\n const loopIdentifier = node.init.identifier\n if (!(loopIdentifier instanceof IdentifierAST)) throw new Error(\"Unexpected identifer found\")\n this.pushScope(\"ForLoopStatement\");\n const initialValue = await this.visit(node.init.init)\n this.changeVariable(loopIdentifier.value, initialValue);\n retainer?.push(initialValue)\n const test = async () => {\n const ret = await this.visit(node.test)\n if (isNum(ret)) {\n const tmp = this.resolve(loopIdentifier.value);\n return node.direction.type === TokenType.up ? ret >= tmp : ret <= tmp\n }\n return _boolValue(ret);\n }\n const update = async () => {\n const updateValue = await this.visit(node.update);\n if (isNum(updateValue)) {\n // auto handle\n const tmp = this.resolve(loopIdentifier.value);\n if (!isNum(tmp)) throw Error(\"Cant update value\");\n this.changeVariable(loopIdentifier.value, node.direction.type === TokenType.up ? tmp + updateValue : tmp - updateValue);\n } else {\n throw Error(\"Update value cant be non number\");\n }\n }\n while (await test()) {\n const ret = await this.visit(node.body)\n if (ret instanceof BreakBranch) {\n break;\n }\n if (ret instanceof ContinueBranch) {\n await update();\n continue;\n }\n if (ret instanceof ReturnBranch) {\n this.popScope();\n return ret;\n }\n retainer?.push(ret)\n // update\n await update();\n }\n this.popScope();\n return retainer ?? null;\n }\n\n protected override async visitForOfStatement(node: ForOfStatement) {\n const collection = await this.visit(node.collection);\n if (!Array.isArray(collection)) {\n throw Error(\"Can iterate non array object\")\n }\n const retainer: any[] | undefined = node.retain ? [] : undefined;\n this.pushScope(\"ForOfStatement\");\n for (const it of collection) {\n this._declareForIdentifier(node.identifier, it)\n const ret = await this.visit(node.body)\n if (ret instanceof BreakBranch) {\n break;\n }\n if (ret instanceof ContinueBranch) {\n continue;\n }\n if (ret instanceof ReturnBranch) {\n this.popScope();\n return ret;\n }\n retainer?.push(ret)\n }\n this.popScope();\n return retainer;\n }\n\n protected override async visitReturnAST(node: ReturnAST): Promise<any> {\n return new ReturnBranch(node.value != null ? await this.visit(node.value) : null);\n }\n async resolveArgumentsAsync(args: AST[]): Promise<any[]> {\n return await Promise.all(args.map(async (it: AST) => {\n return await this.visit(it);\n }));\n }\n override registerFunction(id: string, fn: MEventoFBinding) {\n this._functionsRegistry[id] = fn;\n }\n\n override unregisterFunction(id: string) {\n delete this._functionsRegistry[id];\n }\n override async execute(source: string, cache = true) {\n const module = MEvento.compile(source, cache);\n return await this.visit(module);\n }\n\n static override async run(source: string, cache = false) {\n const mevento = new MEventoAsync();\n const module = MEvento.compile(source, cache);\n return await mevento.visit(module);\n }\n\n static override newInstance(): MEventoAsync {\n return new MEventoAsync();\n }\n\n\n override clone(): MEventoAsync {\n var ret = new MEventoAsync();\n ret._functionsRegistry = { ...this._functionsRegistry };\n ret.rootScope.memory = { ...this.rootScope.memory };\n return ret;\n }\n}\n","/*\n * Public API Surface of mevento\n */\n\nexport * from './lib/mevento';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mevento.mjs","sources":["../../../projects/mevento/src/lib/mevento.ts","../../../projects/mevento/src/public-api.ts","../../../projects/mevento/src/mevento.ts"],"sourcesContent":["import { Type } from \"@angular/core\";\n\nfunction error(token: Token, expected?: TokenType) {\n const text =\n `Invalid token ${token.type}[${token.value}] at ${token.line}, ${token.col} ${expected ? `: expecting ${expected} token` : ''}\\n`;\n throw Error(text);\n}\nfunction isNum(value: any) {\n return typeof value === 'number';\n}\nfunction isBoolean(value: any) {\n return typeof value === 'boolean';\n}\nfunction isString(value: any) {\n return typeof value === 'string';\n}\nfunction _boolValue(test: any): boolean {\n return (test === null ||\n (isNum(test) && test === 0) ||\n (isString(test) && test.length === 0) ||\n (isBoolean(test) && !test)) ? false : true;\n};\n\nfunction hashCode(str: string) {\n let hash = 0;\n let i = 0;\n let chr;\n if (str.length === 0) return hash;\n for (i = 0; i < str.length; i++) {\n chr = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + chr;\n hash |= 0; // Convert to 32bit integer\n }\n return hash;\n};\nexport class TokenType {\n static id = 0;\n static comma = 1;\n static semi = 2;\n static numberConst = 3;\n static stringConst = 4;\n static equal = 5;\n static lparen = 6\n static rparen = 7;\n static eol = 8;\n static eof = 9;\n static lbrace = 10;\n static rbrace = 11;\n static lbracket = 12;\n static rbracket = 13;\n static great = 14;\n static greatEq = 15;\n static less = 16;\n static lessEq = 17;\n static eqeq = 18;\n static IF = 19;\n static ELSE = 20;\n static TRUE = 21;\n static FALSE = 22;\n static NULL = 23;\n static not = 24;\n static notEq = 25;\n static and = 26;\n static or = 27;\n static plus = 28;\n static minus = 29;\n static div = 30;\n static mult = 31;\n static mod = 32;\n static invalid = 33;\n static colon = 34;\n static WHILE_TILL = 35;\n static FOR_LOOP = 36;\n static up = 37;\n static down = 38;\n static with = 39;\n static in = 40;\n static TILL = 41;\n static BREAK = 42;\n static CONTINUE = 43;\n static nullity = 44;\n static RETURN = 45;\n}\n\nexport class Token {\n type: number;\n value: any;\n line?: number;\n col?: number;\n constructor(type: number, value: any, line: number = 1, col: number = 1) {\n this.type = type;\n this.value = value;\n this.line = line;\n this.col = col;\n }\n static from(type: number, value: any) {\n return new Token(type, value);\n }\n\n toString(): string {\n return `[${this.type.toString()}, ${this.value}]`;\n }\n}\n\n\nclass Chars {\n static equal = '='.charCodeAt(0);\n static comma = ','.charCodeAt(0);\n static semiColon = ';'.charCodeAt(0);\n static lparen = '('.charCodeAt(0);\n static rparen = ')'.charCodeAt(0);\n static backslash = '\\\\'.charCodeAt(0);\n static quote = '\"'.charCodeAt(0);\n static squote = \"'\".charCodeAt(0);\n static plus = \"+\".charCodeAt(0);\n static minus = \"-\".charCodeAt(0);\n static star = \"*\".charCodeAt(0);\n static slash = \"/\".charCodeAt(0);\n static percent = \"%\".charCodeAt(0);\n static lbrace = \"{\".charCodeAt(0);\n static rbrace = \"}\".charCodeAt(0);\n static lbracket = \"[\".charCodeAt(0);\n static rbracket = \"]\".charCodeAt(0);\n static not = \"!\".charCodeAt(0);\n static great = \">\".charCodeAt(0);\n static less = \"<\".charCodeAt(0);\n static and = \"&\".charCodeAt(0);\n static pipe = \"|\".charCodeAt(0);\n static colon = \":\".charCodeAt(0);\n static questionMark = \"?\".charCodeAt(0);\n static shebang = \"#\".charCodeAt(0);\n}\n\nexport class LexerDictionary {\n lang: string;\n keywords: { [key: string]: string } = {};\n constructor(lang: string, keywords: { [key: string]: string }) {\n this.keywords = { ...keywords };\n this.lang = lang;\n }\n}\n\n/**\n * Lexing => Parsing ===> AST ===> Walking\n */\n/**\n * Lexer\n */\nclass Lexer {\n static _defaultLanguage = new LexerDictionary(\"en\", {\n \"if\": \"if\",\n \"else\": \"else\",\n \"true\": \"true\",\n \"false\": \"false\",\n \"null\": \"null\",\n \"while\": \"while\",\n \"for\": \"for\",\n \"with\": \"with\",\n \"up\": \"up\",\n \"down\": \"down\",\n \"till\": \"till\",\n \"in\": \"in\",\n \"break\": \"break\",\n \"continue\": \"continue\",\n \"return\": \"return\",\n });\n static languages: LexerDictionary[] = [\n Lexer._defaultLanguage,\n new LexerDictionary(\"fr\", {\n \"si\": \"if\",\n \"sinon\": \"else\",\n \"vrai\": \"true\",\n \"faux\": \"false\",\n \"nul\": \"null\",\n \"tanque\": \"while\",\n \"pour\": \"for\",\n \"avec\": \"with\",\n \"mont\": \"up\",\n \"desc\": \"down\",\n \"jusqua\": \"till\",\n \"dans\": \"in\",\n \"couper\": \"break\",\n \"continuer\": \"continue\",\n \"returner\": \"return\",\n }),\n new LexerDictionary(\"bm\", {\n \"nii\": \"if\",\n \"note\": \"else\",\n \"tien\": \"true\",\n \"galon\": \"false\",\n \"gansan\": \"null\",\n \"foo\": \"while\",\n \"seginka\": \"for\",\n \"niin\": \"with\",\n \"kay\": \"up\",\n \"kaj\": \"down\",\n \"kata\": \"till\",\n \"kono\": \"in\",\n \"tike\": \"break\",\n \"ipan\": \"continue\",\n \"segin\": \"return\",\n }),\n ];\n static RESERVED: { [key: string]: Token } = {\n \"if\": Token.from(TokenType.IF, \"if\"),\n \"else\": Token.from(TokenType.ELSE, \"else\"),\n \"true\": Token.from(TokenType.TRUE, true),\n \"false\": Token.from(TokenType.FALSE, false),\n \"null\": Token.from(TokenType.NULL, null),\n \"for\": Token.from(TokenType.FOR_LOOP, \"for\"),\n \"while\": Token.from(TokenType.WHILE_TILL, \"while\"),\n \"with\": Token.from(TokenType.with, \"with\"),\n \"up\": Token.from(TokenType.up, \"up\"),\n \"down\": Token.from(TokenType.down, \"down\"),\n \"till\": Token.from(TokenType.TILL, \"till\"),\n \"in\": Token.from(TokenType.in, \"in\"),\n \"break\": Token.from(TokenType.BREAK, \"break\"),\n \"continue\": Token.from(TokenType.CONTINUE, \"continue\"),\n \"return\": Token.from(TokenType.RETURN, \"return\"),\n };\n _language?: LexerDictionary;\n _source!: string;\n _position = 0;\n _line = 1;\n _col = 1;\n _currentChar = -1;\n get source() {\n return this._source;\n }\n constructor(source: string) {\n this._source = source;\n this._currentChar = this._source[this._position].charCodeAt(0);\n this._resolveLanguage();\n }\n private _resolveLanguage() {\n let token = this.nextToken();\n if (token.type === TokenType.less) {\n // language setting\n const idToken = this.nextToken();\n if (idToken.type !== TokenType.id) {\n error(token);\n }\n const lang = idToken.value.toString();\n this._language = Lexer.languages.find((element) => element.lang === lang) ?? Lexer._defaultLanguage;\n token = this.nextToken();\n if (token.type !== TokenType.great) {\n error(token);\n }\n } else {\n this._language = Lexer._defaultLanguage;\n // reset reading\n this._position = 0;\n this._currentChar = this._source[this._position].charCodeAt(0);\n }\n }\n\n private _advance() {\n this._position++;\n if (this._position >= this._source.length) {\n this._currentChar = -1;\n return;\n }\n this._currentChar = this._source[this._position].charCodeAt(0);\n this._col++;\n }\n\n private _pick(): number {\n if (this._position + 1 >= this._source.length) {\n return -1;\n }\n return this._source[this._position + 1].charCodeAt(0);\n }\n\n private _isId(code: number): boolean {\n if (code < 48) {\n return code === 36;\n }\n if (code < 58) {\n return true;\n }\n if (code < 65) {\n return false;\n }\n if (code < 91) {\n return true;\n }\n if (code < 97) {\n return code === 95;\n }\n if (code < 123) {\n return true;\n }\n return false;\n }\n\n private _isIdStart(code: number): boolean {\n if (code < 65) {\n return code === 36;\n }\n if (code < 91) {\n return true;\n }\n if (code < 97) {\n return code === 95;\n }\n if (code < 123) {\n return true;\n }\n return false;\n }\n\n private _id(): Token {\n let ret = \"\";\n const lastC = this._col;\n const lastP = this._position;\n const line = this._line;\n while (this._isId(this._currentChar)) {\n ret += String.fromCharCode(this._currentChar);\n this._advance();\n }\n const translatedId = this._language\n ? (this._language.keywords[ret]) ?? ret\n : ret;\n return Lexer.RESERVED[translatedId] ?? new Token(TokenType.id, ret, line, lastC);\n }\n\n private _isLineEnd(c: number): boolean {\n return c === 10 ||\n c === 13 ||\n ['\\n', '\\r', '\\u2028', '\\u2029'].includes(String.fromCharCode(c));\n }\n\n private _isWhiteSpace(c: number): boolean {\n return [' ', '\\t'].includes(String.fromCharCode(c));\n }\n\n private _isDigit(c: number): boolean {\n // tslint:disable-next-line:no-bitwise\n return c > 0 && (c ^ 0x30) <= 9;\n }\n private _skipWhiteSpace() {\n while (this._isWhiteSpace(this._currentChar) === true) {\n this._advance();\n }\n }\n\n private _number(): Token {\n let ret = \"\";\n const lastC = this._col;\n const lastP = this._position;\n const line = this._line;\n const first = String.fromCharCode(this._currentChar);\n this._advance();\n const bc = String.fromCharCode(this._currentChar);\n let base = 10;\n if (first === '0' && ['b', 'B', 'x', 'X', 'o', 'O'].includes(bc)) {\n // look ahead to see that the number is tagged\n this._advance();\n switch (bc.toLowerCase()) {\n case 'b':\n base = 2;\n break;\n case \"o\":\n base = 8;\n break;\n case \"x\":\n base = 16;\n break;\n default:\n base = 10;\n }\n } else {\n ret += first;\n base = 10;\n }\n while (this._isDigit(this._currentChar) ||\n (base === 16 &&\n ['A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e', 'F', 'f']\n .includes(String.fromCharCode(this._currentChar)))) {\n ret += String.fromCharCode(this._currentChar);\n this._advance();\n }\n if (String.fromCharCode(this._currentChar) === '.' && this._isDigit(this._pick()) === true) {\n if (base !== 10) {\n error(new Token(TokenType.id, bc, line, lastP));\n }\n // floating number\n ret += String.fromCharCode(this._currentChar);\n this._advance();\n while (this._isDigit(this._currentChar)) {\n ret += String.fromCharCode(this._currentChar);\n this._advance();\n }\n return new Token(TokenType.numberConst, parseFloat(ret), line, lastC);\n }\n return new Token(\n TokenType.numberConst, parseInt(ret, base), line, lastC);\n }\n\n private _literalString(startChar: number): Token {\n let ret = \"\";\n let lastChar = -1;\n const lastP = this._position;\n const lastC = this._col;\n const lastL = this._line;\n while (this._currentChar !== -1) {\n const next = String.fromCharCode(this._pick());\n if (this._currentChar === Chars.backslash) {\n // scape char\n if ([\n startChar,\n '\\\\',\n '0',\n 'a',\n 'b',\n 'e',\n 'f',\n 'n',\n 'r',\n 't',\n 'u',\n 'U',\n 'v',\n 'x'\n ].includes(next)) {\n lastChar = this._currentChar;\n this._advance();\n continue;\n }\n }\n if (this._currentChar === startChar && lastChar !== Chars.backslash) {\n // end\n break;\n }\n\n ret += String.fromCharCode(this._currentChar);\n lastChar = this._currentChar;\n this._advance();\n }\n return new Token(TokenType.stringConst, ret, lastL, lastC);\n }\n\n private _skipLineComment() {\n while (!this._isLineEnd(this._currentChar) === true) {\n this._advance();\n }\n }\n private _skipComment() {\n while (this._currentChar !== -1) {\n if (this._currentChar === Chars.star && this._pick() === Chars.shebang) {\n // end of block comment\n this._advance();\n this._advance();\n break;\n }\n this._advance();\n }\n }\n // f=SUBMIT_FORM(xxx);\n // r = CALL_API(API_ID, f);\n // DISPLAY(\"MSG #r\")\n nextToken(): Token {\n const lastL = this._line;\n const lastC = this._col;\n const lastP = this._position;\n\n while (this._currentChar !== -1) {\n if (this._isLineEnd(this._currentChar)) {\n this._line++;\n this._col = 1;\n this._advance();\n return new Token(TokenType.eol, \"\\n\", lastL, lastC);\n }\n\n if (this._isWhiteSpace(this._currentChar)) {\n this._skipWhiteSpace();\n continue;\n }\n if (this._currentChar == Chars.shebang) {\n this._advance();\n if (this._currentChar === Chars.star) {\n // mutli block comment\n this._advance();\n this._skipComment();\n } else {\n this._skipLineComment();\n }\n continue;\n }\n if (this._isDigit(this._currentChar)) {\n return this._number();\n }\n if (this._isIdStart(this._currentChar)) {\n return this._id();\n }\n if (this._currentChar === Chars.equal) {\n this._advance();\n if (this._currentChar === Chars.equal) {\n this._advance();\n return new Token(TokenType.eqeq, \"==\", lastL, lastC);\n }\n return new Token(TokenType.equal, \"=\", lastL, lastC);\n }\n if (this._currentChar === Chars.great) {\n this._advance();\n if (this._currentChar === Chars.equal) {\n this._advance();\n return new Token(TokenType.greatEq, \">=\", lastL, lastC);\n }\n return new Token(TokenType.great, \">\", lastL, lastC);\n }\n if (this._currentChar === Chars.less) {\n this._advance();\n if (this._currentChar === Chars.equal) {\n this._advance();\n return new Token(TokenType.lessEq, \"<=\", lastL, lastC);\n }\n return new Token(TokenType.less, \"<\", lastL, lastC);\n }\n if (this._currentChar === Chars.semiColon) {\n this._advance();\n return new Token(TokenType.semi, \";\", lastL, lastC);\n }\n if (this._currentChar === Chars.lparen) {\n this._advance();\n return new Token(TokenType.lparen, \"(\", lastL, lastC);\n }\n if (this._currentChar === Chars.rparen) {\n this._advance();\n return new Token(TokenType.rparen, \")\", lastL, lastC);\n }\n if (this._currentChar === Chars.comma) {\n this._advance();\n return new Token(TokenType.comma, \",\", lastL, lastC);\n }\n if (this._currentChar === Chars.lbrace) {\n this._advance();\n return new Token(TokenType.lbrace, \"{\", lastL, lastC);\n }\n if (this._currentChar === Chars.rbrace) {\n this._advance();\n return new Token(TokenType.rbrace, \"}\", lastL, lastC);\n }\n if (this._currentChar === Chars.lbracket) {\n this._advance();\n return new Token(TokenType.lbracket, \"[\", lastL, lastC);\n }\n if (this._currentChar === Chars.rbracket) {\n this._advance();\n return new Token(TokenType.rbracket, \"]\", lastL, lastC);\n }\n if (this._currentChar === Chars.plus) {\n this._advance();\n return new Token(TokenType.plus, \"+\", lastL, lastC);\n }\n if (this._currentChar === Chars.minus) {\n this._advance();\n return new Token(TokenType.minus, \"-\", lastL, lastC);\n }\n if (this._currentChar === Chars.slash) {\n this._advance();\n return new Token(TokenType.div, \"/\", lastL, lastC);\n }\n if (this._currentChar === Chars.star) {\n this._advance();\n return new Token(TokenType.mult, \"*\", lastL, lastC);\n }\n if (this._currentChar === Chars.percent) {\n this._advance();\n return new Token(TokenType.mod, \"%\", lastL, lastC);\n }\n if (this._currentChar === Chars.colon) {\n this._advance();\n return new Token(TokenType.colon, \":\", lastL, lastC);\n }\n if (this._currentChar === Chars.not) {\n this._advance();\n if (this._currentChar === Chars.equal) {\n this._advance();\n return new Token(TokenType.notEq, \"!=\", lastL, lastC);\n }\n return new Token(TokenType.not, \"!\", lastL, lastC);\n }\n if (this._currentChar === Chars.and && this._pick() === Chars.and) {\n this._advance();\n this._advance();\n return new Token(TokenType.and, \"&&\", lastL, lastC);\n }\n if (this._currentChar === Chars.pipe && this._pick() === Chars.pipe) {\n this._advance();\n this._advance();\n return new Token(TokenType.or, '||', lastL, lastC);\n }\n if (this._currentChar === Chars.questionMark && this._pick() === Chars.questionMark) {\n this._advance();\n this._advance();\n return new Token(TokenType.nullity, '??', lastL, lastC);\n }\n if (this._currentChar === Chars.quote || this._currentChar === Chars.squote) {\n const startChar = this._currentChar;\n this._advance();\n const t = this._literalString(startChar);\n this._advance();\n return t;\n }\n return new Token(\n TokenType.invalid, String.fromCharCode(this._currentChar), lastL, lastC);\n }\n return new Token(TokenType.eof, \"\", lastL, lastC);\n }\n}\n\n\n/**\n * Parser\n */\n\nexport abstract class AST {\n line?: number;\n col?: number;\n constructor(line?: number, col?: number) {\n this.line = line;\n this.col = col;\n }\n dump(): string {\n return this.toString();\n }\n}\n\nexport class RootAST extends AST {\n body: AST[];\n source: string;\n name: string;\n constructor(body: AST[], name: string, source: string) {\n super(1, 1);\n this.body = body;\n this.name = name;\n this.source = source;\n }\n\n override dump(): string {\n let builder = `Module ${this.name} Start {`;\n for (const it of this.body) {\n builder += `${it.dump()}\\n`;\n }\n builder += \"}\";\n return builder;\n }\n}\n\nexport class BlockStatementAST extends AST {\n body: AST[];\n constructor(body: AST[], token: Token) {\n super(token.line, token.col);\n this.body = body;\n }\n override toString(): string {\n return `{\\n${this.body.map((e) => e.toString()).join(\"\\n\")}}`;\n }\n}\n\nexport class IdentifierAST extends AST {\n value: string;\n constructor(token: Token) {\n super(token.line, token.col);\n this.value = token.value.toString();\n }\n override toString(): string {\n return this.value;\n }\n}\n\nexport class LiteralAST extends AST {\n value: any;\n raw: string;\n constructor(token: Token, raw: string) {\n super(token.line, token.col);\n this.value = token.value;\n this.raw = raw;\n }\n override toString(): string {\n return this.value.toString();\n }\n}\n\nexport class AssignmentExpressionAST extends AST {\n identifier: AST;\n init: AST;\n constructor(identifier: AST, init: AST) {\n super(identifier.line, identifier.col);\n this.identifier = identifier;\n this.init = init;\n }\n override toString(): string {\n return `${this.identifier} = ${this.init}`;\n }\n}\n\nexport class ExpressionStatementAST extends AST {\n expression: AST;\n constructor(expression: AST) {\n super(expression.line, expression.col);\n this.expression = expression;\n }\n override toString(): string {\n return this.expression.toString();\n }\n}\n\nexport class CallExpressionAST extends AST {\n callee: IdentifierAST;\n arguments: AST[];\n constructor(callee: IdentifierAST, ags: AST[]) {\n super(callee.line, callee.col);\n this.callee = callee;\n this.arguments = ags;\n }\n override toString(): string {\n return `${this.callee.toString()}(...${this.arguments.length})`;\n }\n}\n\nexport class BinaryExpressionAST extends AST {\n left: AST;\n operation: Token;\n right: AST;\n constructor(left: AST, operation: Token, right: AST) {\n super(left.line, left.col);\n this.left = left;\n this.operation = operation;\n this.right = right;\n }\n override toString(): string {\n return `${this.left} ${this.operation} ${this.right}`;\n }\n}\n\nexport class UnaryExpressionAST extends AST {\n operation: Token;\n argument: AST;\n constructor(operation: Token, argument: AST) {\n super(operation.line, operation.col);\n this.operation = operation, this.argument = argument;\n }\n override toString(): string {\n return `${this.operation} ${this.argument}`;\n }\n}\n\nexport class IfStatementAST extends AST {\n test: AST;\n consequent: AST;\n alternate?: AST;\n constructor(test: AST, consequent: AST, alternate?: AST) {\n super(test.line, test.col);\n this.test = test;\n this.consequent = consequent;\n this.alternate = alternate;\n }\n\n override toString(): string {\n return `if ${this.test} ${this.consequent} ${this.alternate ? `else ${this.alternate} ` : ''}`;\n }\n}\n\nexport class LogicalExpressionAST extends AST {\n left: AST;\n operator: Token;\n right: AST;\n constructor(left: AST, operator: Token, right: AST) {\n super(left.line, left.col);\n this.left = left;\n this.operator = operator;\n this.right = right;\n }\n override toString(): string {\n return `${this.left} ${this.operator.value} ${this.right}`;\n }\n}\n\nexport class IndexAccessorAST extends AST {\n owner: AST;\n key: AST;\n computed: boolean = false;\n constructor(owner: AST, key: AST, computed: boolean = false) {\n super(owner.line, owner.col);\n this.owner = owner;\n this.key = key;\n this.computed = computed;\n }\n override toString(): string {\n return `${this.owner}[${this.key}]`;\n }\n}\n\nexport class ObjectExpression extends AST {\n properties: AST[];\n constructor(props: AST[], startToken?: Token, endToken?: Token) {\n super(startToken?.line, startToken?.col);\n this.properties = props;\n }\n override toString(): string {\n return \"{...}\";\n }\n}\n\nexport class ArrayExpression extends AST {\n elements: AST[];\n constructor(props: AST[], start?: AST, end?: AST) {\n super(start?.line, start?.col);\n this.elements = props;\n }\n override toString(): string {\n return \"[...]\";\n }\n}\nexport class ObjectProperty extends AST {\n key: AST;\n value: AST;\n constructor(key: AST, value: AST) {\n super(key.line, key.col);\n this.value = value;\n this.key = key;\n }\n}\nexport class WhileLoopStatement extends AST {\n test: AST;\n body: AST;\n retain: boolean = false;\n constructor(test: AST, body: AST, startToken?: Token, endToken?: Token, retain: boolean = false) {\n super(startToken?.line, startToken?.col);\n this.test = test;\n this.body = body;\n this.retain = retain;\n }\n}\nexport class ForLoopStatement extends AST {\n\n constructor(public init: AssignmentExpressionAST,\n public test: AST,\n public update: AST,\n public direction: Token,\n public body: AST,\n startToken?: Token,\n endToken?: Token,\n public retain: boolean = false) {\n super(startToken?.line, startToken?.col)\n }\n}\nexport class ForOfStatement extends AST {\n constructor(\n public identifier: AST,\n public collection: AST,\n public body: AST,\n startToken?: Token,\n endToken?: Token,\n public retain: boolean = false) {\n super(startToken?.line, startToken?.col)\n }\n}\nexport class TupleExpression extends AST {\n constructor(public first: AST, public second: AST) {\n super(first.line, first.col)\n }\n}\nexport class BreakAST extends AST {\n constructor(line?: number, col?: number) {\n super(line, col)\n }\n}\nexport class ReturnAST extends AST {\n value?: AST;\n constructor(value?: AST, line?: number, col?: number) {\n super(line, col)\n this.value = value;\n }\n}\nexport class ContinueAST extends AST {\n constructor(line?: number, col?: number) {\n super(line, col);\n }\n}\nclass Parser {\n static _binopPrecdences: { [k: number]: number } = {\n [TokenType.eqeq]: 10,\n [TokenType.notEq]: 10,\n [TokenType.great]: 10,\n [TokenType.greatEq]: 10,\n [TokenType.less]: 10,\n [TokenType.lessEq]: 10,\n [TokenType.plus]: 20,\n [TokenType.minus]: 20,\n [TokenType.mult]: 40,\n [TokenType.div]: 40,\n [TokenType.mod]: 40,\n };\n\n lexer!: Lexer;\n currentToken?: Token;\n constructor(lexer: Lexer) {\n this.currentToken = lexer.nextToken();\n this.lexer = lexer;\n }\n\n private _eat(type: TokenType) {\n if (this.currentToken?.type === type) {\n this.currentToken = this.lexer.nextToken();\n } else {\n error(this.currentToken!, type);\n }\n }\n\n private _eatEOL() {\n while (this.currentToken?.type === TokenType.eol) {\n this._eat(TokenType.eol);\n }\n }\n\n private _eatSemiOrEOL() {\n while (this.currentToken?.type === TokenType.eol ||\n this.currentToken?.type === TokenType.semi) {\n this._eat(this.currentToken!.type);\n }\n }\n\n private _eatSemi() {\n while (this.currentToken?.type === TokenType.semi) {\n this._eat(TokenType.semi);\n }\n }\n\n private _variable(): IdentifierAST {\n const node = new IdentifierAST(this.currentToken!);\n this._eat(TokenType.id);\n return node;\n }\n private _return(): AST {\n const token = this.currentToken;\n let value: AST | undefined = undefined;\n if (!this._expect(TokenType.eol) && !this._expect(TokenType.semi)) {\n value = this._expression()\n }\n return new ReturnAST(value, token?.line, token?.col);\n }\n private _factor(): AST {\n const token = this.currentToken!;\n switch (token.type) {\n case TokenType.plus:\n case TokenType.minus:\n case TokenType.not:\n this._eat(this.currentToken!.type);\n return new UnaryExpressionAST(token!, this._term());\n case TokenType.numberConst:\n this._eat(TokenType.numberConst);\n return new LiteralAST(token, token.value.toString());\n case TokenType.stringConst:\n this._eat(TokenType.stringConst);\n return new LiteralAST(token, token.value.toString());\n case TokenType.lparen:\n this._eat(TokenType.lparen);\n const node = this._expression();\n this._eat(TokenType.rparen);\n return node;\n case TokenType.TRUE:\n case TokenType.FALSE:\n this._eat(this.currentToken!.type);\n return new LiteralAST(token, token.value.toString());\n case TokenType.NULL:\n this._eat(TokenType.NULL);\n return new LiteralAST(token, \"null\");\n case TokenType.lbracket:\n // literal array expression\n return this._arrayExpression();\n case TokenType.lbrace:\n return this._objectExpression();\n case TokenType.IF:\n return this._ifStatement();\n default:\n return this._variable();\n }\n }\n\n private _term(): AST {\n let node = this._factor();\n node = this._tryParsingFunctionCall(node);\n node = this._tryParsingMemberExpression(node);\n return node;\n }\n\n private _expression(): AST {\n let node = this._term();\n node = this._tryBinaryExpression(0, node);\n while ([TokenType.and, TokenType.or, TokenType.nullity].includes(this.currentToken!.type)) {\n const token = this.currentToken!;\n this._eat(token.type);\n node = new LogicalExpressionAST(node, token, this._expression());\n }\n if (this._expect(TokenType.equal)) {\n if (node instanceof IdentifierAST || node instanceof IndexAccessorAST) {\n const token = this.currentToken!;\n this._eat(TokenType.equal);\n node = new AssignmentExpressionAST(node, this._expression());\n } else {\n throw new Error(\"Unexpected token\");\n }\n }\n return node;\n }\n private _objectProperty(): ObjectProperty {\n let key: AST;\n switch (this.currentToken?.type) {\n case TokenType.stringConst:\n {\n key = new LiteralAST(this.currentToken, this.currentToken.value);\n this._eat(TokenType.stringConst);\n break;\n }\n case TokenType.lbracket:\n {\n this._eat(TokenType.lbracket);\n var expr = this._expression();\n this._eat(TokenType.rbracket);\n key = expr;\n break;\n }\n case TokenType.id:\n {\n const id = this._variable();\n key = new LiteralAST(new Token(TokenType.id, id.value, id.line, id.col), id.value);\n break;\n }\n default:\n throw `Unexpected token ${this.currentToken}`;\n }\n this._eat(TokenType.colon);\n var value = this._expression();\n return new ObjectProperty(key!, value);\n }\n private _property(): AST {\n return this._objectProperty();\n }\n\n private _objectProperties(): AST[] {\n const properties: AST[] = [];\n if (this.currentToken?.type != TokenType.rbrace) {\n this._eatEOL();\n properties.push(this._property());\n this._eatEOL();\n }\n while (this.currentToken?.type === TokenType.comma) {\n this._eat(TokenType.comma);\n this._eatEOL();\n if (this._expect(TokenType.rbrace)) {\n break;\n }\n properties.push(this._property());\n this._eatEOL();\n }\n return properties;\n }\n\n private _objectExpression(braceToken?: Token): AST {\n var token = braceToken ?? this.currentToken;\n if (!braceToken) this._eat(TokenType.lbrace);\n var properties = this._objectProperties();\n this._eat(TokenType.rbrace);\n return new ObjectExpression(properties, token, this.currentToken);\n }\n\n private _arrayExpression(): AST {\n this._eat(TokenType.lbracket);\n const elements: AST[] = this._expect(TokenType.rbracket) ? [] : this._expressionsList();\n this._eat(TokenType.rbracket);\n var startNode = elements.length !== 0 ? elements[0] : undefined;\n var lastNode = elements.length !== 0 ? elements[elements.length - 1] : undefined;\n return new ArrayExpression(elements, startNode, lastNode);\n }\n private _tryParsingMemberExpression(n: AST): AST {\n let node = n;\n while (this.currentToken!.type === TokenType.lbracket) {\n this._eat(TokenType.lbracket);\n const key = this._expression();\n node = new IndexAccessorAST(node, key);\n this._eat(TokenType.rbracket);\n }\n return node;\n }\n\n private _tryBinaryExpression(prec: number, left: AST): AST {\n let node = left;\n while (true) {\n const currentPrec = Parser._binopPrecdences[this.currentToken!.type] || -1;\n if (currentPrec < prec) return node;\n const operator = this.currentToken!;\n this._eat(operator.type);\n let right = this._term();\n const nextPrec = Parser._binopPrecdences[this.currentToken!.type] || -1;\n if (currentPrec < nextPrec) {\n const tmp = this._tryBinaryExpression(currentPrec + 1, right);\n if (tmp === node) return tmp;\n right = tmp;\n }\n node = new BinaryExpressionAST(node, operator, right);\n }\n }\n\n private _expressionsList(): AST[] {\n this._eatEOL();\n // if (expect(Lexer.TokenType.RPAREN)) return emptyList()\n let expr = this._expression();\n this._eatEOL();\n const result = [expr];\n while (this.currentToken?.type === TokenType.comma) {\n this._eat(TokenType.comma);\n this._eatEOL();\n if (this._expect(TokenType.rbracket)) {\n break;\n }\n expr = this._expression();\n result.push(expr);\n this._eatEOL();\n }\n return result;\n }\n\n private _callExpression(node: AST): CallExpressionAST {\n this._eat(TokenType.lparen);\n let args: AST[] = [];\n if (!this._expect(TokenType.rparen)) {\n args = this._expressionsList();\n }\n this._eat(TokenType.rparen);\n if (!(node instanceof IdentifierAST)) {\n error(this.currentToken!);\n }\n return new CallExpressionAST(node as IdentifierAST, args);\n }\n\n private _tryParsingFunctionCall(n: AST): AST {\n let node = n;\n while (this.currentToken!.type === TokenType.lparen) {\n // probable function call\n node = this._callExpression(node);\n }\n return node;\n }\n\n private _statementExpression(): AST {\n\n const node = this._expression();\n\n if (![TokenType.semi, TokenType.eol, TokenType.eof]\n .includes(this.currentToken!.type)) {\n error(this.currentToken!);\n }\n return node;\n }\n\n private _blockStatement(ignoreFirstBrace = false): BlockStatementAST {\n if (!ignoreFirstBrace) this._eat(TokenType.lbrace);\n this._eatEOL();\n if (this._expect(TokenType.rbrace)) {\n this._eat(TokenType.rbrace);\n return new BlockStatementAST([], this.currentToken!);\n }\n // const body = _statements();\n const body = [this._statement()];\n while (true) {\n this._eatSemiOrEOL();\n if (this.currentToken!.type === TokenType.rbrace || this.currentToken!.type === TokenType.eof) {\n // _eat(this.currentToken!.type);\n break;\n }\n body.push(this._statement());\n if (this._expect(TokenType.rbrace)) break;\n if (this.currentToken!.type !== TokenType.eol &&\n this.currentToken!.type !== TokenType.semi &&\n this.currentToken!.type !== TokenType.eof) {\n error(this.currentToken!);\n }\n }\n this._eat(TokenType.rbrace);\n if (this.currentToken?.type === TokenType.rbrace) {\n // endBlock\n this._eat(TokenType.rbrace);\n }\n\n return new BlockStatementAST(body, this.currentToken!);\n }\n\n private _ifStatement(): IfStatementAST {\n this._eat(TokenType.IF);\n const withPar = this.currentToken!.type === TokenType.lparen;\n if (withPar) {\n this._eat(TokenType.lparen);\n }\n const test = this._expression();\n if (withPar) {\n this._eat(TokenType.rparen);\n }\n let consequent: AST;\n if (this.currentToken!.type === TokenType.lbrace) {\n consequent = this._blockStatement();\n } else {\n consequent = this._expression();\n }\n\n // this._eatSemiOrEOL();\n let alternate: AST | undefined;\n if (this.currentToken!.type === TokenType.ELSE) {\n this._eat(TokenType.ELSE);\n switch (this.currentToken!.type) {\n case TokenType.IF:\n alternate = this._ifStatement();\n break;\n case TokenType.lbrace:\n alternate = this._blockStatement();\n break;\n default:\n alternate = this._expression();\n }\n }\n\n return new IfStatementAST(test, consequent, alternate);\n }\n private _whileLoop(): WhileLoopStatement {\n const token = this.currentToken!;\n this._eat(TokenType.WHILE_TILL)\n const test = this._expression()\n const body = this.currentToken!.type === TokenType.lbrace ? this._blockStatement() : this._expression()\n return new WhileLoopStatement(test, body, token, this.currentToken!)\n }\n\n private _forOfIdentifier(): AST {\n switch (this.currentToken!.type) {\n case TokenType.lparen: {\n // probable tuple\n this._eat(TokenType.lparen)\n const first = this._variable()\n this._eat(TokenType.comma)\n const second = this._variable()\n this._eat(TokenType.rparen)\n return new TupleExpression(\n first,\n second\n );\n }\n // TokenType.LBRACE -> objectPattern()\n // TokenType.LBRACKET -> arrayPattern()\n default:\n return this._variable()\n }\n\n }\n /**\n * # ForLoopStatement with step\n * (seginka|for) a=0 (foo|to) 10 (kay|kaj) niin 2 { # for a = 0; a<10; a+=2\n *\n * }\n * (seginka|for) mali kono a\n */\n private _forLoop(): AST {\n const startToken = this.currentToken!;\n this._eat(TokenType.FOR_LOOP)\n let forOf =\n [TokenType.lparen].includes(this.currentToken!.type);\n let node: AST;\n if (forOf) {\n node = this._forOfIdentifier();\n } else {\n const expr = this._expression();\n if (!(expr instanceof AssignmentExpressionAST)) {\n forOf = true;\n }\n node = expr;\n }\n\n\n if (!forOf && node instanceof AssignmentExpressionAST) {\n // normal for\n this._eat(TokenType.TILL);\n const test = this._expression();\n let direction: Token;\n\n if (this.currentToken!.type === TokenType.up || this.currentToken!.type === TokenType.down) {\n const t = this.currentToken!;\n this._eat(t.type)\n direction = t\n } else {\n direction = new Token(TokenType.up, \"up\");\n }\n let update;\n if (this._expect(TokenType.with)) {\n this._eat(TokenType.with)\n const expr = this._expression();\n update = expr\n } else {\n update = new LiteralAST(new Token(TokenType.numberConst, 1, this.currentToken!.line, this.currentToken!.col), \"1\");\n }\n\n const body = (this.currentToken!.type === TokenType.lbrace) ? this._blockStatement() : this._expression()\n\n node = new ForLoopStatement(node, test, update, direction, body, startToken, this.currentToken!);\n } else if (forOf) {\n this._eat(TokenType.in);\n const collection = this._expression();\n const body = (this.currentToken!!.type === TokenType.lbrace) ? this._blockStatement() : this._expression()\n node = new ForOfStatement(\n node,\n collection,\n body,\n startToken,\n this.currentToken!\n )\n } else {\n error(this.currentToken!);\n }\n return node\n }\n\n private _statement(): AST {\n switch (this.currentToken!.type) {\n case TokenType.BREAK:\n this._eat(TokenType.BREAK);\n return new BreakAST(this.currentToken?.line, this.currentToken?.col);\n case TokenType.CONTINUE:\n this._eat(TokenType.CONTINUE);\n return new ContinueAST(this.currentToken?.line, this.currentToken?.col);\n case TokenType.RETURN:\n this._eat(TokenType.RETURN)\n return this._return();\n case TokenType.semi:\n this._eatSemi();\n return this._statement();\n case TokenType.eol:\n this._eatEOL();\n return this._statement();\n // case TokenType.IF:\n // return this._ifStatement();\n case TokenType.WHILE_TILL:\n return this._whileLoop();\n case TokenType.FOR_LOOP:\n return this._forLoop();\n default:\n return this._statementExpression();\n }\n }\n\n private _expect(type: TokenType) {\n return this.currentToken?.type === type;\n }\n private _definition(): AST[] {\n this._eatSemiOrEOL();\n\n if (this._expect(TokenType.eof)) {\n return [];\n }\n const results = [this._statement()];\n while (true) {\n this._eatSemiOrEOL();\n if (this.currentToken!.type === TokenType.eof) {\n this._eat(TokenType.eof);\n break;\n }\n if (this.currentToken!.type === TokenType.lbrace) {\n results.push(this._blockStatement());\n } else {\n results.push(this._statement());\n }\n // if (this.currentToken!.type !== TokenType.eol &&\n // this.currentToken!.type !== TokenType.semi &&\n // this.currentToken!.type !== TokenType.eof) {\n // error(this.currentToken!);\n // }\n }\n return results;\n }\n\n private _root(): RootAST {\n const source = this.lexer.source;\n const name = \"<module>\";\n const list = this._definition();\n return new RootAST(list, name, source);\n }\n\n parse(): AST {\n return this._root();\n }\n}\n\n\nexport class LoopControl {\n}\nexport class BreakBranch extends LoopControl { }\nexport class ContinueBranch extends LoopControl { }\nexport class ReturnBranch {\n value: any;\n constructor(value: any) {\n this.value = value;\n }\n};\n\ntype Func = (node: any) => any;\n// AST Wallker\nabstract class ANodeVisitor {\n protected _nodesVisitors: { [k: string]: Func } = {};\n protected registerVisitor(type: Type<AST>, visitor: Func) {\n const methodName = `visit${type.name}`;\n this._nodesVisitors[methodName] = visitor;\n }\n\n abstract visit(node: AST): any;\n}\n\n\nexport abstract class NodeVisitor extends ANodeVisitor {\n constructor() {\n super();\n this.registerVisitor(RootAST, this.visitRootAST);\n this.registerVisitor(BlockStatementAST, this.visitBlockStatementAST);\n this.registerVisitor(IdentifierAST, this.visitIdentifierAST);\n this.registerVisitor(LiteralAST, this.visitLiteralAST);\n this.registerVisitor(AssignmentExpressionAST, this.visitAssignmentExpressionAST);\n this.registerVisitor(ExpressionStatementAST, this.visitExpressionStatementAST);\n this.registerVisitor(CallExpressionAST, this.visitCallExpressionAST);\n this.registerVisitor(BinaryExpressionAST, this.visitBinaryExpressionAST);\n this.registerVisitor(UnaryExpressionAST, this.visitUnaryExpressionAST);\n this.registerVisitor(IfStatementAST, this.visitIfStatementAST);\n this.registerVisitor(LogicalExpressionAST, this.visitLogicalExpressionAST);\n this.registerVisitor(IndexAccessorAST, this.visitIndexAccessorAST);\n this.registerVisitor(ObjectProperty, this.visitObjectProperty);\n this.registerVisitor(ObjectExpression, this.visitObjectExpression);\n this.registerVisitor(ArrayExpression, this.visitArrayExpression);\n\n this.registerVisitor(WhileLoopStatement, this.visitWhileLoopStatement);\n this.registerVisitor(ForLoopStatement, this.visitForLoopStatement);\n this.registerVisitor(ForOfStatement, this.visitForOfStatement);\n this.registerVisitor(BreakAST, this.visitBreakAST);\n this.registerVisitor(ContinueAST, this.visitContinueAST);\n this.registerVisitor(ReturnAST, this.visitReturnAST);\n }\n override visit(node: AST): any {\n try {\n const methodName = `visit${node.constructor.name}`;\n // const fn = Object.getPrototypeOf(this)[methodName];\n const fn = this._nodesVisitors[methodName];\n return fn?.call(this, node) ?? null;\n } catch (error) {\n return null;\n }\n }\n protected assignProperty(owner: any, property: any, value: any): any {\n if (Array.isArray(owner)) {\n owner[property] = value;\n } else if (typeof owner === 'object') {\n owner[property] = value;\n } else { }\n }\n\n\n protected abstract visitRootAST(node: RootAST): any;\n protected abstract visitBlockStatementAST(node: BlockStatementAST): any;\n protected abstract visitIdentifierAST(node: IdentifierAST): any;\n protected abstract visitLiteralAST(node: AST): any;\n protected abstract visitAssignmentExpressionAST(node: AssignmentExpressionAST): any;\n\n protected abstract visitExpressionStatementAST(node: ExpressionStatementAST): any;\n protected abstract visitCallExpressionAST(node: CallExpressionAST): any;\n\n protected abstract visitBinaryExpressionAST(node: BinaryExpressionAST): any;\n protected abstract visitUnaryExpressionAST(node: UnaryExpressionAST): any;\n protected abstract visitIfStatementAST(node: IfStatementAST): any;\n protected abstract visitLogicalExpressionAST(node: LogicalExpressionAST): any;\n protected abstract visitIndexAccessorAST(node: IndexAccessorAST): any;\n protected abstract visitObjectProperty(node: AST): any;\n protected abstract visitObjectExpression(ast: AST): any;\n protected abstract visitArrayExpression(ast: AST): any;\n protected abstract visitBreakAST(node: BreakAST): any;\n protected abstract visitWhileLoopStatement(node: WhileLoopStatement): any;\n\n protected abstract visitForLoopStatement(node: ForLoopStatement): any;\n\n protected abstract visitForOfStatement(node: ForOfStatement): any;\n protected abstract visitContinueAST(node: ContinueAST): any;\n protected abstract visitReturnAST(node: ReturnAST): any;\n}\nexport class MEventScope {\n name: string;\n parent?: MEventScope;\n memory: { [k: string]: any } = {};\n constructor(name: string, memory: { [k: string]: any }, parent?: MEventScope) {\n this.name = name;\n this.memory = memory;\n this.parent = parent;\n }\n resolve(key: string): any {\n return Object.keys(this.memory).includes(key) ? this.memory[key] : (this.parent?.resolve(key) ?? null);\n }\n change(key: string, value: any, declare = true): boolean {\n if (Object.keys(this.memory).includes(key)) {\n // change here\n this.memory[key] = value;\n return true;\n }\n if (this.parent && this.parent.change(key, value, false)) {\n return true;\n }\n if (!declare) {\n return false;\n }\n this.memory[key] = value;\n return true;\n }\n}\nexport type MEventoFBinding = (args: any[], vm: MEvento) => any;\nexport class MEvento extends NodeVisitor {\n\n rootScope: MEventScope = new MEventScope(\"Program\", {});\n protected currentScope?: MEventScope = this.rootScope;\n\n debug = false;\n private static _globalFunctionsRegistry: { [k: string]: MEventoFBinding } = {};\n private static _cache: Map<number, AST> = new Map();\n protected _functionsRegistry: { [k: string]: MEventoFBinding } = {};\n protected _functionResolver?: (name: string) => MEventoFBinding | undefined;\n constructor() {\n super();\n this._functionsRegistry = { ...MEvento._globalFunctionsRegistry };\n }\n\n protected resolve(name: string): any {\n return this.currentScope?.resolve(name) ?? null;\n }\n protected changeVariable(name: string, value: any): any {\n if (this.currentScope?.change(name, value)) {\n return value;\n } else return null;\n }\n protected pushScope(name: string) {\n const scope = new MEventScope(name, {}, this.currentScope);\n this.currentScope = scope;\n }\n protected popScope() {\n this.currentScope = this.currentScope?.parent;\n }\n protected log(message: any) {\n if (this.debug) {\n console.log(message)\n }\n }\n protected override visitRootAST(node: RootAST): any {\n const list = node.body;\n let last;\n for (const n of list) {\n last = this.visit(n);\n if (last instanceof ReturnBranch) {\n return last.value ?? null;\n }\n }\n return last ?? null;\n }\n\n protected override visitBlockStatementAST(node: BlockStatementAST): any {\n const list = node.body;\n let last;\n this.pushScope(\"Block\");\n for (const n of list) {\n last = this.visit(n);\n if (last instanceof LoopControl) {\n break;\n }\n if (last instanceof ReturnBranch) {\n break;\n }\n }\n this.popScope();\n return last ?? null;\n }\n\n protected override visitIdentifierAST(node: IdentifierAST): any {\n const id = node.value;\n return this?.resolve(id) ?? null;\n }\n\n protected override visitLiteralAST(node: AST): any {\n const value = (node as LiteralAST).value;\n return value;\n }\n\n protected override visitAssignmentExpressionAST(node: AssignmentExpressionAST): any {\n\n const id: AST = node.identifier;\n\n const init: AST = node.init;\n let value: any = null;\n if (id instanceof IndexAccessorAST) {\n var target = this.visit(id.owner);\n value = this.visit(node.init);\n var property = this.visit(id.key);\n this.assignProperty(target, property, value);\n } else if (id instanceof IdentifierAST) {\n value = this.visit(init);\n this.changeVariable(id.value, value);\n }\n return value;\n }\n\n protected override visitExpressionStatementAST(node: ExpressionStatementAST): any {\n const expr = node.expression;\n return this.visit(expr);\n }\n\n protected override visitCallExpressionAST(node: CallExpressionAST) {\n const callee = node.callee;\n const args = node.arguments;\n const calleeName = callee.value;\n const fn = this.resolveFunction(calleeName);\n const argValues = args.map((e) => this.visit(e));\n // print(\"argValues::\", argValues)\n return fn?.(argValues, this);\n }\n\n protected override visitBinaryExpressionAST(node: BinaryExpressionAST): any {\n const left = node.left;\n const right = node.right;\n const op = node.operation;\n const lValue = this.visit(left);\n const rValue = this.visit(right);\n switch (op.type) {\n case TokenType.plus:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue + rValue;\n }\n return `${lValue}${rValue}`;\n case TokenType.minus:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue - rValue;\n }\n if (isString(lValue) && isNum(rValue)) {\n return lValue * rValue;\n }\n if (isNum(lValue) && isString(rValue)) {\n return rValue * lValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.mult:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue * rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.div:\n if (isNum(lValue) && isNum(rValue)) {\n if (rValue === 0) {\n throw new Error(\"Invalid division by 0\");\n }\n return lValue / rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.mod:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue % rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.great:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue > rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.greatEq:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue >= rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.less:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue < rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.lessEq:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue <= rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.eqeq:\n return lValue === rValue;\n case TokenType.notEq:\n return lValue !== rValue;\n default:\n throw new Error(`Operation ${op.value} not allowed no num value`);\n }\n }\n\n protected override visitUnaryExpressionAST(node: UnaryExpressionAST): any {\n const arg = node.argument;\n const op = node.operation;\n const argValue = this.visit(arg);\n if (op.type === TokenType.not) {\n return _boolValue(argValue) === false;\n }\n if (!isNum(argValue)) {\n throw new Error(`Operation ${op.value} not allowed no num value`);\n }\n if (op.type === TokenType.plus) {\n return argValue;\n } else if (op.type === TokenType.minus) {\n return -argValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n }\n\n protected override visitIfStatementAST(node: IfStatementAST): any {\n const testNode: AST = node.test;\n const test = this.visit(testNode);\n const testBoolValue = _boolValue(test);\n\n if (testBoolValue) {\n return this.visit(node.consequent);\n }\n if (node.alternate) {\n return this.visit(node.alternate!);\n }\n\n return null;\n }\n\n\n\n protected override visitLogicalExpressionAST(node: LogicalExpressionAST): any {\n const leftNode = node.left;\n let test = this.visit(leftNode);\n if (node.operator.type === TokenType.nullity) {\n if (test != null) {\n return test;\n }\n return this.visit(node.right)\n }\n const testBoolValue = _boolValue(test);\n if (node.operator.type === TokenType.and) {\n if (!testBoolValue) {\n return false;\n }\n return _boolValue(this.visit(node.right));\n }\n\n if (node.operator.type === TokenType.or) {\n if (testBoolValue) {\n return true;\n }\n return _boolValue(this.visit(node.right));\n }\n return null;\n }\n\n protected override visitIndexAccessorAST(node: IndexAccessorAST): any {\n const ownerNode = (node as IndexAccessorAST).owner;\n const owner = this.visit(ownerNode);\n if (owner === null || owner === undefined) {\n return null;\n }\n if (typeof owner === 'object') {\n const key = this.visit(node.key);\n return owner[key] ?? null;\n } else if (Array.isArray(owner)) {\n const key = this.visit(node.key);\n return isNum(key) && owner.length < key && key >= 0 ? owner[key] ?? null : null;\n }\n return null;\n }\n\n protected override visitObjectProperty(node: AST): any { }\n\n protected override visitObjectExpression(ast: AST): any {\n const instance: any = {};\n const node = ast as ObjectExpression;\n for (const it of node.properties) {\n if (it instanceof ObjectProperty) {\n let key = this.visit(it.key);\n key = isString(key) ? key : key.toString();\n instance[key] = this.visit(it.value);\n }\n }\n return instance;\n }\n\n protected override visitArrayExpression(ast: AST): any {\n const node = ast as ArrayExpression;\n const args = this.resolveArguments(node.elements);\n return args;\n }\n protected override visitBreakAST(node: BreakAST) {\n return new BreakBranch();\n }\n protected override visitWhileLoopStatement(node: WhileLoopStatement): any {\n this.log(`WhileLoopStatement ${node.test} ${node.body}`)\n const retainer: any[] | undefined = node.retain ? [] : undefined;\n while (_boolValue(this.visit(node.test))) {\n const ret = this.visit(node.body)\n if (ret instanceof BreakBranch) {\n break;\n }\n if (ret instanceof ContinueBranch) {\n continue;\n }\n if (ret instanceof ReturnBranch) {\n this.popScope();\n return ret;\n }\n retainer?.push(ret)\n }\n return retainer ?? null;\n }\n\n protected override visitForLoopStatement(node: ForLoopStatement): any {\n const retainer: any[] | undefined = node.retain ? [] : undefined;\n const loopIdentifier = node.init.identifier\n if (!(loopIdentifier instanceof IdentifierAST)) throw new Error(\"Unexpected identifer found\")\n this.pushScope(\"ForLoopStatement\");\n const initialValue = this.visit(node.init.init)\n this.changeVariable(loopIdentifier.value, initialValue)\n retainer?.push(initialValue)\n const test = () => {\n const ret = this.visit(node.test)\n if (isNum(ret)) {\n const tmp = this.resolve(loopIdentifier.value)\n return node.direction.type === TokenType.up ? ret >= tmp : ret <= tmp\n }\n return _boolValue(ret);\n }\n const update = () => {\n const updateValue = this.visit(node.update);\n if (isNum(updateValue)) {\n // auto handle\n const tmp = this.resolve(loopIdentifier.value);\n if (!isNum(tmp)) throw Error(\"Cant update value\");\n this.changeVariable(loopIdentifier.value, node.direction.type === TokenType.up ? tmp + updateValue : tmp - updateValue);\n } else {\n throw Error(\"Update value cant be non number\");\n }\n }\n while (test()) {\n const ret = this.visit(node.body)\n if (ret instanceof BreakBranch) {\n break;\n }\n if (ret instanceof ContinueBranch) {\n update();\n continue;\n }\n if (ret instanceof ReturnBranch) {\n this.popScope();\n return ret;\n }\n retainer?.push(ret)\n // update\n update();\n }\n this.popScope();\n return retainer ?? null;\n }\n\n protected override visitForOfStatement(node: ForOfStatement): any {\n const collection = this.visit(node.collection);\n if (!Array.isArray(collection)) {\n throw Error(\"Can iterate non array object\")\n }\n const retainer: any[] | undefined = node.retain ? [] : undefined;\n this.pushScope(\"ForOfStatement\");\n for (const it of collection) {\n this._declareForIdentifier(node.identifier, it)\n const ret = this.visit(node.body)\n if (ret instanceof BreakBranch) {\n break;\n }\n if (ret instanceof ContinueBranch) {\n continue;\n }\n if (ret instanceof ReturnBranch) {\n this.popScope();\n return ret;\n }\n retainer?.push(ret)\n }\n this.popScope();\n return retainer ?? null;\n }\n protected override visitContinueAST(node: ContinueAST) {\n return new ContinueBranch();\n }\n protected visitReturnAST(node: ReturnAST): any {\n return new ReturnBranch(node.value != null ? this.visit(node.value) : null);\n }\n protected _declareForIdentifier(node: AST, value: any): any {\n if (node instanceof TupleExpression) {\n if (!Array.isArray(value)) {\n throw Error(\"Unable to make a tuple from non Array element\")\n }\n this.changeVariable((node.first as IdentifierAST).value, value[0]);\n this.changeVariable((node.second as IdentifierAST).value, value[1]);\n }\n this.changeVariable((node as IdentifierAST).value, value);\n }\n resolveArguments(args: AST[]): any {\n return args.map((it: AST) => {\n return this.visit(it);\n });\n }\n setFunctionResolver(resolver: (name: string) => MEventoFBinding | undefined) {\n this._functionResolver = resolver;\n }\n resolveFunction(name: string): MEventoFBinding | undefined {\n return this._functionsRegistry[name] ?? this._functionResolver?.(name);\n }\n registerFunction(id: string, fn: MEventoFBinding) {\n this._functionsRegistry[id] = fn;\n }\n\n unregisterFunction(id: string) {\n delete this._functionsRegistry[id];\n }\n\n execute(source: string, cache = true, input?: { [k: string]: any }) {\n const module = MEvento.compile(source, cache);\n if (input) {\n Object.keys(input).forEach(k => this.changeVariable(k, input[k]));\n }\n return this.visit(module);\n }\n\n static compile(source: string, cache = false): AST {\n const hash = hashCode(source);\n if (cache && this._cache.has(hash)) {\n return this._cache.get(hash)!;\n }\n const lexer = new Lexer(source);\n const parser = new Parser(lexer);\n const module = parser.parse();\n\n if (cache) this._cache.set(hash, module);\n return module;\n }\n\n static register(id: string, fn: MEventoFBinding) {\n MEvento._globalFunctionsRegistry[id] = fn;\n }\n\n static unregister(id: string) {\n delete MEvento._globalFunctionsRegistry[id];\n }\n\n static run(source: string, cache = false, input?: { [k: string]: any }) {\n const mevento = new MEvento();\n const module = MEvento.compile(source, cache);\n if (input) {\n Object.keys(input).forEach(k => mevento.changeVariable(k, input[k]));\n }\n return mevento.visit(module);\n }\n\n static newInstance(): MEvento {\n // const lexer = Lexer(source);\n // const parser = Parser(lexer);\n // const module = parser.parse();\n return new MEvento();\n }\n\n clone(): MEvento {\n var ret = new MEvento();\n ret._functionsRegistry = { ... this._functionsRegistry };\n ret.rootScope.memory = { ...this.rootScope.memory };\n return ret;\n }\n newAsyncInstance(): MEventoAsync {\n const asyncIns = MEventoAsync.newInstance();\n asyncIns.rootScope.memory = this.rootScope.memory;\n /// ????\n asyncIns._functionsRegistry = this._functionsRegistry;\n return asyncIns;\n };\n\n}\n\nexport class MEventoAsync extends MEvento {\n\n constructor() {\n super();\n }\n\n protected override async visitRootAST(node: RootAST) {\n const list = node.body;\n let last;\n for (const n of list) {\n last = await this.visit(n);\n if (last instanceof ReturnBranch) {\n return last.value ?? null;\n }\n }\n return last ?? null;\n }\n protected override async visitBlockStatementAST(node: BlockStatementAST): Promise<any> {\n const list = node.body;\n let last;\n this.pushScope(\"Block\");\n for (const n of list) {\n last = await this.visit(n);\n if (last instanceof LoopControl) {\n break;\n }\n if (last instanceof ReturnBranch) {\n break;\n }\n }\n this.popScope();\n return last;\n }\n protected override async visitIdentifierAST(node: AST): Promise<any> {\n const id = (node as IdentifierAST).value;\n return this.resolve(id);\n }\n protected override async visitLiteralAST(node: LiteralAST): Promise<any> {\n const value = node.value;\n return value;\n }\n protected override async visitAssignmentExpressionAST(node: AssignmentExpressionAST) {\n const id: AST = node.identifier;\n\n const init: AST = node.init;\n let value: any = null;\n if (id instanceof IndexAccessorAST) {\n var target = await this.visit(id.owner);\n value = await this.visit(node.init);\n var property = await this.visit(id.key);\n this.assignProperty(target, property, value);\n } else if (id instanceof IdentifierAST) {\n value = await this.visit(init);\n this.changeVariable(id.value, value);\n }\n return value;\n }\n protected override async visitExpressionStatementAST(node: ExpressionStatementAST) {\n const expr = node.expression;\n return await this.visit(expr);\n }\n protected override async visitCallExpressionAST(node: CallExpressionAST) {\n const callee = node.callee;\n const args = node.arguments;\n const calleeName = callee.value;\n const fn = this._functionsRegistry[calleeName];\n const argValues = await Promise.all(args.map((e) => this.visit(e)));\n // print(\"argValues::\", argValues)\n return await fn?.(argValues, this);\n }\n protected override async visitBinaryExpressionAST(node: BinaryExpressionAST) {\n const left = node.left;\n const right = node.right;\n const op = node.operation;\n const lValue = await this.visit(left);\n const rValue = await this.visit(right);\n switch (op.type) {\n case TokenType.plus:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue + rValue;\n }\n return `${lValue}${rValue}`;\n case TokenType.minus:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue - rValue;\n }\n if (isString(lValue) && isNum(rValue)) {\n return lValue * rValue;\n }\n if (isNum(lValue) && isString(rValue)) {\n return rValue * lValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.mult:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue * rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.div:\n if (isNum(lValue) && isNum(rValue)) {\n if (rValue === 0) {\n throw new Error(\"Invalid division by 0\");\n }\n return lValue / rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.mod:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue % rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.great:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue > rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.greatEq:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue >= rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.less:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue < rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.lessEq:\n if (isNum(lValue) && isNum(rValue)) {\n return lValue <= rValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n case TokenType.eqeq:\n return lValue === rValue;\n case TokenType.notEq:\n return lValue !== rValue;\n default:\n throw new Error(`Operation ${op.value} not allowed no num value`);\n }\n }\n protected override async visitUnaryExpressionAST(node: UnaryExpressionAST) {\n const arg = node.argument;\n const op = node.operation;\n const argValue = await this.visit(arg);\n if (op.type === TokenType.not) {\n return _boolValue(argValue) === false;\n }\n if (!isNum(argValue)) {\n throw new Error(`Operation ${op.value} not allowed no num value`);\n }\n if (op.type === TokenType.plus) {\n return argValue;\n } else if (op.type === TokenType.minus) {\n return -argValue;\n }\n throw new Error(`Operation ${op.value} not allowed no num value`);\n }\n protected override async visitIfStatementAST(node: IfStatementAST) {\n const testNode: AST = node.test;\n const test = await this.visit(testNode);\n const testBoolValue = _boolValue(test);\n\n if (testBoolValue) {\n return await this.visit(node.consequent);\n }\n if (node.alternate) {\n return await this.visit(node.alternate!);\n }\n\n return null;\n }\n protected override async visitLogicalExpressionAST(node: LogicalExpressionAST) {\n const leftNode = node.left;\n let test = await this.visit(leftNode);\n if (node.operator.type === TokenType.nullity) {\n if (test != null) {\n return test;\n }\n return await this.visit(node.right)\n }\n const testBoolValue = _boolValue(test);\n if (node.operator.type === TokenType.and) {\n if (!testBoolValue) {\n return false;\n }\n return _boolValue(await this.visit(node.right));\n }\n if (node.operator.type === TokenType.or) {\n if (testBoolValue) {\n return true;\n }\n\n return _boolValue(await this.visit(node.right));\n }\n return false;\n }\n protected override async visitIndexAccessorAST(node: IndexAccessorAST) {\n const ownerNode = (node as IndexAccessorAST).owner;\n const owner = await this.visit(ownerNode);\n if (owner === null || owner === undefined) {\n return null;\n }\n if (typeof owner === 'object') {\n const key = await this.visit(node.key);\n return owner[key] ?? null;\n } else if (Array.isArray(owner)) {\n const key = await this.visit(node.key);\n return isNum(key) && owner.length < key && key >= 0 ? owner[key] ?? null : null;\n }\n return null;\n }\n protected override async visitObjectProperty(node: AST) { }\n\n protected override async visitObjectExpression(ast: AST) {\n const instance: any = {};\n const node = ast as ObjectExpression;\n for (const it of node.properties) {\n if (it instanceof ObjectProperty) {\n let key = await this.visit(it.key);\n key = isString(key) ? key : key.toString();\n instance[key] = await this.visit(it.value);\n }\n }\n return instance;\n }\n\n protected override async visitArrayExpression(ast: AST) {\n const node = ast as ArrayExpression;\n const args = await this.resolveArgumentsAsync(node.elements);\n return args;\n }\n protected override async visitWhileLoopStatement(node: WhileLoopStatement) {\n this.log(`WhileLoopStatement ${node.test} ${node.body}`)\n const retainer: any[] | undefined = node.retain ? [] : undefined;\n while (_boolValue(await this.visit(node.test))) {\n const ret = await this.visit(node.body)\n if (ret instanceof BreakBranch) {\n break;\n }\n if (ret instanceof ContinueBranch) {\n continue;\n }\n if (ret instanceof ReturnBranch) {\n this.popScope();\n return ret;\n }\n retainer?.push(ret)\n }\n return retainer;\n }\n\n protected override async visitForLoopStatement(node: ForLoopStatement) {\n const retainer: any[] | undefined = node.retain ? [] : undefined;\n const loopIdentifier = node.init.identifier\n if (!(loopIdentifier instanceof IdentifierAST)) throw new Error(\"Unexpected identifer found\")\n this.pushScope(\"ForLoopStatement\");\n const initialValue = await this.visit(node.init.init)\n this.changeVariable(loopIdentifier.value, initialValue);\n retainer?.push(initialValue)\n const test = async () => {\n const ret = await this.visit(node.test)\n if (isNum(ret)) {\n const tmp = this.resolve(loopIdentifier.value);\n return node.direction.type === TokenType.up ? ret >= tmp : ret <= tmp\n }\n return _boolValue(ret);\n }\n const update = async () => {\n const updateValue = await this.visit(node.update);\n if (isNum(updateValue)) {\n // auto handle\n const tmp = this.resolve(loopIdentifier.value);\n if (!isNum(tmp)) throw Error(\"Cant update value\");\n this.changeVariable(loopIdentifier.value, node.direction.type === TokenType.up ? tmp + updateValue : tmp - updateValue);\n } else {\n throw Error(\"Update value cant be non number\");\n }\n }\n while (await test()) {\n const ret = await this.visit(node.body)\n if (ret instanceof BreakBranch) {\n break;\n }\n if (ret instanceof ContinueBranch) {\n await update();\n continue;\n }\n if (ret instanceof ReturnBranch) {\n this.popScope();\n return ret;\n }\n retainer?.push(ret)\n // update\n await update();\n }\n this.popScope();\n return retainer ?? null;\n }\n\n protected override async visitForOfStatement(node: ForOfStatement) {\n const collection = await this.visit(node.collection);\n if (!Array.isArray(collection)) {\n throw Error(\"Can iterate non array object\")\n }\n const retainer: any[] | undefined = node.retain ? [] : undefined;\n this.pushScope(\"ForOfStatement\");\n for (const it of collection) {\n this._declareForIdentifier(node.identifier, it)\n const ret = await this.visit(node.body)\n if (ret instanceof BreakBranch) {\n break;\n }\n if (ret instanceof ContinueBranch) {\n continue;\n }\n if (ret instanceof ReturnBranch) {\n this.popScope();\n return ret;\n }\n retainer?.push(ret)\n }\n this.popScope();\n return retainer;\n }\n\n protected override async visitReturnAST(node: ReturnAST): Promise<any> {\n return new ReturnBranch(node.value != null ? await this.visit(node.value) : null);\n }\n async resolveArgumentsAsync(args: AST[]): Promise<any[]> {\n return await Promise.all(args.map(async (it: AST) => {\n return await this.visit(it);\n }));\n }\n override registerFunction(id: string, fn: MEventoFBinding) {\n this._functionsRegistry[id] = fn;\n }\n\n override unregisterFunction(id: string) {\n delete this._functionsRegistry[id];\n }\n override async execute(source: string, cache = true, input?: { [k: string]: any }) {\n const module = MEvento.compile(source, cache);\n if (input) {\n Object.keys(input).forEach(k => this.changeVariable(k, input[k]));\n }\n return await this.visit(module);\n }\n\n static override async run(source: string, cache = false, input?: { [k: string]: any }) {\n const mevento = new MEventoAsync();\n const module = MEvento.compile(source, cache);\n if (input) {\n Object.keys(input).forEach(k => mevento.changeVariable(k, input[k]));\n }\n return await mevento.visit(module);\n }\n\n static override newInstance(): MEventoAsync {\n return new MEventoAsync();\n }\n\n\n override clone(): MEventoAsync {\n var ret = new MEventoAsync();\n ret._functionsRegistry = { ...this._functionsRegistry };\n ret.rootScope.memory = { ...this.rootScope.memory };\n return ret;\n }\n}\n","/*\n * Public API Surface of mevento\n */\n\nexport * from './lib/mevento';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|