月間29,000PV達成! 収益は毎日発生中! ギランバレー症候群に関する情報を集めています

lexファイルの文法の読み方を解説!地獄の電卓作成編【4】

             
  • 2020.02.08
  • ZERO
lexファイルの文法の読み方を解説!地獄の電卓作成編【4】
Advertisement

 

さーーーて、前回は「yacc」と「lex」について見ていきましたが、実践しないと訳分からんので実際に手を動かしていきます。

独自プログラミング言語を作るにあたり、まずは電卓を作ってみて、その後本格的に言語作成に入ります。

まあ、頭がいいわけでもないので着実に行きましょう。

 

 

僕のプロフィールはこちら

 

 

電卓作成に向けてやること

電卓作成に向けて、少なくとも「lexファイル」と「yaccのファイル」は何となく理解しておかないと前に進めません。

ってことで今回は、lexファイルについて詳しく見ていこうと思います

 

 

lexファイルに記載するべきこと

lex(今回はflexを使用)はレキシカルアナライザを生成するツールです。

レキシカルアナライザは字句解析を行なう(トークンに分割する)わけなので、lexファイルにはトークンの定義を記載します

今回は電卓を作成するので、具体的には、

・+,-などの演算子

・1などの整数

・1.2などの実数

・改行

などについて一つ一つ定義する必要があります。

 

 

lexファイルってどんな感じ?

電卓作成に用いるlexファイルはこんな感じです。

 

今回はファイル名を「calculator.l」としました。

lexファイルは拡張子が「l」になります。

 

 

lexファイルの区分け

lexファイルは大きく3つに分けられます。

1~11行目 定義部。
主に、スタート状態の定義などを行う。
12~28行目 規則部。
正規表現によってトークンを表現している。
29~ ユーザコード部。
C言語のコードを記載することができる。※今回は記載なし。

上記の区分けを頭に入れた上で、実際にファイルの内容を見ていきます。

 

 

Advertisement

 

lexファイルの読み方

定義部

2~10行目の記載はC言語のプログラムとなっています。

つまり、上記の部分はレキシカルアナライザにそのまま出力されます。

y.tab.h」は後で出てくるyaccで自動生成されるヘッダファイルになりますが、今は特に気にせず進みます。

yywrap」という関数も今は気にせず、「こういうものだ」と解釈して進みましょう。

 

規則部

15~30行目の記述です。

 

 

この記載は、「+」というトークンが来たら、「return ADD;」というアクションを返す、という意味になります。

アクションの部分はC言語で記載されています。
また、ADDは「y.tab.h」で定義されるマクロとなります。

 

 

20~25行目はdouble型の規則を記載しています。

正規表現を使っていますが、要約すると

・1~9が1文字あり、かつ0~9が0文字以上

・0

・0~9が1文字以上あり、かつ「.」、かつ0~9が1文字以上

となります。

 

 

26行目は空白文字、もしくはタブ文字の場合は何もアクションをしない、という意味です。

 

 

.」は任意の1文字を意味するので、15~26行目でどれにもマッチしなかった文字が上記に該当し、エラーとなります。

 

 

おすすめ本

これおすすめやで。

 

 

 

まとめ

一つ一つ理解していくと少しずつ分かってきますが、C言語が絡むので、ある程度は読めないと今後苦戦しそうっすね。

さいなら。

Travelerを知らないの?