Lex и Yacc без динамического выделения памяти - PullRequest
5 голосов
/ 10 января 2011

Я нахожусь в процессе разработки программного обеспечения для работы во встроенной среде, где использование динамической памяти запрещено.Lex и Yacc хорошо подходят для применения.

Можно ли настроить Lex и Yacc так, чтобы они вообще не использовали динамическое выделение памяти?

Можно ли настроить Lex и Yacc на использование предопределенного блока памяти и, следовательно, ограничить использование динамической памяти этим предопределенным пространством?

Можно ли ограничить использование динамической памяти только для инициализации программы (т. Е. При первом запуске программы)?

edit: В ответ на TonyK я хочу, чтобы анализатор не использовал динамическую память.

Спасибо

Ответы [ 3 ]

2 голосов
/ 10 января 2011

Конечно, вы можете, если вы можете скомпилировать Лекса и Яка самостоятельно. Вы просто должны реализовать свой собственный malloc и бесплатный, и ссылку на них. (Предполагая, что Lex и Yacc - чистый C, что, я думаю, так.)

Редактировать Не понял ли я еще один вопрос? Вы хотите, чтобы Lex и Yacc сами использовали ограниченный объем памяти, или вы хотите, чтобы они генерировали парсеры, которые используют ограниченный объем памяти?

0 голосов
/ 28 мая 2019

Вы можете использовать noyyalloc, noyyfree и noyyrealloc, а затем реализовать их самостоятельно.

0 голосов
/ 10 января 2011

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

...