K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[2125] 【質問】lexのトークン判断優先方法(プログラミング言語を作る3章質問その1)
投稿者:mano
2018/04/24 07:02:35

たびたびお邪魔します。 3章途中まで読み進めたのですが、わからないところがあったので教えてください。 P.102のcrowbar.lのソースで、59行目で整数型「([1-9][0-9]*)|"0"」、65行目で実数型「0-9]+\.[0-9]+」、78行目で例外「.」のトークンを切り分けているように見えます。 入力が、「123.456」だった場合、なぜ実数型のトークンと判断されるのでしょうか? 疑問に思ったのは「123.456」を「123」を整数型トークン、「.」を例外トークン、「456」の整数型トークンと判断する方法や、「1」,「2」「3」「.」「4」「5」「6」を全て例外トークンとして扱うこともできそうな気がするのですが、そうならない理由がわからないためです。 (済みません。書籍に記述があるのに私が読み飛ばしてしまっているだけかもしれません。) また、整数トークンと実数トークン、"if"トークンと[ \t]トークンの関係から推測すると、例えば"for while other if"みたいな命令語もトークンとして定義できそうですが、その場合に.lファイルでの定義行(ルール順番)によっては動きが変わるものなのでしょうか? 整数型の場合「....|"0"」と0をダブルクォーテーションで括っていますが、電卓のケースでP.36では、「(....|0|([0-9]....)」と0をダブルクォーテーションで括っていません。この違いが上の判断条件に影響しているのでしょうか?
[この投稿を含むスレッドを表示] [この投稿を削除]