私はParseKitのC文法を書きましたが、これは完全に機能しますが、私を夢中にさせるのはプリプロセッサステートメントです。プリプロセッサステートメントの正しいシンボル定義は何ですか?
これが私が試したことの短い例です...
@reportsCommentTokens = YES;
@commentState = '/';
@singleLineComments = '//';
@multiLineComments = '/*' '*/';
@commentState.fallbackState = delimitState;
@delimitState.fallbackState = symbolState;
@start = Empty | comments | preprocessor;
comments = comment*;
comment = Comment;
@symbols = '#include';
preprocessor = preprocessorIncludes;
preprocessorIncludes = preprocessorIncludeStatement*;
preprocessorIncludeStatement = preprocessorInclude quotedFileName*;
preprocessorInclude = '#include';
quotedFileName = QuotedString;
...しかしそれは機能しません。コメントをキャッチし、引用符付きのステートメントを含めるための簡略化された文法例として取り上げます(<>ではありません)。私はこの単純なファイルでこの文法を試しました...
/*
* Cryptographic API.
*
* RIPEMD-256 - RACE Integrity Primitives Evaluation Message Digest.
*
* Based on the reference implementation by Antoon Bosselaers, ESAT-COSIC
*
* Copyright (c) 2008 Adrian-Ken Rueegsegger <ken@codelabs.ch>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*
*/
// Here's one line comment
/* One line multiline comment */
#include "ripemd.h"
/* 2nd one line multiline comment */
...そしてそれは/*1行の複数行コメント*/で終わり、コメントトークンとして報告し、その後サイレントに失敗します。
そこで、「#include」記号を...に分離しようとしました。
@symbolState = '#' '#';
@symbol = '#';
numSymbol = '#';
preprocessorInclude = numSymbol 'include';
...しかし、それでも役に立ちません。
Toddが役立つかもしれませんが、「#include」のような「シンボル」を処理する正しい方法は何ですか?