e6d018a88d
This is related to my last commit. I've updated all the JavaScript files to satisfy 'eslint-config-futagozaryuu', my eslint configuration. I'm sure I've probally missed something, but I've run all NPM scripts and Gulp tasks, fixed any bugs that cropped up, and updated some stuff (mainly related to generated messages), so as far as I can, tell this conversion is over (I know I've probally jixed it just by saying this ;P).
103 lines
1.9 KiB
JavaScript
103 lines
1.9 KiB
JavaScript
"use strict";
|
|
|
|
const visitor = require( "./visitor" );
|
|
|
|
// AST utilities.
|
|
const asts = {
|
|
findRule( ast, name ) {
|
|
|
|
for ( let i = 0; i < ast.rules.length; i++ ) {
|
|
|
|
if ( ast.rules[ i ].name === name ) return ast.rules[ i ];
|
|
|
|
}
|
|
|
|
return void 0;
|
|
|
|
},
|
|
|
|
indexOfRule( ast, name ) {
|
|
|
|
for ( let i = 0; i < ast.rules.length; i++ ) {
|
|
|
|
if ( ast.rules[ i ].name === name ) return i;
|
|
|
|
}
|
|
|
|
return -1;
|
|
|
|
},
|
|
|
|
alwaysConsumesOnSuccess( ast, node ) {
|
|
|
|
let consumes;
|
|
|
|
function consumesTrue() {
|
|
|
|
return true;
|
|
|
|
}
|
|
function consumesFalse() {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
function consumesExpression( node ) {
|
|
|
|
return consumes( node.expression );
|
|
|
|
}
|
|
|
|
consumes = visitor.build( {
|
|
rule: consumesExpression,
|
|
named: consumesExpression,
|
|
|
|
choice( node ) {
|
|
|
|
return node.alternatives.every( consumes );
|
|
|
|
},
|
|
|
|
action: consumesExpression,
|
|
|
|
sequence( node ) {
|
|
|
|
return node.elements.some( 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( node ) {
|
|
|
|
return consumes( asts.findRule( ast, node.name ) );
|
|
|
|
},
|
|
|
|
literal( node ) {
|
|
|
|
return node.value !== "";
|
|
|
|
},
|
|
|
|
class: consumesTrue,
|
|
any: consumesTrue
|
|
} );
|
|
|
|
return consumes( node );
|
|
|
|
}
|
|
};
|
|
|
|
module.exports = asts;
|