Можно ли создать простой синтаксический анализатор и создать файл javascript, а затем вызвать этот файл с помощью этого синтаксического анализатора?

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

  1. Добавьте привязки с помощью

  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))));


  • #P7#
  • #P8#

person Community    schedule 05.10.2019    source источник
comment
У вас есть случайный замыкающий + при инициализации contentFile.   -  person Pointy    schedule 06.10.2019
comment
var contentFile = parser.parse(contentFile, nameFile); это выглядит неправильно - поскольку вы определяете contentFile здесь, передача его в качестве аргумента функции, которая его определяет, неверна   -  person Bravo    schedule 06.10.2019
comment
var file = (function() { кажется началом IIFE, однако функция неполная и ничего не возвращает, поэтому file не определен. Мне непонятно, что делает runFile(file). runFile принимает два аргумента, но вызывается только с одним.   -  person RobG    schedule 06.10.2019


Ответы (1)


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

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

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

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

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

Функция runFile не имеет оператора return, поэтому возвращает undefined. Назначение результата finishFile кажется бессмысленным.

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

person RobG    schedule 06.10.2019