📄 slang_pp_directives.syn
字号:
/* * Mesa 3-D graphics library * Version: 6.6 * * Copyright (C) 2006 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *//** * \file slang_pp_directives.syn * slang preprocessor directives parser * \author Michal Krol */.syntax source;/* * This syntax script preprocesses a GLSL shader. * It is assumed, that the #version directive has been parsed. Separate pass for parsing * version gives better control on behavior depending on the version number given. * * The output is a source string with comments and directives removed. White spaces and comments * are replaced with on or more spaces. All new-lines are preserved and converted to Linux format. * Directives are escaped with a null character. The end of the source string is marked by * two consecutive null characters. The consumer is responsible for executing the escaped * directives, removing dead portions of code and expanding macros. */.emtcode ESCAPE_TOKEN 0/* * The TOKEN_* symbols follow the ESCAPE_TOKEN. * * NOTE: * There is no TOKEN_IFDEF and neither is TOKEN_IFNDEF. They are handled with TOKEN_IF and * operator defined. * The "#ifdef SYMBOL" is replaced with "#if defined SYMBOL" * The "#ifndef SYMBOL" is replaced with "#if !defined SYMBOL" */.emtcode TOKEN_END 0.emtcode TOKEN_DEFINE 1.emtcode TOKEN_UNDEF 2.emtcode TOKEN_IF 3.emtcode TOKEN_ELSE 4.emtcode TOKEN_ELIF 5.emtcode TOKEN_ENDIF 6.emtcode TOKEN_ERROR 7.emtcode TOKEN_PRAGMA 8.emtcode TOKEN_EXTENSION 9.emtcode TOKEN_LINE 10/* * The PARAM_* symbols follow the TOKEN_DEFINE. */.emtcode PARAM_END 0.emtcode PARAM_PARAMETER 1/* * The BEHAVIOR_* symbols follow the TOKEN_EXTENSION. */.emtcode BEHAVIOR_REQUIRE 1.emtcode BEHAVIOR_ENABLE 2.emtcode BEHAVIOR_WARN 3.emtcode BEHAVIOR_DISABLE 4source optional_directive .and .loop source_element .and '\0' .emit ESCAPE_TOKEN .emit TOKEN_END;source_element c_style_comment_block .or cpp_style_comment_block .or new_line_directive .or source_token;c_style_comment_block '/' .and '*' .and c_style_comment_rest .and .true .emit ' ';c_style_comment_rest .loop c_style_comment_body .and c_style_comment_end;c_style_comment_body c_style_comment_char_nostar .or c_style_comment_char_star_noslashstar;c_style_comment_char_nostar new_line .or '\x2B'-'\xFF' .or '\x01'-'\x29';c_style_comment_char_star_noslashstar '*' .and c_style_comment_char_star_noslashstar_1;c_style_comment_char_star_noslashstar_1 c_style_comment_char_noslashstar .or c_style_comment_char_star_noslashstar;c_style_comment_char_noslashstar new_line .or '\x30'-'\xFF' .or '\x01'-'\x29' .or '\x2B'-'\x2E';c_style_comment_end '*' .and .loop c_style_comment_char_star .and '/';c_style_comment_char_star '*';cpp_style_comment_block '/' .and '/' .and cpp_style_comment_block_1;cpp_style_comment_block_1 cpp_style_comment_block_2 .or cpp_style_comment_block_3;cpp_style_comment_block_2 .loop cpp_style_comment_char .and new_line_directive;cpp_style_comment_block_3 .loop cpp_style_comment_char;cpp_style_comment_char '\x0E'-'\xFF' .or '\x01'-'\x09' .or '\x0B'-'\x0C';new_line_directive new_line .and optional_directive;new_line generic_new_line .emit '\n';generic_new_line carriage_return_line_feed .or line_feed_carriage_return .or '\n' .or '\r';carriage_return_line_feed '\r' .and '\n';line_feed_carriage_return '\n' .and '\r';optional_directive directive .emit ESCAPE_TOKEN .or .true;directive dir_define .emit TOKEN_DEFINE .or dir_undef .emit TOKEN_UNDEF .or dir_if .emit TOKEN_IF .or dir_ifdef .emit TOKEN_IF .emit 'd' .emit 'e' .emit 'f' .emit 'i' .emit 'n' .emit 'e' .emit 'd' .emit ' ' .or dir_ifndef .emit TOKEN_IF .emit '!' .emit 'd' .emit 'e' .emit 'f' .emit 'i' .emit 'n' .emit 'e' .emit 'd' .emit ' ' .or dir_else .emit TOKEN_ELSE .or dir_elif .emit TOKEN_ELIF .or dir_endif .emit TOKEN_ENDIF .or dir_ext .emit TOKEN_EXTENSION .or dir_line .emit TOKEN_LINE;dir_define optional_space .and '#' .and optional_space .and "define" .and symbol .and opt_parameters .and definition;dir_undef optional_space .and '#' .and optional_space .and "undef" .and symbol;dir_if optional_space .and '#' .and optional_space .and "if" .and expression;dir_ifdef optional_space .and '#' .and optional_space .and "ifdef" .and symbol;dir_ifndef optional_space .and '#' .and optional_space .and "ifndef" .and symbol;dir_else optional_space .and '#' .and optional_space .and "else";dir_elif optional_space .and '#' .and optional_space .and "elif" .and expression;dir_endif optional_space .and '#' .and optional_space .and "endif";dir_ext optional_space .and '#' .and optional_space .and "extension" .and space .and extension_name .and optional_space .and ':' .and optional_space .and extension_behavior;dir_line optional_space .and '#' .and optional_space .and "line" .and expression;symbol space .and symbol_character .emit * .and .loop symbol_character2 .emit * .and .true .emit '\0';opt_parameters parameters .or .true .emit PARAM_END;parameters '(' .and parameters_1 .and optional_space .and ')' .emit PARAM_END;parameters_1 parameters_2 .or .true;parameters_2 parameter .emit PARAM_PARAMETER .and .loop parameters_3;parameters_3 optional_space .and ',' .and parameter .emit PARAM_PARAMETER;parameter optional_space .and symbol_character .emit * .and .loop symbol_character2 .emit * .and .true .emit '\0';definition .loop definition_character .emit * .and .true .emit '\0';definition_character '\x0E'-'\xFF' .or '\x01'-'\x09' .or '\x0B'-'\x0C';expression expression_element .and .loop expression_element .and .true .emit '\0';expression_element expression_character .emit *;expression_character '\x0E'-'\xFF' .or '\x01'-'\x09' .or '\x0B'-'\x0C';extension_name symbol_character .emit * .and .loop symbol_character2 .emit * .and .true .emit '\0';extension_behavior "require" .emit BEHAVIOR_REQUIRE .or "enable" .emit BEHAVIOR_ENABLE .or "warn" .emit BEHAVIOR_WARN .or "disable" .emit BEHAVIOR_DISABLE;optional_space .loop single_space;space single_space .and .loop single_space;single_space ' ' .or '\t';source_token space .emit ' ' .or complex_token .or source_token_1;source_token_1 simple_token .emit ' ' .and .true .emit ' ';/* * All possible tokens. */complex_token identifier .or number;simple_token increment .or decrement .or lequal .or gequal .or equal .or nequal .or and .or xor .or or .or addto .or subtractfrom .or multiplyto .or divideto .or other;identifier identifier_char1 .emit * .and .loop identifier_char2 .emit *;identifier_char1 'a'-'z' .or 'A'-'Z' .or '_';identifier_char2 'a'-'z' .or 'A'-'Z' .or '0'-'9' .or '_';number float .or integer;digit_oct '0'-'7';digit_dec '0'-'9';digit_hex '0'-'9' .or 'A'-'F' .or 'a'-'f';float float_1 .or float_2;float_1 float_fractional_constant .and float_optional_exponent_part;float_2 float_digit_sequence .and float_exponent_part;float_fractional_constant float_fractional_constant_1 .or float_fractional_constant_2 .or float_fractional_constant_3;float_fractional_constant_1 float_digit_sequence .and '.' .emit '.' .and float_digit_sequence;float_fractional_constant_2 float_digit_sequence .and '.' .emit '.';float_fractional_constant_3 '.' .emit '.' .and float_digit_sequence;float_optional_exponent_part float_exponent_part .or .true;float_digit_sequence digit_dec .emit * .and .loop digit_dec .emit *;float_exponent_part float_exponent_part_1 .or float_exponent_part_2;float_exponent_part_1 'e' .emit 'e' .and float_optional_sign .and float_digit_sequence;float_exponent_part_2 'E' .emit 'E' .and float_optional_sign .and float_digit_sequence;float_optional_sign '+' .emit '+' .or '-' .emit '-' .or .true;integer integer_hex .or integer_oct .or integer_dec;integer_hex '0' .emit '0' .and integer_hex_1 .emit * .and digit_hex .emit * .and .loop digit_hex .emit *;integer_hex_1 'x' .or 'X';integer_oct '0' .emit '0' .and .loop digit_oct .emit *;integer_dec digit_dec .emit * .and .loop digit_dec .emit *;increment '+' .emit * .and '+' .emit *;decrement '-' .emit * .and '-' .emit *;lequal '<' .emit * .and '=' .emit *;gequal '>' .emit * .and '=' .emit *;equal '=' .emit * .and '=' .emit *;nequal '!' .emit * .and '=' .emit *;and '&' .emit * .and '&' .emit *;xor '^' .emit * .and '^' .emit *;or '|' .emit * .and '|' .emit *;addto '+' .emit * .and '=' .emit *;subtractfrom '-' .emit * .and '=' .emit *;multiplyto '*' .emit * .and '=' .emit *;divideto '/' .emit * .and '=' .emit *;/* * All characters except '\0' and '#'. */other '\x24'-'\xFF' .emit * .or '\x01'-'\x22' .emit *;symbol_character 'A'-'Z' .or 'a'-'z' .or '_';symbol_character2 'A'-'Z' .or 'a'-'z' .or '0'-'9' .or '_';.string string_lexer;string_lexer lex_first_identifier_character .and .loop lex_next_identifier_character;lex_first_identifier_character 'a'-'z' .or 'A'-'Z' .or '_';lex_next_identifier_character 'a'-'z' .or 'A'-'Z' .or '0'-'9' .or '_';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -