Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 >  掲示板 >  掲示板(JavaCC It will be matched as  <token of kind 5>.)
閲覧数:254
掲示板(JavaCC It will be matched as  <token of kind 5>.)
名前
匿名
題名 JavaCC It will be matched as  <token of kind 5>.
質問内容

質問を評価する
(0ポイント)
この間日本語で書けるプログラミング言語を作りたいと言った人です。直接日本語で作られたトークンを扱うのではなく、トークンとして使われる日本語をこちらでアルファベットなどに変換し、その単語をトークンとしてJavaCCでコンパイラを作っていこうと思いました。
というわけで、その変換した後の言語をコンパイルするためのコンパイラーをJavaCCで作ろうとしているのですが、コメント読み飛ばしの部分で以下のような警告が出ました。

警告:  "komentkokokara" cannot be matched as a string literal token at line 56, column 3. It will be matched as  <token of kind 5>.

コメント読み飛ばし部分については以下のように記述しています。

SKIP:
{
  <"koment" (~["\r","\n"])* ("\r" | "\r\n" | "\n")? >
}

MORE:
{
  < "komentkokokara" > :IN_COMMENTS
}

< IN_COMMENTS >MORE:
{
  < (~[]) >
}

< IN_COMMENTS >SKIP:
{
  < "komentokokomade" > :DEFAULT
}

とりあえず警告だからと無視しし、作成されたコンパイラに対して以下のようなソースコードを書いて実行してみました。
(今できることは、文字列+文字列と書くとその2つの文字列をつなげてくれることと、コメントの読み飛ばし(予定)です)

komenntokokokara
コメントだよ?
komentokokomade
あいうえお+かきくけこ
koment プログラム終わりだって。

すると、2つの文字列をつなげることはできているようですが、前後のコメント部分でエラーが出ているようです。

Encountered "<EOF>" at line 1, column 16.
Was expecting:
    "+" ...
    
Encountered "<EOF>" at line 1, column 7.
Was expecting:
    "+" ...
    
Encountered "<EOF>" at line 1, column 15.
Was expecting:
    <STRING> ...
    
あいうえおかきくけこ
Encountered "<EOF>" at line 1, column 6.
Was expecting:
    <STRING> ...
    
Encountered "<EOF>" at line 1, column 12.
Was expecting:
    "+" ...
    
何が原因なのでしょうか?
質問日時 2013-12-14 19:09:21
名前
匿名
回答内容

回答を評価する
(0ポイント)
<EOF>と出てるんだからそれが混じるせいじゃないの。
回答日時 2013-12-15 09:13:58
名前
匿名
回答内容

回答を評価する
(0ポイント)
JavaCCで作るように書いているJavaソースが原因のようでした。
たとえば

文字列+文字列

とすると

文字列文字列

としてくれるようには書いていて、でもまだそれ以外の構文を処理できるようには書いていないようで、定義したつもりのコメント文の書き型どおり書いても構文エラーとなっているようです。
私が勝手にSKIPとかでコメント文を定義しておけばソースに書いたときに勝手に読み飛ばしてくれるんだと思っていたのが間違いのようです。
回答日時 2013-12-15 10:26:11
名前
匿名
回答内容

回答を評価する
(0ポイント)
jjファイルをコンパイルしたときに出る警告は、複数行コメント先頭の"komentokokokara"が一行コメントの定義<"koment" (~["\r","\n"])* ("\r" | "\r\n" | "\n")? >に飲み込まれてしまうからのようです。
そこでとりあえず1行コメントのほうはなしにすることにしました。
回答日時 2013-12-15 20:41:32
回答内容を入力し、「確認」ボタンをクリックしてください。
ログインしていません。ログインしなくても回答はできますが、ログインすると、質問・回答の管理、更新があった場合のメールでの通知を受けることができます。 ユーザIDをお持ちでない方は「ID登録」からユーザIDの登録を行ってください。
氏名 匿名
回答内容
 



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道