1

CUP と JFLex を組み合わせてスキャナーを作成するパーサーを作成しています。

このリンクをたどっていましたJava CUPによる解析ツリーの生成ですが、デフォルトではタイプがオブジェクトであるため、タイプをノードに変更する方法がわからないため、行き詰まりました。

CUP case ステートメントを次のようにしたい

case 16: 
{
  Node RESULT =null; ... }

ではない:

case 16: 
{
  Object RESULT =null; ...}
4

2 に答える 2

1

それぞれのセクションで端末/非端末のタイプを指定できます。

terminal [TYPE] TERM [, TERM]*;
non terminal [TYPE] NONTERM [, NONTERM]*;

生成されたコード:

terminal Foo A,B,C;
non terminal BinaryExpression E0,E1;
non terminal BinaryOperator OP0,OP1;
/*etc*/

次のようになります。

 /*. . . . . . . . . . . . . . . . . . . .*/
case 63: // E0 ::= E0 OP0 E1 
{
  BinaryExpression RESULT =null;
  BinaryExpression e0 = (BinaryExpression)((java_cup.runtime.Symbol) CUP$/* ... */.value;
  BinaryOperator op0 =  (BinaryOperator)((java_cup.runtime.Symbol) CUP$C/* ... */.value;
  BinaryExpression e1 = (BinaryExpression)((java_cup.runtime.Symbol) CUP$/* ... */.value;
  RESULT = new BinaryExpression(e0,op0,e2); 
  CUP$/*...*/$result = /*...*/
}
return CUP$ConstructorAST$result;
于 2015-06-05T08:35:54.813 に答える
0

Nodeにキャストするだけでいいのではないですか? 以下のように?

case 16: 
{
  Node RESULT = (Node) null; ... }
于 2015-05-23T17:08:10.767 に答える