• ベストアンサー

正規表現・lexによる字句解析器

lexソースの中に次のようなコードが出てるんですが、左側の正規表現の意味がわからなくて困っています。文字列の解釈のコードだと思います。 \はバックスラッシュだと思ってください。 \"[^"]*\" { yytext[yyleng - 1] = '\0'; yylval.str = strdup(&yytext[ 1]); return(STRING); } (yaccのソースの中に&token <str> STRINGという記述が入っている) 文字列はダブルクォーテーション「"」で囲み、間に改行が入っても構わないそうです。 yytextは次の入力を処理するときに破壊されるので、ヒープ上に確保した領域に文字列を格納し、そのアドレスをyylval.strに渡す。初めと終わりの「"」は取り除く・・ のだそうです。おそらくstrdupの説明だと思うのですが、C言語のマニュアルには載ってなかったですね・・・。

質問者が選んだベストアンサー

  • ベストアンサー
  • ranx
  • ベストアンサー率24% (357/1463)
回答No.1

\"    "の特別な意味を除いた、文字としての" [^"]*   "以外の文字の0回以上の繰り返し ですので、 "を含まない0文字以上の文字列を"で囲んだもの という意味になります。

msndance
質問者

補足

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

その他の回答 (2)

回答No.3

> すでに読んではいるのですが、それによると^は行頭だった気がします。 読みが足りない。 []内のアタマにある'^'は意味が違います。 > それで、"を含まないっていうことを何で表しているのかが・・・ lex-scriptを書いた人が'文字列中には"を含むべからず'と決めたから。

msndance
質問者

お礼

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

msndance
質問者

補足

>読みが足りない。 []内のアタマにある'^'は意味が違います。 すいません。家帰って調べなおします。

回答No.2

> 含まないっていうのは、^で表現されているわけですか? 正規表現のマニュアル/ドキュメントは読んだのですか? 正規表現を知らずにlexコードを読むのは無謀というもの。

msndance
質問者

補足

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

関連するQ&A

専門家に質問してみよう