По соображениям производительности я портирую библиотеку C # на C ++.Во время нормальной работы этой библиотеке, помимо прочего, необходимо проанализировать около 150 000 математических выражений (например, формул Excel) со средней длиной менее 150 символов.
В версии C # я использовал анализатор GOLDгенерировать код разбора.Он может анализировать все 150 000 выражений менее чем за одну секунду.
Поскольку мы думали о расширении нашего языка, я подумал, что переход на C ++ может быть хорошим шансом перейти на ANTLR.Я перенес (простую) грамматику в ANTLR и сгенерировал код C из нее.Разбор 150 000 выражений занимает более 12 секунд, потому что для каждого выражения мне нужно создать новый ANTL3_INPUT_STREAM, поток токенов, лексер и анализатор - по крайней мере в версии 3.4 нет способа их повторного использования.
Я был бы благодарен, если бы кто-то мог дать мне рекомендацию, что использовать вместо этого - GOLD, конечно, вариант, хотя генерация кода C ++ или C кажется намного более сложной, чем разновидность C #.Моя грамматика совместима с LALR и LL (1).Первостепенной задачей является анализ производительности на небольших входах.