This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.6 KiB
65 lines
1.6 KiB
"use strict"; |
|
|
|
var arrays = require("../utils/arrays"), |
|
visitor = require("./visitor"); |
|
|
|
/* AST utilities. */ |
|
var asts = { |
|
findRule: function(ast, name) { |
|
return arrays.find(ast.rules, function(r) { return r.name === name; }); |
|
}, |
|
|
|
indexOfRule: function(ast, name) { |
|
return arrays.indexOf(ast.rules, function(r) { return r.name === name; }); |
|
}, |
|
|
|
alwaysConsumesOnSuccess: function(ast, node) { |
|
function consumesTrue() { return true; } |
|
function consumesFalse() { return false; } |
|
|
|
function consumesExpression(node) { |
|
return consumes(node.expression); |
|
} |
|
|
|
var consumes = visitor.build({ |
|
rule: consumesExpression, |
|
named: consumesExpression, |
|
|
|
choice: function(node) { |
|
return arrays.every(node.alternatives, consumes); |
|
}, |
|
|
|
action: consumesExpression, |
|
|
|
sequence: function(node) { |
|
return arrays.some(node.elements, consumes); |
|
}, |
|
|
|
labeled: consumesExpression, |
|
text: consumesExpression, |
|
simple_and: consumesFalse, |
|
simple_not: consumesFalse, |
|
optional: consumesFalse, |
|
zero_or_more: consumesFalse, |
|
one_or_more: consumesExpression, |
|
group: consumesExpression, |
|
semantic_and: consumesFalse, |
|
semantic_not: consumesFalse, |
|
|
|
rule_ref: function(node) { |
|
return consumes(asts.findRule(ast, node.name)); |
|
}, |
|
|
|
literal: function(node) { |
|
return node.value !== ""; |
|
}, |
|
|
|
"class": consumesTrue, |
|
any: consumesTrue |
|
}); |
|
|
|
return consumes(node); |
|
} |
|
}; |
|
|
|
module.exports = asts;
|
|
|