« スーパーエンジニアへの道 | Main | ソース変更終了 »

2004.04.21

JavaCCメモ

今日のメモ

SKIP :
{
  " "|"\r"
}
SKIP : は読み飛ばす文字の指定。行指向じゃない場合は、"\n"も加える。

TOKEN :
{
  < ADDOP: "+" >
  | < SUBOP: "-" >
(省略)
  | < LITERAL: (["0"-"9"])+ >
  | < NL: "\n" >
}
TOKENで、必要なトークンを指定。Verilogでも使えそうだ。上手く[]を取れば、バス接続、一気抜き出しとかできるのか。

とりあえず、電卓動いたけどソースの意味がわからない。

BNFによる電卓の式表記
<加算式> ::= <乗算式> ( ("+"|"-") <乗算式> ) *  (1)
<乗算式> ::= <基本式> ( ("*"|"/") <基本式> ) *  (2)
<基本式> ::= 定数 | "(" <加算式> ")"       (3)

いきなりBNFわかんない。
なんとなくわかっていても、ちゃんと説明しろって言われると困る、そんなレベルだな。

とりあえずグーグルだ。
ここをみて、* が、0回以上の繰り返しであることを知る。(1)は加算式の定義は「乗算式同士を+か-でつないだもの」ってこと。(2)は乗算式の定義は基本式を*か/でつなげた物。って事か。
(3)が難しいな。定数(5とか256とか)は基本式で、()の中の加算式も定数ですよ。って事だな。5も(2+128)も基本式。
()の中に乗算式が来たときは、どうなるんだ。(3 * 5)とか。とりあえず、さっきの電卓プログラムで試してみると

D:\home\study\javacc\calc>java Calc
(3 * 4)
result= 12.

ちゃんと計算してるな。えっと、加算式が、乗算式同士の0回以上の和だから、そこで処理できているのか。
ムツカシー。
こんなレベルで、自分ルールで構文解析できるのかな。30過ぎたら構文解析ダメなのかも。

|

« スーパーエンジニアへの道 | Main | ソース変更終了 »

Comments

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/18154/471962

Listed below are links to weblogs that reference JavaCCメモ:

« スーパーエンジニアへの道 | Main | ソース変更終了 »