occam-grammars 1.3.1 → 1.3.3
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 +5 -17
- 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] [name] assignment? ( "," [name] assignment? )* ";" ;\n\nvariableAssignment ::= [name] assignment ";" ;\n\nobjectAssignment ::= "{" \n\n [type]? [name] ( "," [type]? [name] )* \n \n "}" "=" [name] ";" ;\n\narrayAssignment ::= "[" \n\n ( \n\n ( "_" ( "," "_" )* ( "," [type]? [name] )+ ) \n \n | \n \n ( [type]? [name] ( "," [type]? [name] )* ) \n \n ) \n \n "]" "=" [name] ";" ;\n\nconditionalBlock ::= "If" "(" condition ")" block ( "Else" block )? ; \n\nforEachLoop ::= "ForEach"<NO_WHITESPACE>"(" [name] "," anonymousFunction ")" ";" ;\n\n\n \nassignment ::= "=" ( functionCall | isTerminalNode | 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>"(" ( [name] ( "," [name] )* )? ")" ;\n\nfunction ::= [name]<NO_WHITESPACE>"(" ( argument ( "," argument )* )? ")" body ;\n\nanonymousFunction ::= "(" ( argument ( "," argument )* )? ")" body ;\n\n\n\nisTerminalNode ::= "isTerminalNode"<NO_WHITESPACE>"(" [name] ")" ;\n\nnodesQuery ::= "nodesQuery"<NO_WHITESPACE>"(" [name] "," expression ")" ;\n\nnodeQuery ::= "nodeQuery"<NO_WHITESPACE>"(" [name] "," 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 ::= [name] | [number] | [primitive] | [string-literal] ;\n\n\n\nargument ::= [type] [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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mdXJ0bGUvYm5mLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBibmYgPSBgZG9jdW1lbnQgICAgICAgICAgICAgIDo6PSAgKCBpbnN0cnVjdGlvbiB8IGVycm9yICkrIDtcblxuXG5cbmluc3RydWN0aW9uICAgICAgICAgICA6Oj0gIGZ1bmN0aW9uRGVjbGFyYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgfCAgdmFyaWFibGVzRGVjbGFyYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgfCAgdmFyaWFibGVBc3NpZ25tZW50IFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB8ICBvYmplY3RBc3NpZ25tZW50IFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB8ICBhcnJheUFzc2lnbm1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgfCAgY29uZGl0aW9uYWxCbG9ja1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB8ICBmb3JFYWNoTG9vcCBcbiAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICA7XG5cblxuXG5mdW5jdGlvbkRlY2xhcmF0aW9uICAgOjo9ICBbdHlwZV0gZnVuY3Rpb24gO1xuXG52YXJpYWJsZXNEZWNsYXJhdGlvbiAgOjo9ICBbdHlwZV0gW25hbWVdIGFzc2lnbm1lbnQ/ICggXCIsXCIgW25hbWVdIGFzc2lnbm1lbnQ/ICkqIFwiO1wiIDtcblxudmFyaWFibGVBc3NpZ25tZW50ICAgIDo6PSAgW25hbWVdIGFzc2lnbm1lbnQgXCI7XCIgO1xuXG5vYmplY3RBc3NpZ25tZW50ICAgICAgOjo9ICBcIntcIiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPyBbbmFtZV0gKCBcIixcIiBbdHlwZV0/IFtuYW1lXSApKiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ9XCIgXCI9XCIgW25hbWVdIFwiO1wiIDtcblxuYXJyYXlBc3NpZ25tZW50ICAgICAgIDo6PSAgXCJbXCIgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICggXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBcIl9cIiAoIFwiLFwiIFwiX1wiICkqICggXCIsXCIgW3R5cGVdPyBbbmFtZV0gKSsgKSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICggW3R5cGVdPyBbbmFtZV0gKCBcIixcIiBbdHlwZV0/IFtuYW1lXSApKiApIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJdXCIgXCI9XCIgW25hbWVdIFwiO1wiIDtcblxuY29uZGl0aW9uYWxCbG9jayAgICAgIDo6PSAgXCJJZlwiIFwiKFwiIGNvbmRpdGlvbiBcIilcIiBibG9jayAoIFwiRWxzZVwiIGJsb2NrICk/IDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG5mb3JFYWNoTG9vcCAgICAgICAgICAgOjo9ICBcIkZvckVhY2hcIjxOT19XSElURVNQQUNFPlwiKFwiIFtuYW1lXSBcIixcIiBhbm9ueW1vdXNGdW5jdGlvbiBcIilcIiBcIjtcIiA7XG5cblxuICAgICAgICAgICAgIFxuYXNzaWdubWVudCAgICAgICAgICAgIDo6PSAgXCI9XCIgKCBmdW5jdGlvbkNhbGwgfCBpc1Rlcm1pbmFsTm9kZSB8IG5vZGVzUXVlcnkgfCBub2RlUXVlcnkgfCB2YWx1ZSApIDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJsb2NrICAgICAgICAgICAgICAgICA6Oj0gIFwie1wiICggdmFyaWFibGVzRGVjbGFyYXRpb24gfFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFzc2lnbm1lbnQgfCBcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0QXNzaWdubWVudCB8IFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheUFzc2lnbm1lbnQgfFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25hbEJsb2NrIHxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yRWFjaExvb3AgKSogXCJ9XCIgO1xuXG5cblxuXG5mdW5jdGlvbkNhbGwgICAgICAgICAgOjo9ICBbbmFtZV08Tk9fV0hJVEVTUEFDRT5cIihcIiAoIFtuYW1lXSAoIFwiLFwiIFtuYW1lXSApKiApPyBcIilcIiA7XG5cbmZ1bmN0aW9uICAgICAgICAgICAgICA6Oj0gIFtuYW1lXTxOT19XSElURVNQQUNFPlwiKFwiICggYXJndW1lbnQgKCBcIixcIiBhcmd1bWVudCApKiApPyBcIilcIiBib2R5IDtcblxuYW5vbnltb3VzRnVuY3Rpb24gICAgIDo6PSAgXCIoXCIgKCBhcmd1bWVudCAoIFwiLFwiIGFyZ3VtZW50ICkqICk/IFwiKVwiIGJvZHkgO1xuXG5cblxuaXNUZXJtaW5hbE5vZGUgICAgICAgIDo6PSAgXCJpc1Rlcm1pbmFsTm9kZVwiPE5PX1dISVRFU1BBQ0U+XCIoXCIgW25hbWVdIFwiKVwiIDtcblxubm9kZXNRdWVyeSAgICAgICAgICAgIDo6PSAgXCJub2Rlc1F1ZXJ5XCI8Tk9fV0hJVEVTUEFDRT5cIihcIiBbbmFtZV0gXCIsXCIgZXhwcmVzc2lvbiBcIilcIiA7XG5cbm5vZGVRdWVyeSAgICAgICAgICAgICA6Oj0gIFwibm9kZVF1ZXJ5XCI8Tk9fV0hJVEVTUEFDRT5cIihcIiBbbmFtZV0gXCIsXCIgZXhwcmVzc2lvbiBcIilcIiA7XG5cblxuXG5cbmNvbmRpdGlvbiAgICAgICAgICAgICA6Oj0gIFwiKFwiIGNvbmRpdGlvbiBcIilcIiBcblxuICAgICAgICAgICAgICAgICAgICAgICAgfCAgY29uZGl0aW9uICggXCJ8fFwiIHwgXCImJlwiICkgY29uZGl0aW9uIFxuXG4gICAgICAgICAgICAgICAgICAgICAgICB8ICB2YWx1ZSAoICggXCIhPVwiIHwgXCI9PVwiICkgdmFsdWUgKT8gXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIDtcblxuXG5cbmJvZHkgICAgICAgICAgICAgICAgICA6Oj0gIFwie1wiICggdmFyaWFibGVzRGVjbGFyYXRpb24gfCBcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50IHwgXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdEFzc2lnbm1lbnQgfCBcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlBc3NpZ25tZW50IHxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uYWxCbG9jayB8XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvckVhY2hMb29wICkqIHJldHVybj8gXCJ9XCIgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxucmV0dXJuICAgICAgICAgICAgICAgIDo6PSAgXCJSZXR1cm5cIiB2YWx1ZSBcIjtcIiA7IFxuXG5cblxudmFsdWUgICAgICAgICAgICAgICAgIDo6PSAgW25hbWVdIHwgW251bWJlcl0gfCBbcHJpbWl0aXZlXSB8IFtzdHJpbmctbGl0ZXJhbF0gO1xuXG5cblxuYXJndW1lbnQgICAgICAgICAgICAgIDo6PSAgW3R5cGVdIFtuYW1lXSA7XG5cblxuXG5leHByZXNzaW9uICAgICAgICAgICAgOjo9ICBwYXRoIHNwcmVhZD8gc3ViRXhwcmVzc2lvbj8gO1xuXG5wYXRoICAgICAgICAgICAgICAgICAgOjo9ICBcIi9cIiBpbmZpbml0ZURlc2NlbnQ/IHNlbGVjdG9ycyA7XG5cbnN1YkV4cHJlc3Npb24gICAgICAgICA6Oj0gIHBhdGggc3ByZWFkPyBzdWJFeHByZXNzaW9uPztcblxuaW5maW5pdGVEZXNjZW50ICAgICAgIDo6PSAgXCIvXCIgO1xuXG5zZWxlY3RvcnMgICAgICAgICAgICAgOjo9ICBzZWxlY3RvciAoIFwifFwiIHNlbGVjdG9yICkqIDtcblxuc3ByZWFkICAgICAgICAgICAgICAgIDo6PSAgdW5pcXVlXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHwgIFwiW1wiIFxuICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICggc3RhcnRJbmRleCBcIi4uLlwiIGVuZEluZGV4ICkgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIHN0YXJ0SW5kZXggXCIuLi5cIiApIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBcIi4uLlwiIGVuZEluZGV4IClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcIl1cIiA7XG5cbnNlbGVjdG9yICAgICAgICAgICAgICA6Oj0gIHJ1bGVOYW1lIHwgdG9rZW5UeXBlIDtcbiAgICAgICAgICAgICAgICAgICBcbnJ1bGVOYW1lICAgICAgICAgICAgICA6Oj0gIFtuYW1lXSB8IFwiKlwiIDtcbiAgICAgICAgICAgICAgICAgICBcbnRva2VuVHlwZSAgICAgICAgICAgICA6Oj0gIFwiQFwiPE5PX1dISVRFU1BBQ0U+KCBbbmFtZV0gfCBcIipcIiApIDtcbiAgICAgICAgICAgICAgICAgICBcbnN0YXJ0SW5kZXggICAgICAgICAgICA6Oj0gIFtudW1iZXJdIDtcbiAgICAgICAgICAgICAgICAgICBcbmVuZEluZGV4ICAgICAgICAgICAgICA6Oj0gIFtudW1iZXJdIDtcbiAgICAgICAgICAgICAgICAgICBcbmluZGV4ICAgICAgICAgICAgICAgICA6Oj0gIFtudW1iZXJdIDtcbiAgICAgICAgICAgICAgICAgICBcbnVuaXF1ZSAgICAgICAgICAgICAgICA6Oj0gIFwiIVwiIDtcbiAgICAgICAgICAgICAgICAgICBcblxuXG5lcnJvci4gICAgICAgICAgICAgICAgOjo9ICAuIDtgO1xuXG5leHBvcnQgZGVmYXVsdCBibmY7XG4iXSwibmFtZXMiOlsiYm5mIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFvTEE7OztlQUFBOzs7QUFsTEEsSUFBTUEsTUFBTztJQWtMYixXQUFlQSJ9
|
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,23 +18,19 @@ 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
|
-
pointersDeclaration ::= [type]<NO_WHITESPACE>"*" [name] assignment? ( "," [name] assignment? )* ";" ;
|
|
32
|
-
|
|
33
27
|
variablesDeclaration ::= [type] [name] assignment? ( "," [name] assignment? )* ";" ;
|
|
34
28
|
|
|
35
29
|
variableAssignment ::= [name] assignment ";" ;
|
|
36
30
|
|
|
37
31
|
objectAssignment ::= "{"
|
|
38
32
|
|
|
39
|
-
[name] ( "," [name] )*
|
|
33
|
+
[type]? [name] ( "," [type]? [name] )*
|
|
40
34
|
|
|
41
35
|
"}" "=" [name] ";" ;
|
|
42
36
|
|
|
@@ -44,11 +38,11 @@ arrayAssignment ::= "["
|
|
|
44
38
|
|
|
45
39
|
(
|
|
46
40
|
|
|
47
|
-
( "_" ( "," "_" )* ( "," [name] )+ )
|
|
41
|
+
( "_" ( "," "_" )* ( "," [type]? [name] )+ )
|
|
48
42
|
|
|
49
43
|
|
|
|
50
44
|
|
|
51
|
-
( [name] ( "," [name] )* )
|
|
45
|
+
( [type]? [name] ( "," [type]? [name] )* )
|
|
52
46
|
|
|
53
47
|
)
|
|
54
48
|
|
|
@@ -74,9 +68,7 @@ block ::= "{" ( variablesDeclaration |
|
|
|
74
68
|
|
|
75
69
|
conditionalBlock |
|
|
76
70
|
|
|
77
|
-
forEachLoop
|
|
78
|
-
|
|
79
|
-
break )* "}" ;
|
|
71
|
+
forEachLoop )* "}" ;
|
|
80
72
|
|
|
81
73
|
|
|
82
74
|
|
|
@@ -118,16 +110,12 @@ body ::= "{" ( variablesDeclaration |
|
|
|
118
110
|
|
|
119
111
|
conditionalBlock |
|
|
120
112
|
|
|
121
|
-
forEachLoop
|
|
122
|
-
|
|
123
|
-
break )* return? "}" ;
|
|
113
|
+
forEachLoop )* return? "}" ;
|
|
124
114
|
|
|
125
115
|
|
|
126
116
|
|
|
127
117
|
return ::= "Return" value ";" ;
|
|
128
118
|
|
|
129
|
-
break ::= "Break" ";" ;
|
|
130
|
-
|
|
131
119
|
|
|
132
120
|
|
|
133
121
|
value ::= [name] | [number] | [primitive] | [string-literal] ;
|
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": "^(?:!=|==|=|;|,|_|&&|\\|\\||@|!|\\*|\\||\\/|\\(|\\)|\\[|\\]|\\{|\\}|\\.\\.\\.)"
|