Skip to content

Commit

Permalink
Added optional node (?nodename) and node renaming (newName:oldName)
Browse files Browse the repository at this point in the history
  • Loading branch information
iddogino committed Jul 14, 2017
1 parent 31b2343 commit 2ed9d67
Show file tree
Hide file tree
Showing 10 changed files with 760 additions and 267 deletions.
441 changes: 246 additions & 195 deletions .idea/workspace.xml

Large diffs are not rendered by default.

28 changes: 28 additions & 0 deletions src/Nodes/OptionalNode.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/**
* Created by iddo on 7/13/17.
*/
"use strict";

class OptionalNode {
constructor(innerNode) {
this.innerNode = innerNode;
}

getName() {
return this.innerNode.getName();
}

eval(context) {
return new Promise((resolve, reject) => {
this.innerNode.eval(context)
.then((val) => {
resolve(val);
})
.catch((err) => {
resolve(null);
});
});
}
}

module.exports = OptionalNode;
21 changes: 21 additions & 0 deletions src/Nodes/RenameNode.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/**
* Created by iddo on 7/13/17.
*/
"use strict";

class RenameNode {
constructor(name, innerNode) {
this.name = name;
this.innerNode = innerNode;
}

getName() {
return this.name;
}

eval(context) {
return this.innerNode.eval(context);
}
}

module.exports = RenameNode;
16 changes: 8 additions & 8 deletions src/Parser/grammer-raw.pegjs
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,18 @@ Complex = "{" firstNode:Node? nodes:("," Node)* "}" {
}

Node
= FunctionNode
= RenameNode
/ OptionalNode
/ FunctionNode
/ CompositeNode
/ LeafNode

LeafNode = Word

CompositeNode = label:Word values:Complex {
return {'label' : label, 'value': values};
RenameNode = name:Word ":" n:Node {
return {type: 'rename', value:n, name:name}
}

FunctionNode = label:Word args:ArgSet values:Complex {
return {'label': label, 'args': args, 'value': values};
OptionalNode = "?" n:Node {
return {type: 'optional', value:n}
}

ArgSet = "(" tuple:KVTuple? tuples:("," KVTuple)* ")" {
Expand Down Expand Up @@ -61,6 +61,6 @@ Word = chars:[-<*=>@_0-9"'a-zA-Z.]+ {
return chars.join("");
}

ValueWord = '"' chars:[-<*=>,{}@_0-9\/:a-zA-Z.]+ '"' {
ValueWord = '"' chars:[-<*=>,{}@_0-9\?/:a-zA-Z.]+ '"' {
return '"' + chars.join("") + '"';
}

0 comments on commit 2ed9d67

Please sign in to comment.