이것은 Xtext를 사용하여 DSL을 구현하기 위해 작성한 문법입니다.Xtext와 Xtend를 사용하여 코드를 생성하는 방법은 무엇입니까?
grammar org.processing.pde.Pde with org.eclipse.xtext.common.Terminals
generate pde "http://www.processing.org/pde/Pde"
Pde:
Active | Static;
Active:
method_1=Setup
method_2=Draw
;
Static:
elements+=AbstractElement*
;
AbstractElement:
Size | Background | Shape | Fill | ShapeMode | Smooth | Stroke | FrameRate | ColorMode
;
terminal LPAREN:
"("
;
terminal RPAREN:
")"
;
terminal MOUSE_X:
"mouseX"
;
terminal MOUSE_Y:
"mouseY"
;
terminal P_MOUSE_X:
"pmouseX"
;
terminal P_MOUSE_Y:
"pmouseY"
;
terminal NO_VALUE:
(" ")
;
terminal MODE:
"CENTER" | "CORNER"
;
terminal OPERATOR:
"+" | "-" | "/" | "*" | "^"
;
terminal PI_VALUE:
"PI" |"0" | "HALF_PI" | "QUATER_PI" | "TWO_PI"
;
terminal ROUND_VALUE:
"ROUND"
;
terminal SQUARE_VALUE:
"SQUARE"
;
terminal BEVEL_VALUE:
"BEVEL"
;
terminal CLOSE_VALUE:
"CLOSE"
;
Corner:
ROUND_VALUE | BEVEL_VALUE
;
Ending:
ROUND_VALUE | SQUARE_VALUE
;
PiValuesWithOperations:
PI_VALUE | PI_VALUE OPERATOR PI_VALUE
;
RadianValue:
"radian" LPAREN degree_value=INT RPAREN
;
GrayValue:
INT
;
Position_X:
MOUSE_X| INT | OPERATOR INT | MOUSE_X OPERATOR INT | INT OPERATOR INT | INT OPERATOR MOUSE_X | P_MOUSE_X | P_MOUSE_X OPERATOR MOUSE_X | MOUSE_X OPERATOR P_MOUSE_X | INT OPERATOR P_MOUSE_X | P_MOUSE_X OPERATOR INT
;
Position_Y:
MOUSE_Y | INT | OPERATOR INT | MOUSE_Y OPERATOR INT | INT OPERATOR INT | INT OPERATOR MOUSE_Y | P_MOUSE_Y | P_MOUSE_Y OPERATOR MOUSE_Y | MOUSE_Y OPERATOR P_MOUSE_Y | INT OPERATOR P_MOUSE_Y | P_MOUSE_Y OPERATOR INT
;
ColorModeMaxValue:
INT
;
RedValue:
INT
;
GreenValue:
INT
;
BlueValue:
INT
;
AlphaValue:
INT
;
HueValue:
INT
;
SaturationValue:
INT
;
BrightnessValue:
INT
;
EndShapeValue:
CLOSE_VALUE | NO_VALUE
;
Size:
"size" LPAREN height=INT "," width=INT RPAREN ";"
;
Background:
"background" LPAREN gray_value=GrayValue RPAREN";"
;
Fill:
{Fill}
"fill" LPAREN gray_value=GrayValue RPAREN ";"
;
ShapeMode:
"ellipseMode" LPAREN mode_value= MODE RPAREN ";" |
"rectMode" LPAREN mode_value=MODE RPAREN ";" |
"beginShape" LPAREN no_begin_shape_value=NO_VALUE RPAREN ";" |
"endShape" LPAREN no_end_shape_value=EndShapeValue RPAREN ";"
;
Smooth:
"smooth" LPAREN smooth_value=NO_VALUE RPAREN ";" |
"noSmooth" LPAREN no_smooth_value=NO_VALUE RPAREN ";"
;
Stroke:
"stroke" LPAREN stroke_value=INT RPAREN";" |
"noStroke" LPAREN no_stroke_value=NO_VALUE RPAREN";" |
"strokeWeight" LPAREN stroke_weight_value=INT RPAREN ";" |
"strokeJoin" LPAREN stroke_corner=Corner RPAREN";" |
"strokeCap" LPAREN stroke_ending=Ending RPAREN";"
;
Shape:
Rectangle | Ellipse | Point | Line | Triangle | Quad | Arc | Vertex
;
Point:
"point"LPAREN position_x= Position_X"," position_y=Position_Y RPAREN ";"
;
Vertex:
"vertex" LPAREN position_x=Position_X "," position_y=Position_Y RPAREN ";"
;
Line:
"line" LPAREN position_1_x=Position_X "," position_1_y=Position_Y "," position_2_x=Position_X "," position_2_y=Position_Y RPAREN ";"
;
Rectangle:
"rect" LPAREN top_left_x=Position_X "," top_left_y=Position_Y "," bottom_right_x=Position_X"," bottom_right_y=Position_Y RPAREN ";"
;
Ellipse:
"ellipse" LPAREN center_x=Position_X "," center_y=Position_Y "," width=INT "," height=INT RPAREN ";"
;
Triangle:
"traingle" LPAREN position_1_x=Position_X "," position_1_y=Position_Y "," position_2_x=Position_X "," position_2_y=Position_Y "," position_3_x=Position_X "," position_3_y=Position_Y RPAREN ";"
;
Quad:
"quad" LPAREN position_1_x=Position_X "," position_1_y=Position_Y "," position_2_x=Position_X "," position_2_y=Position_Y "," position_3_x=Position_X "," position_3_y=Position_Y "," position_4_x=Position_X "," position_4_y=Position_Y RPAREN ";"
;
Arc:
"arc" LPAREN position_x=Position_X "," position_y=Position_Y "," width=INT "," height=INT "," start= PiValuesWithOperations "," stop= PiValuesWithOperations RPAREN";" |
"arc" LPAREN position_x=Position_X "," position_y=Position_Y "," width=INT "," height=INT "," start_r= RadianValue "," stop_r=RadianValue RPAREN";"
;
FrameRate:
"frameRate"LPAREN frame_rate_value=INT RPAREN";"
;
ColorMode:
RGBColorMode | HSBColorMode
;
RGBColorMode:
"colorMode" LPAREN color_mode="RGB" "," color_mode_max_value=ColorModeMaxValue RPAREN";"
|"colorMode" LPAREN color_mode="RGB" "," red_value=RedValue "," green_value=GreenValue "," blue_value=BlueValue ("," alpha_value=AlphaValue)? RPAREN";"
;
HSBColorMode:
"colorMode" LPAREN color_mode="HSB" "," hue_value=HueValue "," saturation_value=SaturationValue "," brightness_value=BrightnessValue RPAREN";"
;
Setup:
"void" space=NO_VALUE "setup" LPAREN RPAREN "{"
elements+=AbstractElement*
"}"
;
Draw:
"void" space=NO_VALUE "draw" LPAREN RPAREN "{"
shapes+=Shape*
"}"
;
그것은 나를 내가 새로운 이클립스 runtime.This에서 "org.processing.pde"(내 프로젝트)를 실행하면 아래에 언급 된 "test.pde"파일에서 같은 코드를 제안하는 데 도움이의 구문입니다 수
프로그래밍 언어 "Processing"및 현재 Xtext를 사용하여 언어에 대한 코드 제안을 작성하는 중입니다.
void setup(){
size(200,200);
}
void draw(){
ellipse(50,50,80,80);
}
는 지금은 아래에 언급 한 바와 같이 내 "test.pde"파일에 따라 "SRC 세대/test.java"파일을 생성 할 그것은 사전 컴파일러 코드 역할을합니다.
import processing.core.*;
public class Test extends PApplet {
public void setup(){
size(200,200);
}
public void draw(){
ellipse(50,50,80,80);
}
static public void main(String args[]) {
PApplet.main(new String[] { "--bgcolor=#ECE9D8", "a" });
}
}
나는 Xtend 나를 위해 그 코드를 생성 할 수 있습니다 발견. Xtext 팀의 비디오는 vimeo에서 보았습니다. Xtext 참조 문서. Xtend가 진행할 다른 튜토리얼을 찾을 수 없었습니다. 아직 Xtend 파일을 코딩하는 방법을 알지 못합니다.
누군가 나를 도와 주실 수 있습니까?
미리 감사드립니다.
어떤 Xtext 프레임 워크를 사용하고 있습니까? 1.x 또는 2.x? – Timotei
xtext 2.x입니다. – har