0

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 ';'.
4

2 に答える 2

3

ドキュメントから:

実際のC++パーサーとは異なり、Lzzはタイプとテンプレート名のデータベースを維持しません。Lzzは、コンテキスト情報のみを使用して解析します。ただし、C ++の文法があいまいであるため、この戦略はいくつかのコンテキストでは不十分です。幸い、Lzzはそれらのほとんどをスキップできます。

このツールは、入力としてC++を受け入れません。漠然とC++に似たカットダウン言語を受け入れ、出力としてC++を生成します。それを使いたいのなら、あなたはそれ自身の言語を学ぶ必要があります、そしてそれがあなたが書きたいコードに十分であることを望みます。個人的には、標準C ++に固執することをお勧めします。その言語は十分に文書化されており、広く理解されているからです。

于 2011-10-26T12:05:50.667 に答える
2

これはCから引き継がれたコードでよく見られます。代わりに実行するだけではいけませんか

enum foo { a }

Lzzのドキュメントには、クラス定義の後の宣言子はサポートされていないと記載されており(サポートされている構造のクラス定義を参照)、いくつかの例が示されています。同じことが列挙型にも当てはまりますが、これは明示的には述べていません。

注Lzzでは、末尾にセミコロンを付けずにクラス(または列挙型)を定義できます。

于 2011-10-28T04:24:11.317 に答える