Синтаксическая ошибка LZZ для typedef enum _foo {a} foo; - PullRequest
0 голосов
/ 26 октября 2011

Почему LZZ говорит мне, что в строке typedef enum _foo { a } foo; есть синтаксическая ошибка?

Test.lzz:1:19: Syntax error before '{'.
Test.lzz:1:1: Discarding 'typedef'.
Test.lzz:1:28: Syntax error before ';'.
Test.lzz:1:28: Inserting '<identifier>' before ';'.

Ответы [ 2 ]

3 голосов
/ 26 октября 2011

Из документации :

В отличие от реального синтаксического анализатора C ++, Lzz не поддерживает базу данных типов и имен шаблонов.Lzz анализирует, используя только контекстную информацию.Однако, поскольку грамматика C ++ неоднозначна, эта стратегия неадекватна в нескольких контекстах;К счастью, Lzz может пропустить большинство из них.

Этот инструмент не принимает C ++ в качестве входных данных;он принимает урезанный язык, который выглядит неопределенно как C ++, производя C ++ в качестве вывода.Если вы хотите использовать его, вам придется выучить его собственный язык и надеяться, что он подходит для кода, который вы хотите написать.Лично я бы посоветовал вам придерживаться стандарта C ++, поскольку этот язык хорошо документирован и широко понят.

2 голосов
/ 28 октября 2011

Вы часто видите это в коде, перенесенном из C. Не могли бы вы просто сделать это вместо

enum foo { a }

В документации Lzz сказано, что деклараторы после определений классов не поддерживаются (см. Определения классов в разделе поддерживаемых конструкций), и приведено несколько примеров. То же относится и к перечислениям, хотя и не говорит об этом явно.

Примечание. Lzz разрешит определение класса (или перечисления) без завершающей точки с запятой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...