Допустим, у меня есть часть моей .y грамматики, как это:Yacc (зубр) аст упрощение
stmt : expr { $$ = $1; }
| stmt expr { $$ = insert_stmt_list($1, $2); }
, где я могу иметь утверждение, что дает выражение, или я могу иметь несколько выражений, которые приводят к список инструкций. О последнем я храню его через функцию insert_stmt ..., но сначала я отправляю его в верхнюю часть стека.
Вопрос: как я могу справиться с $$ = $ 1? Я имею в виду, что insert_stmt_list помещает все в структуру, и я знаю, что он есть, и я могу распечатать их значения и так далее, но где, черт возьми, идет $$ = S1? Как это прочитать? :-)
Спасибо!
Большой вопрос был на самом деле, если я ожидал заявления, как справиться с выражением? Я смог справиться с этим с помощью общей структуры, где у меня есть флаг {is_STATEMENT, is_EXPRESSION, ...} и указатель на соответствующую структуру. Все это, потому что C не позволяет узнать тип указателя. – Nitrate
Вы можете посмотреть абстрактный синтаксис Lisp. Основной синтаксической единицей оценки является выражение. Если вы хотите, чтобы несколько выражений были оценены для их побочного эффекта, когда ожидалось одно выражение, у вас есть оператор для этого типа 'progn':' (progn expr1 expr2 ... exprn) '. Это не лишний узел. – Kaz