アプリ版:「スタンプのみでお礼する」機能のリリースについて

lexソースの中に次のようなコードが出てるんですが、左側の正規表現の意味がわからなくて困っています。文字列の解釈のコードだと思います。
\はバックスラッシュだと思ってください。

\"[^"]*\" { yytext[yyleng - 1] = '\0';
yylval.str = strdup(&yytext[ 1]);
return(STRING);
}

(yaccのソースの中に&token <str> STRINGという記述が入っている)

文字列はダブルクォーテーション「"」で囲み、間に改行が入っても構わないそうです。

yytextは次の入力を処理するときに破壊されるので、ヒープ上に確保した領域に文字列を格納し、そのアドレスをyylval.strに渡す。初めと終わりの「"」は取り除く・・
のだそうです。おそらくstrdupの説明だと思うのですが、C言語のマニュアルには載ってなかったですね・・・。

A 回答 (3件)

\"    "の特別な意味を除いた、文字としての"


[^"]*   "以外の文字の0回以上の繰り返し
ですので、

"を含まない0文字以上の文字列を"で囲んだもの
という意味になります。

この回答への補足

含まないっていうのは、^で表現されているわけですか?

補足日時:2004/12/02 14:17
    • good
    • 0

> すでに読んではいるのですが、それによると^は行頭だった気がします。



読みが足りない。 []内のアタマにある'^'は意味が違います。

> それで、"を含まないっていうことを何で表しているのかが・・・

lex-scriptを書いた人が'文字列中には"を含むべからず'と決めたから。

この回答への補足

>読みが足りない。 []内のアタマにある'^'は意味が違います。

すいません。家帰って調べなおします。

補足日時:2004/12/02 15:32
    • good
    • 0
この回答へのお礼

ありがとうございました。[^なんとか]の意味を確認しました。

お礼日時:2004/12/04 10:22

> 含まないっていうのは、^で表現されているわけですか?



正規表現のマニュアル/ドキュメントは読んだのですか?
正規表現を知らずにlexコードを読むのは無謀というもの。

この回答への補足

恐縮です。
すでに読んではいるのですが、それによると^は行頭だった気がします。
それで、"を含まないっていうことを何で表しているのかが・・・

補足日時:2004/12/02 14:59
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!