Вот моя вершина Yacc file.yYacc- Struct как незавершенный или неизвестный тип
%code requires {
struct Id {
char *var;
};
struct Commds;
struct Commd {
struct Id lhs;
};
struct Commds {
struct Commd commd;
struct Commds *next;
};
}
Я использовал этот код в моем %union
для определенных новых типов для синтаксического анализа.
%union {
char *id;
long long integer;
struct Id Identifier;
struct Commd Command;
struct Commds *Commands;
}
....
%type <Command> command
%type <Commands> commands
У меня нет никаких проблем при его использовании с $$
-dollars атрибутов в то время как дерево разбора строит вверх, оценивая лексемы из моего лексере. К сожалению, я хотел бы использовать мои структуры, которые определены в начале файла другими способами в разделе %{ codes %}
. К сожалению всякий раз, когда я определяю функцию следующим образом:
void add(struct Commd cmd) {...};
Я получаю сообщение об ошибке: неизвестный тип! Я был бы благодарен за то, что рассказал мне, как сделать эти структуры видимыми для всего моего парсера.
В вашем блоке определений структуры, похоже, слишком много замыкающих элементов. Вы можете сначала изучить это. –
проверил, это не так. Я думаю, проблема связана с y.tab.h – Dago
Я не могу воспроизвести это. Можете ли вы просто вставить минимальный пример (если возможно, менее 20 строк), который показывает проблему? (Только блоки кода были бы идеальными.) – rici