@lcap/nasl-parser
Version:
Take Nasl text to Nasl AST with the help of generalized parsing.
82 lines (71 loc) • 2.28 kB
text/typescript
import { Parser, Grammar } from "nearley";
import grammar from "./nasl";
import { inspect } from 'util';
import { writeFile } from 'fs';
import { toNaslAST } from "./toAST/to-nasl-ast";
const testCode =`
logic enumRef() {
let variable2: List<Integer>;
let variable3: nasl::collections::List<Integer>;
end
}
`
const parser = new Parser(Grammar.fromCompiled(grammar));
// Parse something!
parser.feed(testCode);
const ast0 = toNaslAST(parser.results?.[0]?.nasl);
const cst0 = parser.results?.[0]?.cst;
const ast1 = toNaslAST(parser.results?.[1]?.nasl);
const cst1 = parser.results?.[1]?.cst;
const ast2 = toNaslAST(parser.results?.[2]?.nasl);
const cst2 = parser.results?.[2]?.cst;
// console.log(inspect(parser.results[0], {showHidden: false, depth: null, colors: true}));
console.log(inspect(parser.results));
console.log(inspect(parser.results.length));
// write to files
writeFile('./testParseNasl0.json', JSON.stringify(ast0, null, 2), (err) => {
if (err) {
console.error(err);
return;
}
console.log('File ./testParseNasl0.json has been created');
})
writeFile('./testParseCst0.json', JSON.stringify(cst0, null, 2), (err) => {
if (err) {
console.error(err);
return;
}
console.log('File ./testParseCst0.json has been created');
})
if (ast1) {
writeFile('./testParseNasl1.json', JSON.stringify(ast1, null, 2), (err) => {
if (err) {
console.error(err);
return;
}
console.log('File ./testParseNasl1.json has been created');
})
writeFile('./testParseCst1.json', JSON.stringify(cst1, null, 2), (err) => {
if (err) {
console.error(err);
return;
}
console.log('File ./testParseCst1.json has been created');
})
}
if (ast2) {
writeFile('./testParseNasl2.json', JSON.stringify(ast2, null, 2), (err) => {
if (err) {
console.error(err);
return;
}
console.log('File ./testParseNasl2.json has been created');
})
writeFile('./testParseCst2.json', JSON.stringify(cst2, null, 2), (err) => {
if (err) {
console.error(err);
return;
}
console.log('File ./testParseCst2.json has been created');
})
}