Как взаимодействовать с гибкой и бизоном, используя C ++ с вариантами?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как взаимодействовать с гибкой и бизоном, используя C ++ с вариантами?

Сообщение Anonymous »

Я попытался адаптировать (только/большинство голосовавших) ответ на этот вопрос Stackoverflow к настройке, где у меня нет STD :: string семантические значения, а скорее вариант s. Это означает, что я изменил следующее:
in fooparser.yy :

Код: Выделить всё

// %define api.value.type {std::string}
%define api.value.type variant

...

// %token HELLO
// %token WORLD
%token  HELLO
%token  WORLD
in foolexer.hh :

Код: Выделить всё

// int yylex(std::string *const yylval);
int yylex(yy::parser::value_type *const yylval);
Компилятор теперь сообщает мне, что 'yy' не был объявлен (аналогично, если я заменяю yy :: parser :: value_type by yystype ). Для контекста полный файл foolexer.hh :

Код: Выделить всё

#pragma once

#include 
#if ! defined(yyFlexLexerOnce)
#include 
#endif

class FooLexer : public yyFlexLexer
{
public:
int yylex(yy::parser::value_type *const yylval);
};

Поскольку yy :: parser :: value_type определяется в сгенерированном файле заголовка fooparser.tab.hh , я затем попытался #include "fooparser.tab.hh" , но затем компилятор дает мне дополнительное сообщение
fooParser.tab.hh:666:21: error: expected ‘)’ before ‘&’ token
666 | parser (FooLexer &lexer_yyarg);
| ~ ^~
| )
fooParser.tab.hh:1099:5: error: ‘FooLexer’ does not name a type
1099 | FooLexer &lexer;
| ^~~~~~~~

< /code>
Итак, как я могу это решить? Заранее большое спасибо :)

Подробнее здесь: https://stackoverflow.com/questions/796 ... h-variants
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»