トップページ > プログラム > 2014年12月06日 > BPhK2Nlg

書き込み順位&時間帯一覧

42 位/244 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000000000033



使用した名前一覧書き込んだスレッド一覧
117
「コンパイラ・スクリプトエンジン」相談室16

書き込みレス一覧

「コンパイラ・スクリプトエンジン」相談室16
123 :117[sage]:2014/12/06(土) 23:05:55.88 ID:BPhK2Nlg
>>120
>みんなBNFとかやってるのか
JavaCCの場合字句解析でトークン列に分解してくれて、
>>117にあるようにそのトークンの並びを書いて構文解析の定義をします。
なのでBNF記法とは違った書き方になります。

>>121
>演算子の優先順位はどうしてんの?

いい説明文が思い浮かばないので、
まずは例として1+2*3/4-5という式を構文木にしたものを以下にアップします。
http://fast-uploader.com/file/6973429321730/
こんなかんじのまとまりです。
演算子:/ 左辺:3(enzan5) 右辺:4(enzan5) → @(enzan4)
演算子:* 左辺:2(enzan5) 右辺:@(enzan4) → A(enzan4)
演算子:- 左辺:A(enzan4) 右辺:5(enzan5) → B(enzan4)
演算子:+ 左辺:1(enzan5) 右辺:B(enzan4) →C(enzan3)
「コンパイラ・スクリプトエンジン」相談室16
124 :117[sage]:2014/12/06(土) 23:06:51.00 ID:BPhK2Nlg
とりあえずenzan3の定義の先頭にマイナスの記号があるかもしれないという意味合いで
以下のようなコードに変えてみました。

void enzan3() :
{}
{
[<HIKU>]enzan4() //★
((<TASU>|<HIKU>)enzan4())*
}

void enzan4() :
{}
{
enzan5()
((<KAKERU>|<WARU>)enzan5()
}

void enzan5() :
{}
{
<MOZI>|<SUUZI>|"(" enzan3() ")"
}

<>:トークン |:左右のどちらかの構文(||やOr演算子のようなもの) []:省略可能構文
「コンパイラ・スクリプトエンジン」相談室16
125 :117[sage]:2014/12/06(土) 23:07:27.16 ID:BPhK2Nlg
すると、以下のような警告が出ました。

Warning: Choice conflict in (...)* construct at line 608, column 9.
Expansion nested within construct and expansion following construct
have common prefixes, one of which is: <HIKU>
Consider using a lookahead of 2 or more for nested expansion.

内容は選択の突出(Choice conflict)と言うもので、
私が作った構文の定義があいまいのようで
608行目(ここでは★を付けた行)の定義が他の定義とかぶっているらしく、
先頭に出てくる<HIKU>トークンが共通点らしいです。
そもそもの考え方が間違っているかもしれませんが、
それを抜きにしてもまずなぜこのような警告が出ているかわかりません。
一体なぜ出ているかわかる人いれば教えてださい。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。