slang_pp_expression.syn
来自「Mesa is an open-source implementation of」· SYN 代码 · 共 266 行
SYN
266 行
/* * 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_expression.syn * slang preprocessor expression parser * \author Michal Krol *//* * Parses one or two (optional) expressions on literal integer constants. Those expressions come * from #if #elif and #line directives. The preprocessor already parsed those directives and * expanded the expression (expressions). All occurences of the operator "defined" are already * replaced with either "0" or "1" literals. */.syntax expression;/* * Those separate individual expressions. * For #if/#elif case it is: EXP_EXPRESSION ... EXP_END * For #line case it may be: EXP_EXPRESSION ... EXP_EXPRESSION ... EXP_END */.emtcode EXP_END 0.emtcode EXP_EXPRESSION 1.emtcode OP_END 0.emtcode OP_PUSHINT 1.emtcode OP_LOGICALOR 2.emtcode OP_LOGICALAND 3.emtcode OP_OR 4.emtcode OP_XOR 5.emtcode OP_AND 6.emtcode OP_EQUAL 7.emtcode OP_NOTEQUAL 8.emtcode OP_LESSEQUAL 9.emtcode OP_GREATEREQUAL 10.emtcode OP_LESS 11.emtcode OP_GREATER 12.emtcode OP_LEFTSHIFT 13.emtcode OP_RIGHTSHIFT 14.emtcode OP_ADD 15.emtcode OP_SUBTRACT 16.emtcode OP_MULTIPLY 17.emtcode OP_DIVIDE 18.emtcode OP_MODULUS 19.emtcode OP_PLUS 20.emtcode OP_MINUS 21.emtcode OP_NEGATE 22.emtcode OP_COMPLEMENT 23expression first_expression .and optional_second_expression .and optional_space .and '\0' .emit EXP_END;first_expression optional_space .and logical_or_expression .emit EXP_EXPRESSION .and .true .emit OP_END;optional_second_expression second_expression .or .true;second_expression space .and logical_or_expression .emit EXP_EXPRESSION .and .true .emit OP_END;logical_or_expression logical_and_expression .and .loop logical_or_expression_1;logical_or_expression_1 barbar .and logical_and_expression .and .true .emit OP_LOGICALOR;logical_and_expression or_expression .and .loop logical_and_expression_1;logical_and_expression_1 ampersandampersand .and or_expression .and .true .emit OP_LOGICALAND;or_expression xor_expression .and .loop or_expression_1;or_expression_1 bar .and xor_expression .and .true .emit OP_OR;xor_expression and_expression .and .loop xor_expression_1;xor_expression_1 caret .and and_expression .and .true .emit OP_XOR;and_expression equality_expression .and .loop and_expression_1;and_expression_1 ampersand .and equality_expression .and .true .emit OP_AND;equality_expression relational_expression .and .loop equality_expression_1;equality_expression_1 equality_expression_2 .or equality_expression_3;equality_expression_2 equalsequals .and relational_expression .and .true .emit OP_EQUAL;equality_expression_3 bangequals .and relational_expression .and .true .emit OP_NOTEQUAL;relational_expression shift_expression .and .loop relational_expression_1;relational_expression_1 relational_expression_2 .or relational_expression_3 .or relational_expression_4 .or relational_expression_5;relational_expression_2 lessequals .and shift_expression .and .true .emit OP_LESSEQUAL;relational_expression_3 greaterequals .and shift_expression .and .true .emit OP_GREATEREQUAL;relational_expression_4 less .and shift_expression .and .true .emit OP_LESS;relational_expression_5 greater .and shift_expression .and .true .emit OP_GREATER;shift_expression additive_expression .and .loop shift_expression_1;shift_expression_1 shift_expression_2 .or shift_expression_3;shift_expression_2 lessless .and additive_expression .and .true .emit OP_LEFTSHIFT;shift_expression_3 greatergreater .and additive_expression .and .true .emit OP_RIGHTSHIFT;additive_expression multiplicative_expression .and .loop additive_expression_1;additive_expression_1 additive_expression_2 .or additive_expression_3;additive_expression_2 plus .and multiplicative_expression .and .true .emit OP_ADD;additive_expression_3 dash .and multiplicative_expression .and .true .emit OP_SUBTRACT;multiplicative_expression unary_expression .and .loop multiplicative_expression_1;multiplicative_expression_1 multiplicative_expression_2 .or multiplicative_expression_3 .or multiplicative_expression_4;multiplicative_expression_2 star .and unary_expression .and .true .emit OP_MULTIPLY;multiplicative_expression_3 slash .and unary_expression .and .true .emit OP_DIVIDE;multiplicative_expression_4 percent .and unary_expression .and .true .emit OP_MODULUS;unary_expression primary_expression .or unary_expression_1 .or unary_expression_2 .or unary_expression_3 .or unary_expression_4;unary_expression_1 plus .and unary_expression .and .true .emit OP_PLUS;unary_expression_2 dash .and unary_expression .and .true .emit OP_MINUS;unary_expression_3 bang .and unary_expression .and .true .emit OP_NEGATE;unary_expression_4 tilda .and unary_expression .and .true .emit OP_COMPLEMENT;primary_expression intconstant .or primary_expression_1;primary_expression_1 lparen .and logical_or_expression .and rparen;intconstant integer .emit OP_PUSHINT;integer integer_dec;integer_dec digit_dec .emit 10 .emit * .and .loop digit_dec .emit * .and .true .emit '\0';digit_dec '0'-'9';optional_space .loop single_space;space single_space .and .loop single_space;single_space ' ' .or '\t';ampersand optional_space .and '&' .and optional_space;ampersandampersand optional_space .and '&' .and '&' .and optional_space;bang optional_space .and '!' .and optional_space;bangequals optional_space .and '!' .and '=' .and optional_space;bar optional_space .and '|' .and optional_space;barbar optional_space .and '|' .and '|' .and optional_space;caret optional_space .and '^' .and optional_space;dash optional_space .and '-' .and optional_space;equalsequals optional_space .and '=' .and '=' .and optional_space;greater optional_space .and '>' .and optional_space;greaterequals optional_space .and '>' .and '=' .and optional_space;greatergreater optional_space .and '>' .and '>' .and optional_space;less optional_space .and '<' .and optional_space;lessequals optional_space .and '<' .and '=' .and optional_space;lessless optional_space .and '<' .and '<' .and optional_space;lparen optional_space .and '(' .and optional_space;percent optional_space .and '%' .and optional_space;plus optional_space .and '+' .and optional_space;rparen optional_space .and ')' .and optional_space;slash optional_space .and '/' .and optional_space;star optional_space .and '*' .and optional_space;tilda optional_space .and '~' .and optional_space;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?