私は小さなプログラミング言語用のコンパイラを設計しています。コンパイラに必要なASTを生成するJavaプリプロセッサ(GENパッケージ)が提供されます。入力文法を特定の形式でGENファイルに指定するだけです。GENファイルは、Javaクラスファイルを自動生成します。GENファイルが正しくコンパイルされています。ただし、GENコードで何を変更しても、生成されたJAVAクラスファイルには次のエラーがあります。
PcatParser.java:1022: cannot find symbol
symbol : class trees
location: class pcat.CUP$PcatParser$actions
このエラーを検索したところ、使用されている間違ったパッケージまたは宣言されていない変数に関連していることがわかりました。ただし、私の場合、実行時にエラーが発生します。ここで何がうまくいかないのかわかりません。
/********************************************************************************
*
* File: pcat.gen
* The PCAT parser
*
********************************************************************************/
package pcat;
import Gen.*;
import java_cup.runtime.*;
parser code {:
//Terminal and non terminal declarations for the grammar
start with program;
program ::= PROGRAM IS body:b SEMI
{: PcatParser.program_AST = #<ProcDecs(ProcDec(main,NoTyp(),`b))>; :}
;
PcatParser.program_ASTは、PcatParser.javaクラスファイルを生成します。#<>構文は、指定された入力のASTを生成するために使用されます。