在Java CUP中更改对象类型

时间:2015-05-23 17:06:03

标签: java cup

我正在使用CUP和JFLex创建一个解析器来创建扫描程序。

我正在关注此链接Parse tree generation with Java CUP但是因为我不知道如何将类型更改为节点而陷入困境,因为默认情况下类型为Object。

我希望CUP案例陈述看起来像以下

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

而不是:

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

2 个答案:

答案 0 :(得分:0)

你是不是只需要投射到Node?如下?

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

答案 1 :(得分:0)

您可以在各自的部分指定终端/非终端的类型:

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;