K.Maebashi's BBS 削除ページ

以下の投稿を削除します。

[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をダブルクォーテーションで >括っていません。この違いが上の判断条件に影響しているのでしょうか? これはどちらでも同じですね。なぜ片方だけダブルクォートで囲んだのかは、 すみませんがさすがに思い出せません……
パスワード:

管理者削除