Использование связанных списков с Bison - PullRequest
0 голосов
/ 24 декабря 2010

Предположим, мой YYSTYPE является структурой с указателем на следующую структуру. Могу ли я направить этот указатель на значения YYSTYPE других грамматических переменных, или их значения YYSTYPE являются локальными и исчезнут после завершения деривации, что впоследствии вызовет ошибку segfault.

1 Ответ

1 голос
/ 24 декабря 2010

YYSTYPE - тип переменных в стеке выражений Yacc.

Если указатели, которые вы создаете, относятся к элементам, фактически хранящимся в стеке Yacc, что обычно делается с помощью ссылки $1 (или &$1 для получения указателя), тогда вы действительно указываете на данные, которые будут освобождены многократно использованы, и их ждет целый мир зла (например, ошибки сегментации, если вам повезет; путаница и неправильное обращение с информацией, если вам не повезло).

Если указатели, которые вы создаете, относятся к элементам типа YYSTYPE, которыми вы управляете, то, конечно, проблем нет; Вы управляете их продолжительностью, а не Yacc.

Скопируйте все, что вам нужно из таких вещей, как $1, в свое собственное хранилище.

...