ホーム » 「字句解析」タグがついた投稿

タグアーカイブ: 字句解析

2018年10月
« 9月    
 123456
78910111213
14151617181920
21222324252627
28293031  

最近の投稿(電子情報)

アーカイブ

カテゴリー

電卓プログラム作成の補足

専攻科実験で、「字句解析と構文解析で電卓プログラムを作ろう」というネタを実施中。

サンプルプログラムを見せて、課題の1つが「式を読みやすくするための空白が使えるように改良」としているが、学生さんより、『最初に空白を全部消してから処理するのはアリ?』との質問。

ひとまずは動くプログラムをつくってくれればいいけど….

でも、空白を先に全部消してから、トークン切り出しをやると、色々とトラブルが起こる。

((例1))
x=-1 ;
昔、私が学生の頃に使ったCコンパイラは、"+="演算子を、
"=+"と書いても良かった。だから、"x -= 1"と誤認され、
プログラムがバグった。この経験以降、代入文の"="の前後
とかややこしい演算子の式で、空白を適所に打たないヤツは
シロウト判定している。
今回の質問のように、空白を除去してから字句解析を行うと、
"x = -1"と誤認されないように空白を入れあっても、
"x -= 1"に誤認される。

((例2))
C++でのテンプレートクラスでは、<>の中に型を
書いたりするけど、Foot<int>といった型も
出てくる。んで、<>の中にテンプレートクラス
が出てくると、Foo< Bar<int> > といった
型を使う場合がある。でも、空白除去後に字句解析をすると、
Foo<Bar<int>>となり、右シフト演算子になる。
→ C++03 から C++11 での仕様の変化
 ・C++03までは、テンプレートの">"の前後には空白を入れるべき。
 ・C++11からは、"<"のトークンの数で">>"でも区別してくれる。

専攻科実験・コンパイラと関数電卓プログラム作成

  • コンパイラの技術と関数電卓プログラム(1)
    • 課題
      • 複数桁の数字が使えること。
      • 式中に空白が使えること。
      • 何らかの演算子を追加すること。
        • (例) %,単項演算子のマイナスなど
      • 演算子が左結合か右結合か確認すること。
      • オプション課題
        • 変数が使えること。
          (変数名は1文字のA-Zといったもので良い)
    • レポート内容
      • コンパイラ技術の概要、課題(1)の説明・ソース・動作検証、考察
  • コンパイラの技術と関数電卓プログラム(2)
    • 課題
      • 基本的に、lex+yaccで(1)と同様の課題完成を目指す。
    • レポート内容
      • lex,yaccの概要、課題(2)の説明・ソース・動作検証、考察