Ваш лексер возвращает указатель на недопустимую память 1 , содержащую строку, поэтому, вероятно, все, что вам нужно сделать, это скопировать указатель:
s = $1;
больше, чем трудно сказать, поскольку вы не предоставляете достаточно контекста, чтобы увидеть, что вы на самом деле пытаетесь сделать.
Ошибка сегментации происходит из-за того, что вы пытаетесь скопировать строку из памяти, выделенной strdup, в память, на которую указываетs
, но вы никогда не инициализируете s
, чтобы указывать на что-либо.
1 Функция strdup
вызывает malloc для выделения точно достаточного объема памяти для строкивы дублируете