Я пытался использовать webpack, чтобы связать мои файлы парсера / лексера / слушателя .js с antlr. Я не уверен, правильно ли я это делаю. Потому что после получения файла bundle.js я импортировал его с помощью importScripts, и браузер по-прежнему утверждает, что переменная не определена.
- Я сгенерировал файл парсера / лексера / слушателя, используя
antlr4 -Dlanguage=JavaScript LPMLN.g4
- Я написал файл main.js для ссылки на парсер / лексер / слушатель.
- Я настроил файл webpack.config.js для комплектации.
- Я импортировал файл bundle.js в js-файл приложения.
main.js:
var antlr4 = require('antlr4');
var LPMLNLexer = require('./LPMLNLexer').LPMLNLexer;
var LPMLNParser = require('./LPMLNParser').LPMLNParser;
var LPMLNListener = require('./LPMLNListener').LPMLNListener;
webpack.config.js:
module.exports = {
node: {
module: "empty",
net:"empty",
fs: "empty"
},
entry: './main',
output:{
path: __dirname + '/dist',
filename: 'bundle.js'
}
};
код приложения:
var validate = function(input) {
var lexer = new LPMLNLexer(chars);
var tokens = new CommonTokenStream(lexer);
var parser = new LPMLNParser(tokens);
var annotations = [];
var listener = new AnnotatingErrorListener(annotations)
parser.removeErrorListeners();
parser.addErrorListener(listener);
parser.parseMyRule();
return annotations;
};
Результат связки:
Entrypoint main = bundle.js
[0] ./antlr4/Utils.js 10.9 KiB {0} [built]
[1] ./antlr4/Token.js 4.54 KiB {0} [built]
[2] ./antlr4/IntervalSet.js 7.4 KiB {0} [built]
[6] ./antlr4/PredictionContext.js 21.9 KiB {0} [built]
[12] ./antlr4/index.js 1.13 KiB {0} [built]
[15] ./antlr4/Lexer.js 10.2 KiB {0} [built]
[18] ./antlr4/ParserRuleContext.js 6.55 KiB {0} [built]
[19] ./antlr4/InputStream.js 3.22 KiB {0} [built]
[27] ./antlr4/polyfills/codepointat.js 1.6 KiB {0} [built]
[28] ./antlr4/polyfills/fromcodepoint.js 1.87 KiB {0} [built]
[31] ./LPMLNListener.js 7.88 KiB {0} [built]
[32] ./main.js 214 bytes {0} [built]
[33] ./antlr4/atn/index.js 534 bytes {0} [built]
[50] ./LPMLNLexer.js 15.8 KiB {0} [built]
[51] ./LPMLNParser.js 115 KiB {0} [built]
+ 37 hidden modules
Вот структура связанного проекта:

Я не знаю, является ли это правильным способом связать анализатор с antlr и как мне продолжать использовать связанный файл.