Ваша проблема связана с отсутствующим или некорректным кодом в лексическом анализаторе.
Сначала проверьте лексический анализатор.
Если он не вернет токен, то парсер не сможет правильно обработать значения.
Напишите базовый тест, который напечатает значение токена.
Не обращайте внимания на стиль «с», прежде всего это принцип:
main() {
int token;
while( token = yylex() ) {
switch( token) {
case NAME:
printf("name '%s'\n", yylval.b.v.val );
break;
...
}
}
}
Если вы запустили какой-то ввод, и это не сработало.
если лексический анализатор не устанавливает yylval при возврате NAME, нормально, что val пуст.
Если у вас в флексе есть такой шаблон:
[a-z]+ { return NAME; }
Это неправильно, вы должны установить значение, как это
[a-z]+ {
yylval.val = strdup(yytext);
yylval.length = yylen;
return NAME; }