From 1e723abc27bdc2ad675bce79467a7308c2966861 Mon Sep 17 00:00:00 2001 From: marha Date: Tue, 22 Dec 2009 18:34:14 +0000 Subject: Forgotten files in previous commit --- mesalib/src/mesa/shader/grammar/grammar.syn | 567 ++++++++++++++++++++++++++++ 1 file changed, 567 insertions(+) create mode 100644 mesalib/src/mesa/shader/grammar/grammar.syn (limited to 'mesalib/src/mesa/shader/grammar/grammar.syn') diff --git a/mesalib/src/mesa/shader/grammar/grammar.syn b/mesalib/src/mesa/shader/grammar/grammar.syn new file mode 100644 index 000000000..5d99f65bf --- /dev/null +++ b/mesalib/src/mesa/shader/grammar/grammar.syn @@ -0,0 +1,567 @@ +/* + * Mesa 3-D graphics library + * Version: 6.2 + * + * Copyright (C) 1999-2004 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 grammar.syn + * syntax of .syn script - used to validate other syntax files + * \author Michal Krol + */ + +.syntax grammar; + +/* declaration */ +.emtcode DECLARATION_END 0 +.emtcode DECLARATION_EMITCODE 1 +.emtcode DECLARATION_ERRORTEXT 2 +.emtcode DECLARATION_REGBYTE 3 +.emtcode DECLARATION_LEXER 4 +.emtcode DECLARATION_RULE 5 + +/* specifier */ +.emtcode SPECIFIER_END 0 +.emtcode SPECIFIER_AND_TAG 1 +.emtcode SPECIFIER_OR_TAG 2 +.emtcode SPECIFIER_CHARACTER_RANGE 3 +.emtcode SPECIFIER_CHARACTER 4 +.emtcode SPECIFIER_STRING 5 +.emtcode SPECIFIER_IDENTIFIER 6 +.emtcode SPECIFIER_TRUE 7 +.emtcode SPECIFIER_FALSE 8 +.emtcode SPECIFIER_DEBUG 9 + +/* identifier */ +.emtcode IDENTIFIER_SIMPLE 0 +.emtcode IDENTIFIER_LOOP 1 + +/* error */ +.emtcode ERROR_NOT_PRESENT 0 +.emtcode ERROR_PRESENT 1 + +/* emit */ +.emtcode EMIT_NULL 0 +.emtcode EMIT_INTEGER 1 +.emtcode EMIT_IDENTIFIER 2 +.emtcode EMIT_CHARACTER 3 +.emtcode EMIT_LAST_CHARACTER 4 +.emtcode EMIT_CURRENT_POSITION 5 + +.errtext INVALID_GRAMMAR "internal error 2001: invalid grammar script" +.errtext SYNTAX_EXPECTED "internal error 2002: '.syntax' keyword expected" +.errtext IDENTIFIER_EXPECTED "internal error 2003: identifier expected" +.errtext MISSING_SEMICOLON "internal error 2004: missing ';'" +.errtext INTEGER_EXPECTED "internal error 2005: integer value expected" +.errtext STRING_EXPECTED "internal error 2006: string expected" + +/* + ::= ".syntax" ";" +*/ +grammar + grammar_1 .error INVALID_GRAMMAR; +grammar_1 + optional_space .and ".syntax" .error SYNTAX_EXPECTED .and space .and identifier .and + semicolon .and declaration_list .and optional_space .and '\0' .emit DECLARATION_END; + +/* + ::= + | "" +*/ +optional_space + space .or .true; + +/* + ::= * +*/ +space + single_space .and .loop single_space; + +/* + ::= + | +*/ +single_space + white_char .or comment_block; + +/* + ::= " " + | "\t" + | "\n" + | "\r" +*/ +white_char + ' ' .or '\t' .or '\n' .or '\r'; + +/* + ::= "/" "*" +*/ +comment_block + '/' .and '*' .and comment_rest; + +/* + ::= * + | * "*" +*/ +comment_rest + .loop comment_char_no_star .and comment_rest_1; +comment_rest_1 + comment_end .or comment_rest_2; +comment_rest_2 + '*' .and comment_rest; + +/* + ::= All ASCII characters except "*" and "\0" +*/ +comment_char_no_star + '\x2B'-'\xFF' .or '\x01'-'\x29'; + +/* + ::= "*" "/" +*/ +comment_end + '*' .and '/'; + +/* + ::= +*/ +identifier + identifier_ne .error IDENTIFIER_EXPECTED; + +/* + ::= * +*/ +identifier_ne + first_idchar .emit * .and .loop follow_idchar .emit * .and .true .emit '\0'; + +/* + ::= "a"-"z" + | "A"-"Z" + | "_" +*/ +first_idchar + 'a'-'z' .or 'A'-'Z' .or '_'; + +/* + ::= + | +*/ +follow_idchar + first_idchar .or digit_dec; + +/* + ::= "0"-"9" +*/ +digit_dec + '0'-'9'; + +/* + ::= ";" +*/ +semicolon + optional_space .and ';' .error MISSING_SEMICOLON .and optional_space; + +/* + ::= + | +*/ +declaration_list + declaration .and .loop declaration; + +/* + ::= + | + | + | +*/ +declaration + emitcode_definition .emit DECLARATION_EMITCODE .or + errortext_definition .emit DECLARATION_ERRORTEXT .or + regbyte_definition .emit DECLARATION_REGBYTE .or + lexer_definition .emit DECLARATION_LEXER .or + rule_definition .emit DECLARATION_RULE; + +/* + ::= ".emtcode" +*/ +emitcode_definition + ".emtcode" .and space .and identifier .and space .and integer .and space_or_null; + +/* + ::= +*/ +integer + integer_ne .error INTEGER_EXPECTED; + +/* + ::= + | +*/ +integer_ne + hex_integer .emit 0x10 .or dec_integer .emit 10; + +/* + :: * +*/ +hex_integer + hex_prefix .and digit_hex .emit * .and .loop digit_hex .emit * .and .true .emit '\0'; + +/* + ::= "0x" + | "0X" +*/ +hex_prefix + '0' .and hex_prefix_1; +hex_prefix_1 + 'x' .or 'X'; + +/* + ::= "0"-"9" + | "a"-"f" + | "A"-"F" +*/ +digit_hex + '0'-'9' .or 'a'-'f' .or 'A'-'F'; + +/* + :: * +*/ +dec_integer + digit_dec .emit * .and .loop digit_dec .emit * .and .true .emit '\0'; + +/* + ::= + | "\0" +*/ +space_or_null + space .or '\0'; + +/* + ::= ".errtext" +*/ +errortext_definition + ".errtext" .and space .and identifier .and space .and string .and space_or_null; + +/* + ::= +*/ +string + string_ne .error STRING_EXPECTED; + +/* + ::= "\"" "\"" +*/ +string_ne + '"' .and .loop string_char_double_quotes .and '"' .emit '\0'; + +/* + ::= + | + | "\'" +*/ +string_char_double_quotes + escape_sequence .or string_char .emit * .or '\'' .emit *; + +/* + ::= All ASCII characters except "\'", "\"", "\n", "\r", + "\0" and "\\" +*/ +string_char + '\x5D'-'\xFF' .or '\x28'-'\x5B' .or '\x23'-'\x26' .or '\x0E'-'\x21' .or '\x0B'-'\x0C' .or + '\x01'-'\x09'; + +/* + ::= "\\" +*/ +escape_sequence + '\\' .emit * .and escape_code; + +/* + ::= + | + | +*/ +escape_code + simple_escape_code .emit * .or hex_escape_code .or oct_escape_code; + +/* + ::= "\'" + | "\"" + | "?" + | "\\" + | "a" + | "b" + | "f" + | "n" + | "r" + | "t" + | "v" +*/ +simple_escape_code + '\'' .or '"' .or '?' .or '\\' .or 'a' .or 'b' .or 'f' .or 'n' .or 'r' .or 't' .or 'v'; + +/* + ::= "x" * +*/ +hex_escape_code + 'x' .emit * .and digit_hex .emit * .and .loop digit_hex .emit *; + +/* + ::= +*/ +oct_escape_code + digit_oct .emit * .and optional_digit_oct .and optional_digit_oct; + +/* + ::= "0"-"7" +*/ +digit_oct + '0'-'7'; + +/* + ::= + | "" +*/ +optional_digit_oct + digit_oct .emit * .or .true; + +/* + ::= ".regbyte" +*/ +regbyte_definition + ".regbyte" .and space .and identifier .and space .and integer .and space_or_null; + +/* + ::= ".string" ";" +*/ +lexer_definition + ".string" .and space .and identifier .and semicolon; + +/* + ::= +*/ +rule_definition + identifier_ne .and space .and definition; + +/* + ::= ";" +*/ +definition + specifier .and optional_specifiers_and_or .and semicolon .emit SPECIFIER_END; + +/* + ::= + | + | "" +*/ +optional_specifiers_and_or + and_specifiers .emit SPECIFIER_AND_TAG .or or_specifiers .emit SPECIFIER_OR_TAG .or .true; + +/* + ::= +*/ +specifier + specifier_condition .and optional_space .and specifier_rule; + +/* + ::= ".if" "(" ")" +*/ +specifier_condition + specifier_condition_1 .or .true; +specifier_condition_1 + ".if" .and optional_space .and '(' .and optional_space .and left_operand .and operator .and + right_operand .and optional_space .and ')'; + +/* + ::= +*/ +left_operand + identifier; + +/* + ::= "!=" + | "==" +*/ +operator + operator_1 .or operator_2; +operator_1 + optional_space .and '!' .and '=' .and optional_space; +operator_2 + optional_space .and '=' .and '=' .and optional_space; + +/* + ::= +*/ +right_operand + integer; + +/* + ::= * + | * + | * + | ".true" * + | ".false" * + | ".debug" * + | * +*/ +specifier_rule + specifier_rule_1 .and optional_error .and .loop emit .and .true .emit EMIT_NULL; +specifier_rule_1 + character_range .emit SPECIFIER_CHARACTER_RANGE .or + character .emit SPECIFIER_CHARACTER .or + string_ne .emit SPECIFIER_STRING .or + ".true" .emit SPECIFIER_TRUE .or + ".false" .emit SPECIFIER_FALSE .or + ".debug" .emit SPECIFIER_DEBUG .or + advanced_identifier .emit SPECIFIER_IDENTIFIER; + +/* + ::= "\'" ::= + | + | "\"" +*/ +string_char_single_quotes + escape_sequence .or string_char .emit * .or '"' .emit *; + +/* + ::= "-" +*/ +character_range + character .and optional_space .and '-' .and optional_space .and character; + +/* + ::= +*/ +advanced_identifier + optional_loop .and identifier; + +/* + ::= ".loop" + | "" +*/ +optional_loop + optional_loop_1 .emit IDENTIFIER_LOOP .or .true .emit IDENTIFIER_SIMPLE; +optional_loop_1 + ".loop" .and space; + +/* + ::= + | "" +*/ +optional_error + error .emit ERROR_PRESENT .or .true .emit ERROR_NOT_PRESENT; + +/* + :: ".error" +*/ +error + space .and ".error" .and space .and identifier; + +/* + ::= + | +*/ +emit + emit_output .or emit_regbyte; + +/* + ::= ".emit" +*/ +emit_output + space .and ".emit" .and space .and emit_param; + +/* + ::= + | + | + | "*" + | "$" +*/ +emit_param + integer_ne .emit EMIT_INTEGER .or + identifier_ne .emit EMIT_IDENTIFIER .or + character .emit EMIT_CHARACTER .or + '*' .emit EMIT_LAST_CHARACTER .or + '$' .emit EMIT_CURRENT_POSITION; + +/* + ::= ".load" +*/ +emit_regbyte + space .and ".load" .and space .and identifier .and space .and emit_param; + +/* + ::= * +*/ +and_specifiers + and_specifier .and .loop and_specifier; + +/* + ::= * +*/ +or_specifiers + or_specifier .and .loop or_specifier; + +/* + ::= ".and" +*/ +and_specifier + space .and ".and" .and space .and specifier; + +/* + ::= ".or" +*/ +or_specifier + space .and ".or" .and space .and specifier; + + +.string __string_filter; + +/* + <__string_filter> ::= <__first_identifier_char> <__next_identifier_char>* +*/ +__string_filter + __first_identifier_char .and .loop __next_identifier_char; + +/* + <__first_identifier_char> ::= "a"-"z" + | "A"-"Z" + | "_" + | "." +*/ +__first_identifier_char + 'a'-'z' .or 'A'-'Z' .or '_' .or '.'; + +/* + <__next_identifier_char> ::= "a"-"z" + | "A"-"Z" + | "_" + | "0"-"9" +*/ +__next_identifier_char + 'a'-'z' .or 'A'-'Z' .or '_' .or '0'-'9'; + -- cgit v1.2.3