2010-12-27 1 views
1

Хорошо, как оценить очень простую грамматику antlr, которая делает только это.Форма Java3d с 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; 
    } 
) 

благодаря

+0

Я не уверен, что вы подразумеваете под «строит java3d фигуры». Не могли бы вы привести пример? Или вы хотите передать в конце двух строк: «Вставка (1,2,4)» и «Цилиндр (1,2)» в защищенный метод «addBox1»? –

+0

спасибо за ответ, я хотел бы позвонить/вставить код Java на этом языке, чтобы при написании Box (1,2,4) он вызовет метод addBox1 в приложении, которое строит форму, то же самое для Cylinder (1 , 2), который вызывает другой метод, называемый addCylinder (1,2) – Eldeus

ответ

0

Нечто подобное возможно?

// ... 

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();}; 

// ... 

 Смежные вопросы

  • Нет связанных вопросов^_^