私はa text editorで、LPEGを使って構文強調表示を実装しています。物事を稼働させることはかなりシンプルでしたが、私は最低限必要な作業しか行っていませんでした。lpegを使って単語境界だけをキャプチャする
私はこのようなパターンの束を定義しました:
-- Keywords
local keyword = C(
P"auto" +
P"break" +
P"case" +
P"char" +
P"int"
-- more ..
)/function() add_syntax(RED, ...)
これが正しく入力を処理しますが、残念ながらあまり一致しました。たとえば、int
はprintf
の中で一致します。これはリテラルの一致に "P
"を使用しているためです。明らかに
私が使用してみましたこれは唯一の「<[{ \n
」を後に発生に試合を制限するが、これは私がやりたいしませんでした。
-- space, newline, comma, brackets followed by the keyword
S(" \n(<{,")^1 * P"auto" +
私は唯一のキーワード/トークンを一致させるためにここに欠けている、単純な、明白な、解決策があることCコードで期待される空白やその他の文字で囲まれていますか?私はキャプチャされたトークンが必要なので、私はそれを強調することができますが、そうでなければ私は特定のアプローチに結婚していません。
これらは一致する必要があります:
int foo;
void(int argc,std::list<int,int>) { .. };
しかし、これはいけないを:
fprintf(stderr, "blah. patterns are hard\n");
私は欲しいと思っていましたが、答えを欲しがっていましたが、私の期待をはるかに上回りました。受け入れられました。どうもありがとうございます。 –
バウンスマジックが適用されました。 –