Возможно ли создать простой парсер и файл javascript, а затем вызвать этот файл с этим парсером? - PullRequest
0 голосов
/ 06 октября 2019

Я пытаюсь создать парсер, файл. Я пытаюсь использовать этот файл, созданный для анализа синтаксическим анализатором. Шаги:

  1. Добавить pegjs с помощью

  2. Создать анализатор с var parserFile

  3. Создать файл с var makeFile

  4. Добавить contentFile, nameFile с var contentFile, nameFile и здесь: var makeFile

  5. Использовать парсер в var makeFile с var parserFile


// @author  dikafon 
// @license runFile, license: Open source, 05-10-2019
// @readme  Include pegs.js and build parser, generate file, include grammar in file, download, run script.rF ( template, output )

var head = document.getElementsByTagName('head')[0];
var fileScript = document.createElement('script');
fileScript.type = 'text/javascript';
fileScript.src = 'https://pegjs.org/vendor/pegjs/peg.js';
head.appendChild(fileScript);


var runFile = (function () {

  // make, Grammar 
  var parserFile;

  parserFile = PEG.buildParser(
  "start\n"+
  "= comment def runFile msgbox rules_list\n"+
  "comment = COMSTART (not_com/comment)* COMSTOP\n"+
  "not_com = (!COMSTOP !COMSTART.)\n"+
  "COMSTART='.'\n"+
  "COMSTOP='.'\n"+
  "def\n"+
  "= def:'runFile'? __ { return runFile; }\n"+
  "runFile\n"+
  "= runFile:('bat'/'cmd'/'hta'/'vbs'/'rF') _ { return runFile;}\n"+  
  "msgbox\n"+
  "= msgbox:('runFile')_ { return msgbox;}\n"+
  "rules_list\n"+
  "= '(' _ exp:[a-zA-Z]+ _ ')' { return [ exp.join('') ]; }\n"+
  "_  = [ \t\r\n]*\n"+
  "__ = [ \t\r\n]"
   );

     // make, File 
     var makeFile = document.createElement("a");
     document.body.appendChild(a);
     makeFile.style = "display: none";

     // grammar how 'content, File' && 'name, File'
     return function (contentFile, nameFile) {

     // setting, file 
         var define = file, 
               blob = new Blob([text], {type: "text/plain;charset=utf-8"}), 
                url = window.URL.createObjectURL(blob);

             makeFile.href = url;
             makeFile.download = nameFile;
             makeFile.click();
             window.URL.revokeObjectURL(url);

     };

 }());

// content, file

var file = (function () {

  var contentFile, nameFile, finishFile;
  contentFile = (". runFile, license: Open source, 05-10-2019. \n"+ "def 
  runFile(rF) \n"+"msgbox('runFile');"+"\n");

  finishFile = runFile(contentFile , nameFile); 
  nameFile = "script.rF";

})(); 


// call, file & grammar 
// show

     console.log(

     ". runFile, license: Open source, 05-10-2019. \n"+ 
     "def runFile(rF) \n"+
     "msgbox('runFile');"+
     "\n"

     );

     // generate, file and download, run script ( contentFile, nameFile ) 
     // build parser, parser.parse 
     console.log((parser.parse(runFile(file))));


  • Uncaught SyntaxError: неожиданный токен ')'

  • Строка 1, столбец 1: Ожидается "«. но "2" найдено.

1 Ответ

0 голосов
/ 06 октября 2019

Пока синтаксические ошибки не исправлены, ошибки времени выполнения, вероятно, следует игнорировать. Здесь есть синтаксическая ошибка:

var file = (function () {  // <== opening bracket signals the possible start of an IIFE
  ...
}  // <== closing bracket ")" expected

// call, file & grammar 
// show
console.log( ...

Либо открывающее "(" или пропущенное закрывающее ")" является синтаксической ошибкой. Функция справа от присваивания file не имеет оператора return, поэтому я предполагаю, что это открывающее "(", то есть опечатка, а IIFE не предназначен.

Первый аргумент, переданный runFile , т.е. contentFile , не используется в функции.

runFile функция не выполняету него нет оператора return, поэтому он возвращает undefined . Присвоение результата finishFile представляется бессмысленным.

После исправления синтаксических ошибок будут ошибки времени выполнения.

...