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 ';'.
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 ';'.
ドキュメントから:
実際のC++パーサーとは異なり、Lzzはタイプとテンプレート名のデータベースを維持しません。Lzzは、コンテキスト情報のみを使用して解析します。ただし、C ++の文法があいまいであるため、この戦略はいくつかのコンテキストでは不十分です。幸い、Lzzはそれらのほとんどをスキップできます。
このツールは、入力としてC++を受け入れません。漠然とC++に似たカットダウン言語を受け入れ、出力としてC++を生成します。それを使いたいのなら、あなたはそれ自身の言語を学ぶ必要があります、そしてそれがあなたが書きたいコードに十分であることを望みます。個人的には、標準C ++に固執することをお勧めします。その言語は十分に文書化されており、広く理解されているからです。
これはCから引き継がれたコードでよく見られます。代わりに実行するだけではいけませんか
enum foo { a }
Lzzのドキュメントには、クラス定義の後の宣言子はサポートされていないと記載されており(サポートされている構造のクラス定義を参照)、いくつかの例が示されています。同じことが列挙型にも当てはまりますが、これは明示的には述べていません。
注Lzzでは、末尾にセミコロンを付けずにクラス(または列挙型)を定義できます。