PLY を使用して C パーサーを作成していますが、最近問題が発生しました。このコード:
typedef int my_type;
my_type x;
my_type は、以前は型として使用されていた型として定義されているため、正しい C コードです。型と単純な識別子を区別するためにレクサーが使用するパーサーの型シンボル テーブルに入力することで、これを処理します。
ただし、型宣言規則は SEMI (';' トークン) で終了しますが、PLYmy_type
は最初の行で終了したと判断する前に、2 行目からトークンをシフトします。このため、型シンボル テーブルの更新をレクサーに渡す機会がなく、レクサーは my_type を型ではなく識別子として認識します。
修正のアイデアはありますか?
完全なコードは次の場所にあります: http://code.google.com/p/pycparser/source/browse/trunk/src/c_parser.py これより小さな例を作成する方法がわかりません。
編集:
問題が解決しました。以下の私の解決策を参照してください。