Рэнди Рост, Форт-Коллинз, СО Июнь 2003

Приложение А Грамматика языка

Грамматика языка шейдеров OpenGL взята из лексического анализатора. Вот список ключевых слов:

ATTRIBUTE CONST BOOL FLOAT INT

BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN

BVEC2 BVEC3 BVEC4 IVEC2 IVEC3 IVEC4 VEC2 VEC3 VEC4

MAT2 МАТЗ MAT4 IN OUT INOUT UNIFORM VARYING

SAMPLER1D SAMPLER2D SAMPLER3D

SAMPLERCUBE SAMPLER1DSHAD0W SAMPLER2DSHAD0W

STRUCT VOID WHILE

IDENTIFIER TVPE_NAME FLOATCONSTANT INTCONSTANT BOOLCONSTANT

FIELD_SELECTION

LEFT_0P RIGHT_0P

INC_0P DEC_0P LE_0P GE_0P EQ_0P NE_0P

AND_0P 0R_0P X0R_0P MUL_ASSIGN DIV_ASSIGN ADD_ASSIGN

M0D_ASSIGN LEFT_ASSIGN RIGHT_ASSIGN AND_ASSIGN X0R_ASSIGN 0R_ASSIGN

SUB_ASSIGN

LEFT_PAREN RIGHT_PAREN LEFT_BRACKET RIGHT_BRACKET LEFT_BRACE RIGHT_BRACE DOT

COMMA COLON EQUAL SEMICOLON BANG DASH TILDA PLUS STAR SLASH PERCENT LEFT_ANGLE RIGHT_ANGLE VERTICAL_BAR CARET AMPERSAND QUESTION

Выражения на языке шейдеров OpenGL выглядят так:

variable_identifier:

IDENTIFIER

primary_expression: variable_identifier INTCONSTANT FLOATCONSTANT BOOLCONSTANT

LEFT_PAREN expression RIGHT_PAREN

postfi x_expressi on: primary_expression

postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET function_call

postfix_expression DOT FIELD_SELECTI0N postfix_expression INC_0P postfix_expression DEC_0P

i nteger_expressi on: expression function cal1:

function_call_generic

functi on_cal1_generi с:

function_call_header_with_parameters RIGHT_PAREN function_cal1_header_no_parameters RIGHT_PAREN

function_call_header_no_parameters: function_call_header VOID function_call_header

function_call_header_with_parameters:

function_call_header assignment_expression function_call_header_with_parameters COMMA assignment_expression

function_call_header:

function_identifier LEFT_PAREN

function_identi fier: constructor_identi fier IDENTIFIER

// Конструкторы похожи на функции, но лексический анализатор

// рассматривает большинство из них как ключевые слова.

constructor_identifier:

FLOAT

INT

BOOL

VEC2

VEC3

VEC4

BVEC2

BVEC3

BVEC4

IVEC2

IVEC3

IVEC4

MAT2

MAT3

MAT4

unary_expression: postfix_expression INC_0P unary_expression DEC_0P unary_expression unary_operator unary_expression

// Традиционные преобразования типов не поддерживаются

unary_operator:

PLUS

DASH

BANG

TILDA // зарезервировано

// Унарные операторы '*' и указатели не поддерживаются

multiplicative_expression:

unary_expression

mul ti pii cati ve_expression STAR unary_expression multiplicative_expression SLASH unary_expression multiplicative_expression PERCENT unary_expression // зарезервировано

additive_expression:

multiplicative_expression

additive_expression PLUS multi piicative_expression additive_expression DASH multi piicative_expression

shift_expression:

additive_expression

shift_expression LEFT_0P additive_expression // зарезервировано

shift_expression RIGHT_0P additive_expression // зарезервировано

relational_expression:

shift_expression

relational_expression LEFT_ANGLE shift_expression relational_expression RIGHT_ANGLE shift_expression relational_expression LE_0P shift_expression relational_expression GE_0P shift_expression


⇐ вернуться назад | | далее ⇒