Рэнди Рост, Форт-Коллинз, СО Июнь 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