JavaScript — мой синтаксический анализатор C ++ на основе ANTLR4 умирает из-за ошибки нехватки памяти при попытке разобрать расширенный заголовок

Привет эксперты ANTLR, мне нужна ваша помощь!

Я давно использую ANTLR и написал несколько парсеров, использующих ANTLR4. Я использую сейчас версию 4.5.3.

Хорошо, я пишу синтаксический анализатор c ++ с целью Javascript. До этого времени все было довольно гладко. Затем я попытался проанализировать iostream.h (на самом деле с небольшим основным и использовал Xcode llvm для предварительной обработки). Это более 30000 строк кода размером 1,2 МБ. Есть ошибки, но они могут быть исправлены. Проблема в том, что я вывожу это из памяти.

375416 мс: развертка отметки 1349,2 (1422,3) -> 1349,0 (1432,3) МБ, 719,3 / 0 мс [ошибка выделения] [запрошено GC в старом пространстве].
376141 мс: развертка по метке 1349,0 (1432,3) -> 1349,0 (1433,3) МБ, 725,6 / 0 мс [ошибка выделения] [запрошено GC в старом пространстве].
376900 мс: развертка по метке 1349,0 (1433,3) -> 1349,0 (1433,3) МБ, 758,7 / 0 мс [последнее средство gc].
377632 мс: развертка по метке 1349,0 (1433,3) -> 1349,0 (1433,3) МБ, 731,9 / 0 мс [в крайнем случае, gc]. ==== Трассировка стека JS =============== ==========================

Контекст безопасности: 0x973d6c9e59
1: Join (он же Join) [native array.js: 179] [pc = 0x109304f3a6b5] (this = 0x973d604189, w = 0x109e7ca91511, x = 108, N = 0x1a20734ed919, M = 0x973d6b4a11)
2: InnerArrayJoin (он же InnerArrayJoin) [native array.js: ~ 343] [pc = 0x109304f1afac] (это = 0x973d604189, N = 0x1a20734ed919, w = 0 ...

ФАТАЛЬНАЯ ОШИБКА: CALL_AND_RETRY_LAST Распределение не удалось - куча JavaScript не хватает памяти
Ловушка отмены: 6

Мой главный сейчас такой

пытаться {
text = fs.readFileSync (filepath, 'utf8');

var chars = new antlr4.InputStream (text);
var lexer = новый CPP14Lexer.CPP14Lexer (символы);
var tokens = new antlr4.CommonTokenStream (лексер);
var parser = новый CPP14Parser.CPP14Parser (токены);
вар принтер;

пытаться {
// Режим SLL
parser.buildParseTrees = true;
parser.setTrace (this.trace);
var cache = new PredictionContextCache ();
var sim = новый ParserATNSimulator (синтаксический анализатор, parser._interp.atn, parser._interp.decisionToDFA, кэш);
sim.parser._interp.predictionMode = PredictionMode.SLL;

var tree = sim.parser.translationunit ();
printer = new listener.CPPXXPrinter (токены, лексеры, парсер, this.debug);

antlr4.tree.ParseTreeWalker.DEFAULT.walk (принтер, дерево);
}
ловить ...

Он пытается построить синтаксическое дерево для всего ввода. У меня вопрос, есть ли способы сделать что-то в режиме экономии памяти, например, вообще не создавать дерево и просто анализировать ввод?

Спасибо
-Yoshi

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]