[2126] Re:【質問】lexのトークン判断優先方法(プログラミング言語を作る3章質問その1)
投稿者:(ぱ)こと管理人
2018/04/28 00:08:37
>疑問に思ったのは「123.456」を「123」を整数型トークン、「.」を例外トークン、
>「456」の整数型トークンと判断する方法や、「1」,「2」「3」「.」「4」「5」「6」を
>全て例外トークンとして扱うこともできそうな気がするのですが、そうならない
>理由がわからないためです。
これは、lexがなぜ「123.456」を実数トークンとして解釈するのかがわからない、
ということでしょうか?
lexは、「最長一致」でトークンを切り出します。つまり「123」や「1」よりも
「123.456」のほうが長いので、「123.456」は実数トークンとして解釈されます。
それについては本の中ではp.39の一番下の段落で説明しています。
>また、整数トークンと実数トークン、"if"トークンと[ \t]トークンの関係から
>推測すると、例えば"for while other if"みたいな命令語もトークンとして
>定義できそうですが、その場合に.lファイルでの定義行(ルール順番)によっては
>動きが変わるものなのでしょうか?
同じところに書いてある通り、lexはまず「最長一致」でトークンを切り出そうとし、
長さが同じなら、より前の規則、つまり.lファイルでの定義行が上のほうである
規則を優先します。
>整数型の場合「....|"0"」と0をダブルクォーテーションで括っていますが、
>電卓のケースでP.36では、「(....|0|([0-9]....)」と0をダブルクォーテーションで
>括っていません。この違いが上の判断条件に影響しているのでしょうか?
これはどちらでも同じですね。なぜ片方だけダブルクォートで囲んだのかは、
すみませんがさすがに思い出せません……