Я работаю над комбинацией лексера/парсера с Bison и Flex, и я немного обеспокоен утечками памяти.Когда освободить память?
грамматика довольно проста, и (до сих пор), я смог уйти со следующим определением:
#define YYSTYPE char const *
В Flex, когда я прочитал строки, я выделить достаточно памяти для эту строку, а затем скопируйте ее в yylval
. Насколько я знаю, это вполне стандартная практика.
Однако я не могу найти какие-либо документы в любом месте, которые скажут мне, когда я должен освободить память в yylval.
Использует ли Bison это автоматически для меня? Должен ли я сделать это в конце моего действия? Или когда еще я должен это делать?
Не забывайте, что: 'non_terminal: nt1 {frag1} nt2 {frag2};' хранит $ 2 как результат frag1, доступного для frag2. –
Я фактически не разбираю много (если есть) целых чисел - это все цитируемые строки. –
Да, но внутренне синтаксический анализатор хранит каждый токен и нетерминальный символ как целое число в стеке разбора. Lexer ('yylex') возвращает целочисленный токен код, даже если есть дополнительная информация для каждого токена (т. Е. Токена). –