@parser-generator/grammar-interpreter
Version:
A Parser Generator that supports LL,SLR,LR1,LALR
100 lines • 2.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const definition_1 = require("@parser-generator/definition");
function lrTableToDimArr(parsingTable) {
let table = new Array();
let cols = new Set();
for (let P of parsingTable.table.values())
for (let symbol of P.keys())
cols.add(symbol);
let headers = Array.from(cols.keys()).map(i => i + "");
headers.unshift("");
table.push(headers);
for (let [k, v] of parsingTable.table) {
let row = [];
row.push(k + "");
for (let c of cols) {
if (v.has(c)) {
row.push(v.get(c) + "");
}
else {
row.push("");
}
}
table.push(row);
}
return table;
}
exports.lrTableToDimArr = lrTableToDimArr;
function lrAutomataToGraph(stateSet) {
//state set graph
let nodes = [];
let edges = [];
let count = 0;
let size = Math.round(Math.sqrt(stateSet.length));
for (let state of stateSet) {
nodes.push({
id: state.id,
label: `${state.toString()}`,
x: count % size * 400,
y: Math.floor(count / size) * 400
});
for (let [label, to] of state.mapping) {
edges.push({
from: state.id,
to: to.id,
label: definition_1.isNonTerminal(label) ? label.name : (typeof label === "string" ? `"${label.replace(/"/g, "\\\"")}"` : label)
});
}
count++;
}
return { nodes, edges };
}
exports.lrAutomataToGraph = lrAutomataToGraph;
function followTableToDimArr(followTable) {
let table = new Array();
let tokens = new Set();
for (let P of followTable.values())
for (let token of P.keys())
tokens.add(token);
let headers = Array.from(tokens).map(i => i + "");
headers.unshift("");
table.push(headers);
for (let [k, v] of followTable) {
let row = [];
row.push(k + "");
for (let token of tokens) {
if (v.has(token))
row.push(`y`);
else
row.push("");
}
table.push(row);
}
return table;
}
exports.followTableToDimArr = followTableToDimArr;
function firstTableToDimArr(firstTable) {
let table = new Array();
let tokens = new Set();
for (let P of firstTable.values())
for (let token of P.keys())
tokens.add(token);
let headers = Array.from(tokens).map(i => i + "");
headers.unshift("");
table.push(headers);
for (let [k, v] of firstTable) {
let row = [];
row.push(k + "");
for (let token of tokens) {
if (v.has(token))
row.push(v.get(token).id + "");
else
row.push("");
}
table.push(row);
}
return table;
}
exports.firstTableToDimArr = firstTableToDimArr;
//# sourceMappingURL=adapter.js.map