Форма Java3d с Antlr

Хорошо, как оценить очень простую грамматику antlr, которая делает только это.

Box(1,2,4)
Cylinder(1,2) 

и создает формы java3d (учитывая, что я уже построил холст для java3d и имею код для создания каждого элемента в java,

protected static BranchGroup addBox1(Float a, Float b, Float C){
    // create branch for display
    TransformGroup bodyTransform = new TransformGroup();
    BranchGroup bg = new BranchGroup();
    bg.setCapability(BranchGroup.ALLOW_DETACH);
    bg.setUserData(shapeId);
    // set transformation
    bodyTransform =  setTransformShape(0,0,0,0,0,0,0);
    // create box  
    Box tmpBox = new Box(a,b,c, Primitive.GENERATE_NORMALS |
                  Primitive.GENERATE_TEXTURE_COORDS,setAppearance(color));    
    getCoords(tmpBox);

    bodyTransform.addChild(tmpBox);
    trFormList.add(bodyTransform);
    shapeId++;
    //add box to branch
    bg.addChild(bodyTransform);
    return bg;   
   }
)

Благодарность


person Eldeus    schedule 27.12.2010    source источник
comment
Я не уверен, что вы подразумеваете под созданием форм java3d. Не могли бы вы привести пример? Или вы хотите перевести две строки: Box(1,2,4) и Cylinder(1,2) в защищенный метод addBox1?   -  person Bart Kiers    schedule 28.12.2010
comment
спасибо за ответ, я хотел бы вызвать/встроить java-код в язык, чтобы, когда я пишу Box(1,2,4), он вызывал метод addBox1 в приложении, которое строит фигуру, то же самое для Cylinder(1, 2), который вызывает другой метод с именем addCylinder(1,2)   -  person Eldeus    schedule 28.12.2010


Ответы (1)


Что-то вроде этого, наверное?

// ...

parse
  :  shape+ EOF
  ;

shape
  :  BOX '(' a=INT ',' b=INT ',' c=INT ')' { 
       YourClass.addBox(Float.parseFloat($a.text), Float.parseFloat($b.text), Float.parseFloat($c.text)); 
     }
  |  CYL '(' a=INT ',' b=INT ')' { 
       YourClass.addCylinder(Float.parseFloat($a.text), Float.parseFloat($b.text)); 
     }
  ;

BOX : 'Box';
CYL : 'Cylinder';
INT : '0'..'9'+;
SPACE : (' ' | '\t' | '\r' | '\n'){skip();};

// ...
person Bart Kiers    schedule 29.12.2010