UNPKG

@lcap/nasl-parser

Version:

Take Nasl text to Nasl AST with the help of generalized parsing.

82 lines (71 loc) 2.28 kB
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'); }) }