• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:BNF→JAVA  基本問題らしいです)

BNFからJAVAへの変換についての基本問題

このQ&Aのポイント
  • 学校の宿題でBNFからJAVAの課題が出て一応自分でやったんですが自身が無いので合ってるか見てください。
  • 特によくわからないのが繰り返し{}と省略可[]をどのようにしたらいいのかが迷いました。
  • 質問文章のコード例を解析し、解答を提供します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kacchann
  • ベストアンサー率58% (347/594)
回答No.1

たとえば、こんなかんじかな? 一例ということで。 (parseDec()やparseE()やparseVar()の内部処理がわからないので、 なんとも決められないし、 他にもやりようがある) void parseB() {  //現在のトークン種を見て  //S_DECならparseDec()し、  //S_DECでないならparseDec()しない。  if(tokenType == S_DEC ) {   parseDec();        }  parseS(); } void parseS() {  //現在のトークン種を見て  //「{」か「if」か「intまたはchar」なら  //しかるべきparseXXX()を呼ぶ。  if (tokenType == S_LBRACE) {   getToken();   parseS();   if (tokenType != S_RBRACE) {    error();   }   getToken();  } else if (tokenType == S_IF ) {   parseIf();  } else if (tokenType == S_INT || tokenType == S_CHAR) {   parseWrite();  } else {   error();  } } void parseIf() {  if (tokenType != S_IF ) {   error();  }  getToken();  parseE();  parseS();  if (tokenType != S_SEMICOLON) {   error();  }  getToken(); } void parseWrite() {  if (tokenType != S_INT && tokenType != S_CHAR) {   error();  }  getType();  parseVar();  if (tokenType != S_SEMICOLON) {   error();  }  getToken(); }

その他の回答 (1)

  • kacchann
  • ベストアンサー率58% (347/594)
回答No.2

#No.1です 言い忘れた…。 ちょっとわからないんだけど、 <S>::="{"<S>"}"|<IF>|<WRITE> 上の式で使われてる"{"は 「繰り返し記号の{」ではなく、 単に「文字列としての{」ではないのかな? (なぜならダブルクォーテーションで囲まれてるから) これは僕にははっきりわからないので、 先生に確認してみよう。 -------------------------- あと、僕が書いた「答え」は、 あくまでも参考にしてちょ。 (「正答」は、あくまでもその課題で提供されてる前提条件によるし、  課題として事前に要求されてる「書き方」があるなら  それに従う必要がある)

god_god_god
質問者

お礼

ありがとうございます。もう宿題は提出してしまったんですが復習として参考にさせていただきます。 今さらいっても仕方ないんですが問題書き間違えてました。 <S>::="{"<S>"}"|<IF>|<WRITE>ではなくご指摘のとおり{}が抜けてました。 <S>::="{"{<S>}"}"|<IF>|<WRITE>でした

関連するQ&A