occam-grammars 1.3.1 → 1.3.5
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/example.js +5 -5
- package/lib/example/view/furtle.js +2 -2
- package/lib/furtle/bnf.js +2 -2
- package/lib/furtle/entries.js +3 -3
- package/package.json +1 -1
- package/src/example/view/furtle.js +25 -44
- package/src/furtle/bnf.js +18 -28
- package/src/furtle/entries.js +2 -2
|
@@ -133,9 +133,9 @@ var FurtleView = /*#__PURE__*/ function(View) {
|
|
|
133
133
|
_define_property(FurtleView, "Lexer", _index.FurtleLexer);
|
|
134
134
|
_define_property(FurtleView, "Parser", _index.FurtleParser);
|
|
135
135
|
_define_property(FurtleView, "readOnly", false);
|
|
136
|
-
_define_property(FurtleView, "initialContent", 'Node
|
|
136
|
+
_define_property(FurtleView, "initialContent", 'Boolean isBound(Node termNode, Node statementNode) {\n Boolean bound = false;\n \n String variableName = variableNameFromTermNode(termNode);\n \n If (variableName != null) {\n Nodes statementNodes = nodesQuery(statementNode, //statement);\n\n ForEach(statementNodes, (Node statementNode) {\n String boundVariableName = boundVariableNameFromStatementNode(statementNode); \n \n If (boundVariableName == variableName) {\n bound = true;\n }\n });\n }\n \n Return bound;\n}\n \nString variableNameFromTermNode(Node termNode) {\n String variableName = null;\n \n Node variableNameTerminalNode = nodeQuery(termNode, /term/variable/@name);\n \n If (variableNameTerminalNode != null) {\n { String content } = variableNameTerminalNode;\n \n variableName = content;\n }\n \n Return variableName;\n}\n\nString boundVariableNameFromStatementNode(Node statementNode) {\n String boundVariableName = null;\n \n { Nodes childNodes } = statementNode;\n \n [ Node firstChildNode ] = childNodes;\n \n { String content } = firstChildNode;\n \n If ((content == "∀") || (content == "∃")) {\n [ _, Node argumentNode ] = childNodes;\n \n Node boundVariableNameTerminalNode = nodeQuery(argumentNode, /argument/term/variable/@name);\n \n If (boundVariableNameTerminalNode != null) {\n { content } = boundVariableNameTerminalNode;\n \n boundVariableName = content;\n }\n }\n \n Return boundVariableName;\n}\n');
|
|
137
137
|
_define_property(FurtleView, "defaultProperties", {
|
|
138
138
|
className: "furtle"
|
|
139
139
|
});
|
|
140
140
|
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9leGFtcGxlL3ZpZXcvZnVydGxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBGdXJ0bGVMZXhlciwgRnVydGxlUGFyc2VyLCBsZXhlcnNVdGlsaXRpZXMsIHBhcnNlcnNVdGlsaXRpZXMgfSBmcm9tIFwiLi4vLi4vaW5kZXhcIjsgIC8vL1xuXG5pbXBvcnQgVmlldyBmcm9tIFwiLi4vdmlld1wiO1xuXG5jb25zdCB7IGZ1cnRsZVBhcnNlckZyb21CTkYgfSA9IHBhcnNlcnNVdGlsaXRpZXMsXG4gICAgICB7IGZ1cnRsZUxleGVyRnJvbUVudHJpZXMgfSA9IGxleGVyc1V0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRnVydGxlVmlldyBleHRlbmRzIFZpZXcge1xuICBnZXRUb2tlbnMoKSB7XG4gICAgY29uc3QgbGV4aWNhbEVudHJpZXMgPSB0aGlzLmdldExleGljYWxFbnRyaWVzKCksXG4gICAgICAgICAgZW50cmllcyA9IGxleGljYWxFbnRyaWVzLCAvLy8vXG4gICAgICAgICAgZnVydGxlTGV4ZXIgPSBmdXJ0bGVMZXhlckZyb21FbnRyaWVzKGVudHJpZXMpLFxuICAgICAgICAgIGxleGVyID0gZnVydGxlTGV4ZXIsICAvLy9cbiAgICAgICAgICBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXG4gICAgICAgICAgdG9rZW5zID0gbGV4ZXIudG9rZW5pc2UoY29udGVudCk7XG5cbiAgICByZXR1cm4gdG9rZW5zO1xuICB9XG5cbiAgZ2V0UGFyc2VUcmVlKHRva2Vucykge1xuICAgIGxldCBwYXJzZVRyZWUgPSBudWxsO1xuXG4gICAgY29uc3QgYm5mID0gdGhpcy5nZXRCTkYoKSxcbiAgICAgICAgICBmdXJ0bGVQYXJzZXIgPSBmdXJ0bGVQYXJzZXJGcm9tQk5GKGJuZiksXG4gICAgICAgICAgcGFyc2VyID0gZnVydGxlUGFyc2VyLCAvLy9cbiAgICAgICAgICBub2RlID0gcGFyc2VyLnBhcnNlKHRva2Vucyk7XG5cbiAgICBpZiAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgcGFyc2VUcmVlID0gbm9kZS5hc1BhcnNlVHJlZSh0b2tlbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZVRyZWU7XG4gIH1cblxuICBzdGF0aWMgTGV4ZXIgPSBGdXJ0bGVMZXhlcjtcblxuICBzdGF0aWMgUGFyc2VyID0gRnVydGxlUGFyc2VyO1xuXG4gIHN0YXRpYyByZWFkT25seSA9IGZhbHNlO1xuXG4gIHN0YXRpYyBpbml0aWFsQ29udGVudCA9IGBCb29sZWFuIGlzQm91bmQoTm9kZSB0ZXJtTm9kZSwgTm9kZSBzdGF0ZW1lbnROb2RlKSB7XG4gIEJvb2xlYW4gYm91bmQgPSBmYWxzZTtcbiAgICBcbiAgU3RyaW5nIHZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZUZyb21UZXJtTm9kZSh0ZXJtTm9kZSk7XG4gIFxuICBJZiAodmFyaWFibGVOYW1lICE9IG51bGwpIHtcbiAgICBOb2RlcyBzdGF0ZW1lbnROb2RlcyA9IG5vZGVzUXVlcnkoc3RhdGVtZW50Tm9kZSwgLy9zdGF0ZW1lbnQpO1xuXG4gICAgRm9yRWFjaChzdGF0ZW1lbnROb2RlcywgKE5vZGUgc3RhdGVtZW50Tm9kZSkge1xuICAgICAgU3RyaW5nIGJvdW5kVmFyaWFibGVOYW1lID0gYm91bmRWYXJpYWJsZU5hbWVGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTsgXG4gICAgICBcbiAgICAgIElmIChib3VuZFZhcmlhYmxlTmFtZSA9PSB2YXJpYWJsZU5hbWUpIHtcbiAgICAgICAgYm91bmQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIFxuICBSZXR1cm4gYm91bmQ7XG59XG4gIFxuU3RyaW5nIHZhcmlhYmxlTmFtZUZyb21UZXJtTm9kZShOb2RlIHRlcm1Ob2RlKSB7XG4gIFN0cmluZyB2YXJpYWJsZU5hbWUgPSBudWxsO1xuICBcbiAgTm9kZSB2YXJpYWJsZU5hbWVUZXJtaW5hbE5vZGUgPSBub2RlUXVlcnkodGVybU5vZGUsIC90ZXJtL3ZhcmlhYmxlL0BuYW1lKTtcbiAgXG4gIElmICh2YXJpYWJsZU5hbWVUZXJtaW5hbE5vZGUgIT0gbnVsbCkge1xuICAgIHsgU3RyaW5nIGNvbnRlbnQgfSA9IHZhcmlhYmxlTmFtZVRlcm1pbmFsTm9kZTtcbiAgICBcbiAgICB2YXJpYWJsZU5hbWUgPSBjb250ZW50O1xuICB9XG4gIFxuICBSZXR1cm4gdmFyaWFibGVOYW1lO1xufVxuXG5TdHJpbmcgYm91bmRWYXJpYWJsZU5hbWVGcm9tU3RhdGVtZW50Tm9kZShOb2RlIHN0YXRlbWVudE5vZGUpIHtcbiAgU3RyaW5nIGJvdW5kVmFyaWFibGVOYW1lID0gbnVsbDtcbiAgXG4gIHsgTm9kZXMgY2hpbGROb2RlcyB9ID0gc3RhdGVtZW50Tm9kZTtcbiAgXG4gIFsgTm9kZSBmaXJzdENoaWxkTm9kZSBdID0gY2hpbGROb2RlcztcbiAgXG4gIHsgU3RyaW5nIGNvbnRlbnQgfSA9IGZpcnN0Q2hpbGROb2RlO1xuICBcbiAgSWYgKChjb250ZW50ID09IFwi4oiAXCIpIHx8IChjb250ZW50ID09IFwi4oiDXCIpKSB7XG4gICAgWyBfLCBOb2RlIGFyZ3VtZW50Tm9kZSBdID0gY2hpbGROb2RlcztcbiAgICBcbiAgICBOb2RlIGJvdW5kVmFyaWFibGVOYW1lVGVybWluYWxOb2RlID0gbm9kZVF1ZXJ5KGFyZ3VtZW50Tm9kZSwgL2FyZ3VtZW50L3Rlcm0vdmFyaWFibGUvQG5hbWUpO1xuICAgIFxuICAgIElmIChib3VuZFZhcmlhYmxlTmFtZVRlcm1pbmFsTm9kZSAhPSBudWxsKSB7XG4gICAgICB7IGNvbnRlbnQgfSA9IGJvdW5kVmFyaWFibGVOYW1lVGVybWluYWxOb2RlO1xuICAgICAgXG4gICAgICBib3VuZFZhcmlhYmxlTmFtZSA9IGNvbnRlbnQ7XG4gICAgfVxuICB9XG4gICAgXG4gIFJldHVybiBib3VuZFZhcmlhYmxlTmFtZTtcbn1cbmA7XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICAgIGNsYXNzTmFtZTogXCJmdXJ0bGVcIlxuICB9O1xufVxuIl0sIm5hbWVzIjpbIkZ1cnRsZVZpZXciLCJmdXJ0bGVQYXJzZXJGcm9tQk5GIiwicGFyc2Vyc1V0aWxpdGllcyIsImZ1cnRsZUxleGVyRnJvbUVudHJpZXMiLCJsZXhlcnNVdGlsaXRpZXMiLCJnZXRUb2tlbnMiLCJsZXhpY2FsRW50cmllcyIsImdldExleGljYWxFbnRyaWVzIiwiZW50cmllcyIsImZ1cnRsZUxleGVyIiwibGV4ZXIiLCJjb250ZW50IiwiZ2V0Q29udGVudCIsInRva2VucyIsInRva2VuaXNlIiwiZ2V0UGFyc2VUcmVlIiwicGFyc2VUcmVlIiwiYm5mIiwiZ2V0Qk5GIiwiZnVydGxlUGFyc2VyIiwicGFyc2VyIiwibm9kZSIsInBhcnNlIiwiYXNQYXJzZVRyZWUiLCJWaWV3IiwiTGV4ZXIiLCJGdXJ0bGVMZXhlciIsIlBhcnNlciIsIkZ1cnRsZVBhcnNlciIsInJlYWRPbmx5IiwiaW5pdGlhbENvbnRlbnQiLCJkZWZhdWx0UHJvcGVydGllcyIsImNsYXNzTmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFTcUJBOzs7cUJBUHdEOzJEQUU1RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFakIsSUFBTSxBQUFFQyxzQkFBd0JDLHVCQUFnQixDQUF4Q0QscUJBQ0YsQUFBRUUseUJBQTJCQyxzQkFBZSxDQUExQ0Q7QUFFTyxJQUFBLEFBQU1ILDJCQUFOO2NBQU1BO2FBQUFBO2dDQUFBQTtlQUFOLGtCQUFNQTs7a0JBQUFBOztZQUNuQkssS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU1DLGlCQUFpQixJQUFJLENBQUNDLGlCQUFpQixJQUN2Q0MsVUFBVUYsZ0JBQ1ZHLGNBQWNOLHVCQUF1QkssVUFDckNFLFFBQVFELGFBQ1JFLFVBQVUsSUFBSSxDQUFDQyxVQUFVLElBQ3pCQyxTQUFTSCxNQUFNSSxRQUFRLENBQUNIO2dCQUU5QixPQUFPRTtZQUNUOzs7WUFFQUUsS0FBQUE7bUJBQUFBLFNBQUFBLGFBQWFGLE1BQU07Z0JBQ2pCLElBQUlHLFlBQVk7Z0JBRWhCLElBQU1DLE1BQU0sSUFBSSxDQUFDQyxNQUFNLElBQ2pCQyxlQUFlbEIsb0JBQW9CZ0IsTUFDbkNHLFNBQVNELGNBQ1RFLE9BQU9ELE9BQU9FLEtBQUssQ0FBQ1Q7Z0JBRTFCLElBQUlRLFNBQVMsTUFBTTtvQkFDakJMLFlBQVlLLEtBQUtFLFdBQVcsQ0FBQ1Y7Z0JBQy9CO2dCQUVBLE9BQU9HO1lBQ1Q7OztXQXpCbUJoQjtFQUFtQndCLGFBQUk7QUEyQjFDLGlCQTNCbUJ4QixZQTJCWnlCLFNBQVFDLGtCQUFXO0FBRTFCLGlCQTdCbUIxQixZQTZCWjJCLFVBQVNDLG1CQUFZO0FBRTVCLGlCQS9CbUI1QixZQStCWjZCLFlBQVc7QUFFbEIsaUJBakNtQjdCLFlBaUNaOEIsa0JBQWtCO0FBMkR6QixpQkE1Rm1COUIsWUE0RlorQixxQkFBb0I7SUFDekJDLFdBQVc7QUFDYiJ9
|
package/lib/furtle/bnf.js
CHANGED
|
@@ -8,7 +8,7 @@ Object.defineProperty(exports, "default", {
|
|
|
8
8
|
return _default;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
-
var bnf = 'document ::= ( instruction | error )+ ;\n\n\n\ninstruction ::= functionDeclaration\n \n |
|
|
11
|
+
var bnf = 'document ::= ( instruction | error )+ ;\n\n\n\ninstruction ::= functionDeclaration\n \n | variablesDeclaration\n \n | variableAssignment \n \n | objectAssignment \n \n | arrayAssignment\n \n | conditionalBlock\n\n | forEachLoop \n \n ;\n\n\n\nfunctionDeclaration ::= [type] function ;\n\nvariablesDeclaration ::= [type] variable assignment? ( "," variable assignment? )* ";" ;\n\nvariableAssignment ::= variable assignment ";" ;\n\nobjectAssignment ::= "{" \n\n [type]? variable ( "," [type]? variable )* \n \n "}" "=" variable ";" ;\n\narrayAssignment ::= "[" \n\n ( \n\n ( "_" ( "," "_" )* ( "," [type]? variable )+ ) \n \n | \n \n ( [type]? variable ( "," [type]? variable )* ) \n \n ) \n \n "]" "=" variable ";" ;\n\nconditionalBlock ::= "If" "(" condition ")" block ( "Else" block )? ; \n\nforEachLoop ::= "ForEach"<NO_WHITESPACE>"(" [name] "," anonymousFunction ")" ";" ;\n\n\n \nassignment ::= "=" ( functionCall | nodesQuery | nodeQuery | value ) ;\n \n \n \nblock ::= "{" ( variablesDeclaration |\n\n variableAssignment | \n \n objectAssignment | \n \n arrayAssignment |\n \n conditionalBlock |\n\n forEachLoop )* "}" ;\n\n\n\n\nfunctionCall ::= [name]<NO_WHITESPACE>"(" ( value ( "," value )* )? ")" ;\n\nfunction ::= [name]<NO_WHITESPACE>"(" ( argument ( "," argument )* )? ")" body ;\n\nanonymousFunction ::= "(" ( argument ( "," argument )* )? ")" body ;\n\n\n\nnodesQuery ::= "nodesQuery"<NO_WHITESPACE>"(" variable "," expression ")" ;\n\nnodeQuery ::= "nodeQuery"<NO_WHITESPACE>"(" variable "," expression ")" ;\n\n\n\n\ncondition ::= "(" condition ")" \n\n | condition ( "||" | "&&" ) condition \n\n | value ( ( "!=" | "==" ) value )? \n \n ;\n\n\n\nbody ::= "{" ( variablesDeclaration | \n \n variableAssignment | \n \n objectAssignment | \n \n arrayAssignment |\n \n conditionalBlock |\n\n forEachLoop )* return? "}" ;\n \n \n\nreturn ::= "Return" value ";" ; \n\n\n\nvalue ::= variable | [number] | [primitive] | [string-literal] ;\n\n\n\nargument ::= [type] variable ;\n\n\n\nvariable ::= [name] ;\n\n\n\nexpression ::= path spread? subExpression? ;\n\npath ::= "/" infiniteDescent? selectors ;\n\nsubExpression ::= path spread? subExpression?;\n\ninfiniteDescent ::= "/" ;\n\nselectors ::= selector ( "|" selector )* ;\n\nspread ::= unique\n\n | "[" \n \n ( \n \n ( startIndex "..." endIndex ) \n \n | \n \n ( startIndex "..." ) \n \n | \n \n ( "..." endIndex )\n \n | \n \n index \n \n ) \n \n "]" ;\n\nselector ::= ruleName | tokenType ;\n \nruleName ::= [name] | "*" ;\n \ntokenType ::= "@"<NO_WHITESPACE>( [name] | "*" ) ;\n \nstartIndex ::= [number] ;\n \nendIndex ::= [number] ;\n \nindex ::= [number] ;\n \nunique ::= "!" ;\n \n\n\nerror. ::= . ;';
|
|
12
12
|
var _default = bnf;
|
|
13
13
|
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdXJ0bGUvYm5mLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgZG9jdW1lbnQgICAgICAgICAgICAgIDo6PSAgKCBpbnN0cnVjdGlvbiB8IGVycm9yICkrIDtcblxuXG5cbmluc3RydWN0aW9uICAgICAgICAgICA6Oj0gIGZ1bmN0aW9uRGVjbGFyYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgfCAgdmFyaWFibGVzRGVjbGFyYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgfCAgdmFyaWFibGVBc3NpZ25tZW50IFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB8ICBvYmplY3RBc3NpZ25tZW50IFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB8ICBhcnJheUFzc2lnbm1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgfCAgY29uZGl0aW9uYWxCbG9ja1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB8ICBmb3JFYWNoTG9vcCBcbiAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuXG5mdW5jdGlvbkRlY2xhcmF0aW9uICAgOjo9ICBbdHlwZV0gZnVuY3Rpb24gO1xuXG52YXJpYWJsZXNEZWNsYXJhdGlvbiAgOjo9ICBbdHlwZV0gdmFyaWFibGUgYXNzaWdubWVudD8gKCBcIixcIiB2YXJpYWJsZSBhc3NpZ25tZW50PyApKiBcIjtcIiA7XG5cbnZhcmlhYmxlQXNzaWdubWVudCAgICA6Oj0gIHZhcmlhYmxlIGFzc2lnbm1lbnQgXCI7XCIgO1xuXG5vYmplY3RBc3NpZ25tZW50ICAgICAgOjo9ICBcIntcIiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPyB2YXJpYWJsZSAoIFwiLFwiIFt0eXBlXT8gdmFyaWFibGUgKSogXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwifVwiIFwiPVwiIHZhcmlhYmxlIFwiO1wiIDtcblxuYXJyYXlBc3NpZ25tZW50ICAgICAgIDo6PSAgXCJbXCIgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICggXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBcIl9cIiAoIFwiLFwiIFwiX1wiICkqICggXCIsXCIgW3R5cGVdPyB2YXJpYWJsZSApKyApIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBbdHlwZV0/IHZhcmlhYmxlICggXCIsXCIgW3R5cGVdPyB2YXJpYWJsZSApKiApIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJdXCIgXCI9XCIgdmFyaWFibGUgXCI7XCIgO1xuXG5jb25kaXRpb25hbEJsb2NrICAgICAgOjo9ICBcIklmXCIgXCIoXCIgY29uZGl0aW9uIFwiKVwiIGJsb2NrICggXCJFbHNlXCIgYmxvY2sgKT8gOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbmZvckVhY2hMb29wICAgICAgICAgICA6Oj0gIFwiRm9yRWFjaFwiPE5PX1dISVRFU1BBQ0U+XCIoXCIgW25hbWVdIFwiLFwiIGFub255bW91c0Z1bmN0aW9uIFwiKVwiIFwiO1wiIDtcblxuXG4gICAgICAgICAgICAgXG5hc3NpZ25tZW50ICAgICAgICAgICAgOjo9ICBcIj1cIiAoIGZ1bmN0aW9uQ2FsbCB8IG5vZGVzUXVlcnkgfCBub2RlUXVlcnkgfCB2YWx1ZSApIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJsb2NrICAgICAgICAgICAgICAgICA6Oj0gIFwie1wiICggdmFyaWFibGVzRGVjbGFyYXRpb24gfFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnQgfCBcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0QXNzaWdubWVudCB8IFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheUFzc2lnbm1lbnQgfFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25hbEJsb2NrIHxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yRWFjaExvb3AgKSogXCJ9XCIgO1xuXG5cblxuXG5mdW5jdGlvbkNhbGwgICAgICAgICAgOjo9ICBbbmFtZV08Tk9fV0hJVEVTUEFDRT5cIihcIiAoIHZhbHVlICggXCIsXCIgdmFsdWUgKSogKT8gXCIpXCIgO1xuXG5mdW5jdGlvbiAgICAgICAgICAgICAgOjo9ICBbbmFtZV08Tk9fV0hJVEVTUEFDRT5cIihcIiAoIGFyZ3VtZW50ICggXCIsXCIgYXJndW1lbnQgKSogKT8gXCIpXCIgYm9keSA7XG5cbmFub255bW91c0Z1bmN0aW9uICAgICA6Oj0gIFwiKFwiICggYXJndW1lbnQgKCBcIixcIiBhcmd1bWVudCApKiApPyBcIilcIiBib2R5IDtcblxuXG5cbm5vZGVzUXVlcnkgICAgICAgICAgICA6Oj0gIFwibm9kZXNRdWVyeVwiPE5PX1dISVRFU1BBQ0U+XCIoXCIgdmFyaWFibGUgXCIsXCIgZXhwcmVzc2lvbiBcIilcIiA7XG5cbm5vZGVRdWVyeSAgICAgICAgICAgICA6Oj0gIFwibm9kZVF1ZXJ5XCI8Tk9fV0hJVEVTUEFDRT5cIihcIiB2YXJpYWJsZSBcIixcIiBleHByZXNzaW9uIFwiKVwiIDtcblxuXG5cblxuY29uZGl0aW9uICAgICAgICAgICAgIDo6PSAgXCIoXCIgY29uZGl0aW9uIFwiKVwiIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICB8ICBjb25kaXRpb24gKCBcInx8XCIgfCBcIiYmXCIgKSBjb25kaXRpb24gXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHwgIHZhbHVlICggKCBcIiE9XCIgfCBcIj09XCIgKSB2YWx1ZSApPyBcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG5cblxuYm9keSAgICAgICAgICAgICAgICAgIDo6PSAgXCJ7XCIgKCB2YXJpYWJsZXNEZWNsYXJhdGlvbiB8IFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnQgfCBcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0QXNzaWdubWVudCB8IFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheUFzc2lnbm1lbnQgfFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25hbEJsb2NrIHxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yRWFjaExvb3AgKSogcmV0dXJuPyBcIn1cIiA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG5yZXR1cm4gICAgICAgICAgICAgICAgOjo9ICBcIlJldHVyblwiIHZhbHVlIFwiO1wiIDsgXG5cblxuXG52YWx1ZSAgICAgICAgICAgICAgICAgOjo9ICB2YXJpYWJsZSB8IFtudW1iZXJdIHwgW3ByaW1pdGl2ZV0gfCBbc3RyaW5nLWxpdGVyYWxdIDtcblxuXG5cbmFyZ3VtZW50ICAgICAgICAgICAgICA6Oj0gIFt0eXBlXSB2YXJpYWJsZSA7XG5cblxuXG52YXJpYWJsZSAgICAgICAgICAgICAgOjo9ICBbbmFtZV0gO1xuXG5cblxuZXhwcmVzc2lvbiAgICAgICAgICAgIDo6PSAgcGF0aCBzcHJlYWQ/IHN1YkV4cHJlc3Npb24/IDtcblxucGF0aCAgICAgICAgICAgICAgICAgIDo6PSAgXCIvXCIgaW5maW5pdGVEZXNjZW50PyBzZWxlY3RvcnMgO1xuXG5zdWJFeHByZXNzaW9uICAgICAgICAgOjo9ICBwYXRoIHNwcmVhZD8gc3ViRXhwcmVzc2lvbj87XG5cbmluZmluaXRlRGVzY2VudCAgICAgICA6Oj0gIFwiL1wiIDtcblxuc2VsZWN0b3JzICAgICAgICAgICAgIDo6PSAgc2VsZWN0b3IgKCBcInxcIiBzZWxlY3RvciApKiA7XG5cbnNwcmVhZCAgICAgICAgICAgICAgICA6Oj0gIHVuaXF1ZVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB8ICBcIltcIiBcbiAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHN0YXJ0SW5kZXggXCIuLi5cIiBlbmRJbmRleCApIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBzdGFydEluZGV4IFwiLi4uXCIgKSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICggXCIuLi5cIiBlbmRJbmRleCApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICkgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJdXCIgO1xuXG5zZWxlY3RvciAgICAgICAgICAgICAgOjo9ICBydWxlTmFtZSB8IHRva2VuVHlwZSA7XG4gICAgICAgICAgICAgICAgICAgXG5ydWxlTmFtZSAgICAgICAgICAgICAgOjo9ICBbbmFtZV0gfCBcIipcIiA7XG4gICAgICAgICAgICAgICAgICAgXG50b2tlblR5cGUgICAgICAgICAgICAgOjo9ICBcIkBcIjxOT19XSElURVNQQUNFPiggW25hbWVdIHwgXCIqXCIgKSA7XG4gICAgICAgICAgICAgICAgICAgXG5zdGFydEluZGV4ICAgICAgICAgICAgOjo9ICBbbnVtYmVyXSA7XG4gICAgICAgICAgICAgICAgICAgXG5lbmRJbmRleCAgICAgICAgICAgICAgOjo9ICBbbnVtYmVyXSA7XG4gICAgICAgICAgICAgICAgICAgXG5pbmRleCAgICAgICAgICAgICAgICAgOjo9ICBbbnVtYmVyXSA7XG4gICAgICAgICAgICAgICAgICAgXG51bmlxdWUgICAgICAgICAgICAgICAgOjo9ICBcIiFcIiA7XG4gICAgICAgICAgICAgICAgICAgXG5cblxuZXJyb3IuICAgICAgICAgICAgICAgIDo6PSAgLiA7YDtcblxuZXhwb3J0IGRlZmF1bHQgYm5mO1xuIl0sIm5hbWVzIjpbImJuZiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBc0xBOzs7ZUFBQTs7O0FBcExBLElBQU1BLE1BQU87SUFvTGIsV0FBZUEifQ==
|
package/lib/furtle/entries.js
CHANGED
|
@@ -13,13 +13,13 @@ var entries = [
|
|
|
13
13
|
"type": "^(?:Boolean|String|Number|Nodes|Node|Void)"
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
|
-
"keyword": "^(?:If|Else|Return|ForEach
|
|
16
|
+
"keyword": "^(?:If|Else|Return|ForEach)"
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
19
|
"primitive": "^(?:null|true|false)"
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
|
-
"instruction": "^(?:nodeQuery|nodesQuery
|
|
22
|
+
"instruction": "^(?:nodeQuery|nodesQuery)"
|
|
23
23
|
},
|
|
24
24
|
{
|
|
25
25
|
"special": "^(?:!=|==|=|;|,|_|&&|\\|\\||@|!|\\*|\\||\\/|\\(|\\)|\\[|\\]|\\{|\\}|\\.\\.\\.)"
|
|
@@ -36,4 +36,4 @@ var entries = [
|
|
|
36
36
|
];
|
|
37
37
|
var _default = entries;
|
|
38
38
|
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdXJ0bGUvZW50cmllcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJ0eXBlXCI6IFwiXig/
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdXJ0bGUvZW50cmllcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmNvbnN0IGVudHJpZXMgPSBbXHJcbiAge1xyXG4gICAgXCJ0eXBlXCI6IFwiXig/OkJvb2xlYW58U3RyaW5nfE51bWJlcnxOb2Rlc3xOb2RlfFZvaWQpXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwia2V5d29yZFwiOiBcIl4oPzpJZnxFbHNlfFJldHVybnxGb3JFYWNoKVwiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcInByaW1pdGl2ZVwiOiBcIl4oPzpudWxsfHRydWV8ZmFsc2UpXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwiaW5zdHJ1Y3Rpb25cIjogXCJeKD86bm9kZVF1ZXJ5fG5vZGVzUXVlcnkpXCJcclxuICB9LFxyXG4gIHtcclxuICAgIFwic3BlY2lhbFwiOiBcIl4oPzohPXw9PXw9fDt8LHxffCYmfFxcXFx8XFxcXHx8QHwhfFxcXFwqfFxcXFx8fFxcXFwvfFxcXFwofFxcXFwpfFxcXFxbfFxcXFxdfFxcXFx7fFxcXFx9fFxcXFwuXFxcXC5cXFxcLilcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJuYW1lXCI6IFwiXlthLXpBLVpcXC1dK1wiXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm51bWJlclwiOiBcIl5bMC05XStcIlxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJ1bmFzc2lnbmVkXCI6IFwiXi5cIlxyXG4gIH1cclxuXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGVudHJpZXM7XHJcbiJdLCJuYW1lcyI6WyJlbnRyaWVzIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkE2QkE7OztlQUFBOzs7QUEzQkEsSUFBTUEsVUFBVTtJQUNkO1FBQ0UsUUFBUTtJQUNWO0lBQ0E7UUFDRSxXQUFXO0lBQ2I7SUFDQTtRQUNFLGFBQWE7SUFDZjtJQUNBO1FBQ0UsZUFBZTtJQUNqQjtJQUNBO1FBQ0UsV0FBVztJQUNiO0lBQ0E7UUFDRSxRQUFRO0lBQ1Y7SUFDQTtRQUNFLFVBQVU7SUFDWjtJQUNBO1FBQ0UsY0FBYztJQUNoQjtDQUNEO0lBRUQsV0FBZUEifQ==
|
package/package.json
CHANGED
|
@@ -40,26 +40,25 @@ export default class FurtleView extends View {
|
|
|
40
40
|
|
|
41
41
|
static readOnly = false;
|
|
42
42
|
|
|
43
|
-
static initialContent = `Node
|
|
43
|
+
static initialContent = `Boolean isBound(Node termNode, Node statementNode) {
|
|
44
|
+
Boolean bound = false;
|
|
45
|
+
|
|
46
|
+
String variableName = variableNameFromTermNode(termNode);
|
|
44
47
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
If (variableName == null) {
|
|
48
|
-
Break;
|
|
49
|
-
}
|
|
48
|
+
If (variableName != null) {
|
|
49
|
+
Nodes statementNodes = nodesQuery(statementNode, //statement);
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
Break;
|
|
51
|
+
ForEach(statementNodes, (Node statementNode) {
|
|
52
|
+
String boundVariableName = boundVariableNameFromStatementNode(statementNode);
|
|
53
|
+
|
|
54
|
+
If (boundVariableName == variableName) {
|
|
55
|
+
bound = true;
|
|
56
|
+
}
|
|
57
|
+
});
|
|
60
58
|
}
|
|
61
|
-
});
|
|
62
59
|
|
|
60
|
+
Return bound;
|
|
61
|
+
}
|
|
63
62
|
|
|
64
63
|
String variableNameFromTermNode(Node termNode) {
|
|
65
64
|
String variableName = null;
|
|
@@ -67,9 +66,7 @@ String variableNameFromTermNode(Node termNode) {
|
|
|
67
66
|
Node variableNameTerminalNode = nodeQuery(termNode, /term/variable/@name);
|
|
68
67
|
|
|
69
68
|
If (variableNameTerminalNode != null) {
|
|
70
|
-
String content;
|
|
71
|
-
|
|
72
|
-
{ content } = variableNameTerminalNode;
|
|
69
|
+
{ String content } = variableNameTerminalNode;
|
|
73
70
|
|
|
74
71
|
variableName = content;
|
|
75
72
|
}
|
|
@@ -80,37 +77,21 @@ String variableNameFromTermNode(Node termNode) {
|
|
|
80
77
|
String boundVariableNameFromStatementNode(Node statementNode) {
|
|
81
78
|
String boundVariableName = null;
|
|
82
79
|
|
|
83
|
-
Nodes childNodes;
|
|
84
|
-
|
|
85
|
-
{ childNodes } = statementNode;
|
|
80
|
+
{ Nodes childNodes } = statementNode;
|
|
86
81
|
|
|
87
|
-
Node firstChildNode;
|
|
88
|
-
|
|
89
|
-
[ firstChildNode ] = childNodes;
|
|
82
|
+
[ Node firstChildNode ] = childNodes;
|
|
90
83
|
|
|
91
|
-
|
|
84
|
+
{ String content } = firstChildNode;
|
|
92
85
|
|
|
93
|
-
If (
|
|
94
|
-
Node
|
|
95
|
-
|
|
96
|
-
String content;
|
|
86
|
+
If ((content == "∀") || (content == "∃")) {
|
|
87
|
+
[ _, Node argumentNode ] = childNodes;
|
|
97
88
|
|
|
98
|
-
|
|
89
|
+
Node boundVariableNameTerminalNode = nodeQuery(argumentNode, /argument/term/variable/@name);
|
|
99
90
|
|
|
100
|
-
If (
|
|
101
|
-
|
|
91
|
+
If (boundVariableNameTerminalNode != null) {
|
|
92
|
+
{ content } = boundVariableNameTerminalNode;
|
|
102
93
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
Node argumentNode = secondChildNode;
|
|
106
|
-
|
|
107
|
-
Node boundVariableNameTerminalNode = nodeQuery(argumentNode, /argument/term/variable/@name);
|
|
108
|
-
|
|
109
|
-
If (boundVariableNameTerminalNode != null) {
|
|
110
|
-
{ content } = boundVariableNameTerminalNode;
|
|
111
|
-
|
|
112
|
-
boundVariableName = content;
|
|
113
|
-
}
|
|
94
|
+
boundVariableName = content;
|
|
114
95
|
}
|
|
115
96
|
}
|
|
116
97
|
|
package/src/furtle/bnf.js
CHANGED
|
@@ -6,8 +6,6 @@ const bnf = `document ::= ( instruction | error )+ ;
|
|
|
6
6
|
|
|
7
7
|
instruction ::= functionDeclaration
|
|
8
8
|
|
|
9
|
-
| pointersDeclaration
|
|
10
|
-
|
|
11
9
|
| variablesDeclaration
|
|
12
10
|
|
|
13
11
|
| variableAssignment
|
|
@@ -20,39 +18,35 @@ instruction ::= functionDeclaration
|
|
|
20
18
|
|
|
21
19
|
| forEachLoop
|
|
22
20
|
|
|
23
|
-
| break
|
|
24
|
-
|
|
25
21
|
;
|
|
26
22
|
|
|
27
23
|
|
|
28
24
|
|
|
29
25
|
functionDeclaration ::= [type] function ;
|
|
30
26
|
|
|
31
|
-
|
|
27
|
+
variablesDeclaration ::= [type] variable assignment? ( "," variable assignment? )* ";" ;
|
|
32
28
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
variableAssignment ::= [name] assignment ";" ;
|
|
29
|
+
variableAssignment ::= variable assignment ";" ;
|
|
36
30
|
|
|
37
31
|
objectAssignment ::= "{"
|
|
38
32
|
|
|
39
|
-
[
|
|
33
|
+
[type]? variable ( "," [type]? variable )*
|
|
40
34
|
|
|
41
|
-
"}" "="
|
|
35
|
+
"}" "=" variable ";" ;
|
|
42
36
|
|
|
43
37
|
arrayAssignment ::= "["
|
|
44
38
|
|
|
45
39
|
(
|
|
46
40
|
|
|
47
|
-
( "_" ( "," "_" )* ( "," [
|
|
41
|
+
( "_" ( "," "_" )* ( "," [type]? variable )+ )
|
|
48
42
|
|
|
49
43
|
|
|
|
50
44
|
|
|
51
|
-
( [
|
|
45
|
+
( [type]? variable ( "," [type]? variable )* )
|
|
52
46
|
|
|
53
47
|
)
|
|
54
48
|
|
|
55
|
-
"]" "="
|
|
49
|
+
"]" "=" variable ";" ;
|
|
56
50
|
|
|
57
51
|
conditionalBlock ::= "If" "(" condition ")" block ( "Else" block )? ;
|
|
58
52
|
|
|
@@ -60,7 +54,7 @@ forEachLoop ::= "ForEach"<NO_WHITESPACE>"(" [name] "," anonymousFunct
|
|
|
60
54
|
|
|
61
55
|
|
|
62
56
|
|
|
63
|
-
assignment ::= "=" ( functionCall |
|
|
57
|
+
assignment ::= "=" ( functionCall | nodesQuery | nodeQuery | value ) ;
|
|
64
58
|
|
|
65
59
|
|
|
66
60
|
|
|
@@ -74,14 +68,12 @@ block ::= "{" ( variablesDeclaration |
|
|
|
74
68
|
|
|
75
69
|
conditionalBlock |
|
|
76
70
|
|
|
77
|
-
forEachLoop
|
|
78
|
-
|
|
79
|
-
break )* "}" ;
|
|
71
|
+
forEachLoop )* "}" ;
|
|
80
72
|
|
|
81
73
|
|
|
82
74
|
|
|
83
75
|
|
|
84
|
-
functionCall ::= [name]<NO_WHITESPACE>"(" (
|
|
76
|
+
functionCall ::= [name]<NO_WHITESPACE>"(" ( value ( "," value )* )? ")" ;
|
|
85
77
|
|
|
86
78
|
function ::= [name]<NO_WHITESPACE>"(" ( argument ( "," argument )* )? ")" body ;
|
|
87
79
|
|
|
@@ -89,11 +81,9 @@ anonymousFunction ::= "(" ( argument ( "," argument )* )? ")" body ;
|
|
|
89
81
|
|
|
90
82
|
|
|
91
83
|
|
|
92
|
-
|
|
84
|
+
nodesQuery ::= "nodesQuery"<NO_WHITESPACE>"(" variable "," expression ")" ;
|
|
93
85
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
nodeQuery ::= "nodeQuery"<NO_WHITESPACE>"(" [name] "," expression ")" ;
|
|
86
|
+
nodeQuery ::= "nodeQuery"<NO_WHITESPACE>"(" variable "," expression ")" ;
|
|
97
87
|
|
|
98
88
|
|
|
99
89
|
|
|
@@ -118,23 +108,23 @@ body ::= "{" ( variablesDeclaration |
|
|
|
118
108
|
|
|
119
109
|
conditionalBlock |
|
|
120
110
|
|
|
121
|
-
forEachLoop
|
|
122
|
-
|
|
123
|
-
break )* return? "}" ;
|
|
111
|
+
forEachLoop )* return? "}" ;
|
|
124
112
|
|
|
125
113
|
|
|
126
114
|
|
|
127
115
|
return ::= "Return" value ";" ;
|
|
128
116
|
|
|
129
|
-
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
value ::= variable | [number] | [primitive] | [string-literal] ;
|
|
130
120
|
|
|
131
121
|
|
|
132
122
|
|
|
133
|
-
|
|
123
|
+
argument ::= [type] variable ;
|
|
134
124
|
|
|
135
125
|
|
|
136
126
|
|
|
137
|
-
|
|
127
|
+
variable ::= [name] ;
|
|
138
128
|
|
|
139
129
|
|
|
140
130
|
|
package/src/furtle/entries.js
CHANGED
|
@@ -5,13 +5,13 @@ const entries = [
|
|
|
5
5
|
"type": "^(?:Boolean|String|Number|Nodes|Node|Void)"
|
|
6
6
|
},
|
|
7
7
|
{
|
|
8
|
-
"keyword": "^(?:If|Else|Return|ForEach
|
|
8
|
+
"keyword": "^(?:If|Else|Return|ForEach)"
|
|
9
9
|
},
|
|
10
10
|
{
|
|
11
11
|
"primitive": "^(?:null|true|false)"
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
|
-
"instruction": "^(?:nodeQuery|nodesQuery
|
|
14
|
+
"instruction": "^(?:nodeQuery|nodesQuery)"
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
17
|
"special": "^(?:!=|==|=|;|,|_|&&|\\|\\||@|!|\\*|\\||\\/|\\(|\\)|\\[|\\]|\\{|\\}|\\.\\.\\.)"
|