const path = require ('path') - неожиданный идентификатор - PullRequest
0 голосов
/ 31 октября 2018

Я следовал этому учебнику , который описывает, как создать компилятор JavaScript для грамматики ANTLR4 (ECMAScript.g4). В качестве примера, он также описывает, как преобразовать что-то из JavaScript в Python. Это ссылка на репо моего проекта.

Однако, когда я запускаю программу через командную строку, я получаю следующую ошибку:

D:\js-runtime>npm start

> js-runtime@1.0.0 start D:\js-runtime
> node index.js

D:\js-runtime\codegeneration\PythonGenerator.js:123
const path = require('path');
      ^^^^

SyntaxError: Unexpected identifier
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:616:28)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (D:\js-runtime\index.js:4:25)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! js-runtime@1.0.0 start: `node index.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the js-runtime@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\shjslk\AppData\Roaming\npm-cache\_logs\2018-10-31T08_28_59_802Z-debug.log

Вот соответствующие части PythonGenerator.js:

const ECMAScriptVisitor = require('../lib/ECMAScriptVisitor').ECMAScriptVisitor;

/**
 * This Visitor walks the tree generated by parsers and produces Python code
 *
 * @returns {object}
 */
class Visitor extends ECMAScriptVisitor {

  // lots of method definitions here

  const path = require('path');
  const {
    SemanticArgumentCountMismatchError
  } = require(path.resolve('error', 'helper'));

  // more methods
}
module.exports = Visitor;

Очевидно, что ошибка должна быть связана с модулем Node 'path'. Но я не вижу, что с этим не так. Что может быть причиной этого?

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Нельзя помещать определения констант или переменных внутри тела определения класса в JavaScript. Вы должны определить path и SemanticArgumentCountMismatchError вне определения класса Visitor.

0 голосов
/ 31 октября 2018

Я решил эту проблему, комментируя заявления и используя модуль пути узла в файле PythonGenerator.js.

Однако я не знаю, почему это произошло. Если кто-либо знает действительную причину, пожалуйста, добавьте его в качестве ответа, и я приму его в качестве ответа на этот вопрос

...