diff options
Diffstat (limited to 'dimension/grammar.epilogue')
-rw-r--r-- | dimension/grammar.epilogue | 284 |
1 files changed, 0 insertions, 284 deletions
diff --git a/dimension/grammar.epilogue b/dimension/grammar.epilogue deleted file mode 100644 index 9b2fa29..0000000 --- a/dimension/grammar.epilogue +++ /dev/null @@ -1,284 +0,0 @@ -#line 2 "grammar.epilogue" - -/************************************************************************* - * Copyright (C) 2010 Tavian Barnes <tavianator@tavianator.com> * - * * - * This file is part of Dimension. * - * * - * Dimension is free software; you can redistribute it and/or modify it * - * under the terms of the GNU General Public License as published by the * - * Free Software Foundation; either version 3 of the License, or (at * - * your option) any later version. * - * * - * Dimension is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see <http://www.gnu.org/licenses/>. * - *************************************************************************/ - -dmnsn_astree * -dmnsn_parse(FILE *file, dmnsn_symbol_table *symtable) -{ - const char *filename; - dmnsn_astnode *fnode = dmnsn_find_symbol(symtable, "$file"); - if (fnode && fnode->type == DMNSN_AST_STRING) { - filename = fnode->ptr; - } else { - filename = "<>"; - dmnsn_declare_symbol(symtable, "$file", dmnsn_new_ast_string(filename)); - } - - void *scanner; - dmnsn_astree *astree = dmnsn_new_array(sizeof(dmnsn_astnode)); - - dmnsn_yylex_init(&scanner); - dmnsn_yyset_in(file, scanner); - dmnsn_yyset_extra(NULL, scanner); - - if (yyparse(filename, scanner, astree, symtable) != 0) { - dmnsn_delete_astree(astree); - astree = NULL; - } - - dmnsn_yylex_cleanup(scanner); - dmnsn_yylex_destroy(scanner); - return astree; -} - -dmnsn_astree * -dmnsn_parse_string(const char *str, dmnsn_symbol_table *symtable) -{ - const char *filename; - dmnsn_astnode *fnode = dmnsn_find_symbol(symtable, "$file"); - if (fnode && fnode->type == DMNSN_AST_STRING) { - filename = fnode->ptr; - } else { - filename = "<string>"; - dmnsn_declare_symbol(symtable, "$file", dmnsn_new_ast_string(filename)); - } - - void *scanner; - dmnsn_astree *astree = dmnsn_new_array(sizeof(dmnsn_astnode)); - - dmnsn_yylex_init(&scanner); - dmnsn_yyset_extra(NULL, scanner); - - void *buffer = dmnsn_yy_make_string_buffer(str, scanner); - dmnsn_yy_push_buffer(buffer, scanner); - - if (yyparse(filename, scanner, astree, symtable) != 0) { - dmnsn_delete_astree(astree); - astree = NULL; - } - - dmnsn_yylex_cleanup(scanner); - dmnsn_yylex_destroy(scanner); - return astree; -} - -const char * -dmnsn_token_string(dmnsn_token_type token_type) -{ -#define TOKEN_SIZE 255 - static char token[TOKEN_SIZE + 1]; - - unsigned int i = YYTRANSLATE(token_type); - if (i > YYNTOKENS) { - fprintf(stderr, "WARNING: unrecognised token %d.\n", (int)token_type); - return "unrecognized-token"; - } - - /* Trim the quotation marks */ - - if (strlen(yytname[i]) - 1 >= TOKEN_SIZE) { - fprintf(stderr, "WARNING: name of token %d too long.\n", (int)token_type); - return "unrepresentable-token"; - } - - strcpy(token, yytname[i] + 1); - token[strlen(token) - 1] = '\0'; - - return token; -#undef TOKEN_SIZE -} - -const char * -dmnsn_astnode_string(dmnsn_astnode_type astnode_type) -{ - switch (astnode_type) { - /* Macro to shorten this switch */ -#define dmnsn_astnode_map(type, str) \ - case type: \ - return str; - - dmnsn_astnode_map(DMNSN_AST_NONE, "none"); - - dmnsn_astnode_map(DMNSN_AST_GLOBAL_SETTINGS, "global_settings"); - dmnsn_astnode_map(DMNSN_AST_ADC_BAILOUT, "adc_bailout"); - dmnsn_astnode_map(DMNSN_AST_ASSUMED_GAMMA, "assumed_gamma"); - dmnsn_astnode_map(DMNSN_AST_CHARSET, "charset"); - dmnsn_astnode_map(DMNSN_AST_ASCII, "ascii"); - dmnsn_astnode_map(DMNSN_AST_UTF8, "utf8"); - dmnsn_astnode_map(DMNSN_AST_SYS, "sys"); - dmnsn_astnode_map(DMNSN_AST_MAX_INTERSECTIONS, "max_intersections"); - dmnsn_astnode_map(DMNSN_AST_MAX_TRACE_LEVEL, "max_trace_level"); - - dmnsn_astnode_map(DMNSN_AST_BACKGROUND, "background"); - dmnsn_astnode_map(DMNSN_AST_SKY_SPHERE, "sky_sphere"); - - dmnsn_astnode_map(DMNSN_AST_CAMERA, "camera"); - dmnsn_astnode_map(DMNSN_AST_PERSPECTIVE, "perspective"); - dmnsn_astnode_map(DMNSN_AST_LOCATION, "location"); - dmnsn_astnode_map(DMNSN_AST_RIGHT, "right"); - dmnsn_astnode_map(DMNSN_AST_UP, "up"); - dmnsn_astnode_map(DMNSN_AST_SKY, "sky"); - dmnsn_astnode_map(DMNSN_AST_ANGLE, "angle"); - dmnsn_astnode_map(DMNSN_AST_LOOK_AT, "look_at"); - dmnsn_astnode_map(DMNSN_AST_DIRECTION, "direction"); - - dmnsn_astnode_map(DMNSN_AST_OBJECT, "object"); - dmnsn_astnode_map(DMNSN_AST_BOX, "box"); - dmnsn_astnode_map(DMNSN_AST_CONE, "cone"); - dmnsn_astnode_map(DMNSN_AST_CYLINDER, "cylinder"); - dmnsn_astnode_map(DMNSN_AST_DIFFERENCE, "difference"); - dmnsn_astnode_map(DMNSN_AST_INTERSECTION, "intersection"); - dmnsn_astnode_map(DMNSN_AST_LIGHT_SOURCE, "light_source"); - dmnsn_astnode_map(DMNSN_AST_MERGE, "merge"); - dmnsn_astnode_map(DMNSN_AST_PLANE, "plane"); - dmnsn_astnode_map(DMNSN_AST_SPHERE, "sphere"); - dmnsn_astnode_map(DMNSN_AST_TORUS, "torus"); - dmnsn_astnode_map(DMNSN_AST_UNION, "union"); - - dmnsn_astnode_map(DMNSN_AST_OBJECT_MODIFIERS, "object-modifiers"); - dmnsn_astnode_map(DMNSN_AST_STURM, "sturm"); - - dmnsn_astnode_map(DMNSN_AST_PATTERN, "pattern"); - dmnsn_astnode_map(DMNSN_AST_CHECKER, "checker"); - dmnsn_astnode_map(DMNSN_AST_GRADIENT, "gradient"); - - dmnsn_astnode_map(DMNSN_AST_TEXTURE, "texture"); - - dmnsn_astnode_map(DMNSN_AST_PIGMENT, "pigment"); - dmnsn_astnode_map(DMNSN_AST_PIGMENT_MODIFIERS, "pigment-modifiers"); - dmnsn_astnode_map(DMNSN_AST_COLOR_LIST, "color-list"); - dmnsn_astnode_map(DMNSN_AST_COLOR_MAP, "color_map"); - dmnsn_astnode_map(DMNSN_AST_COLOR_MAP_ENTRY, "color_map-entry"); - dmnsn_astnode_map(DMNSN_AST_PIGMENT_LIST, "pigment-list"); - dmnsn_astnode_map(DMNSN_AST_PIGMENT_MAP, "pigment_map"); - dmnsn_astnode_map(DMNSN_AST_PIGMENT_MAP_ENTRY, "pigment_map-entry"); - dmnsn_astnode_map(DMNSN_AST_QUICK_COLOR, "quick_color"); - dmnsn_astnode_map(DMNSN_AST_IMAGE_MAP, "image_map"); - dmnsn_astnode_map(DMNSN_AST_PNG, "png"); - - dmnsn_astnode_map(DMNSN_AST_FINISH, "finish"); - dmnsn_astnode_map(DMNSN_AST_AMBIENT, "ambient"); - dmnsn_astnode_map(DMNSN_AST_DIFFUSE, "diffuse"); - dmnsn_astnode_map(DMNSN_AST_PHONG, "phong"); - dmnsn_astnode_map(DMNSN_AST_PHONG_SIZE, "phong_size"); - - dmnsn_astnode_map(DMNSN_AST_REFLECTION, "reflection"); - dmnsn_astnode_map(DMNSN_AST_REFLECTION_ITEMS, "reflection-items"); - dmnsn_astnode_map(DMNSN_AST_FALLOFF, "falloff"); - - dmnsn_astnode_map(DMNSN_AST_INTERIOR, "interior"); - dmnsn_astnode_map(DMNSN_AST_IOR, "ior"); - - dmnsn_astnode_map(DMNSN_AST_TRANSFORMATION, "transformation"); - dmnsn_astnode_map(DMNSN_AST_ROTATION, "rotation"); - dmnsn_astnode_map(DMNSN_AST_SCALE, "scale"); - dmnsn_astnode_map(DMNSN_AST_TRANSLATION, "translation"); - dmnsn_astnode_map(DMNSN_AST_MATRIX, "matrix"); - dmnsn_astnode_map(DMNSN_AST_INVERSE, "inverse"); - - dmnsn_astnode_map(DMNSN_AST_FLOAT, "float"); - dmnsn_astnode_map(DMNSN_AST_INTEGER, "integer"); - - dmnsn_astnode_map(DMNSN_AST_VECTOR, "vector"); - - dmnsn_astnode_map(DMNSN_AST_ADD, "+"); - dmnsn_astnode_map(DMNSN_AST_SUB, "-"); - dmnsn_astnode_map(DMNSN_AST_MUL, "*"); - dmnsn_astnode_map(DMNSN_AST_DIV, "/"); - - dmnsn_astnode_map(DMNSN_AST_EQUAL, "=" ); - dmnsn_astnode_map(DMNSN_AST_NOT_EQUAL, "!="); - dmnsn_astnode_map(DMNSN_AST_LESS, "<" ); - dmnsn_astnode_map(DMNSN_AST_LESS_EQUAL, "<="); - dmnsn_astnode_map(DMNSN_AST_GREATER, ">" ); - dmnsn_astnode_map(DMNSN_AST_GREATER_EQUAL, ">="); - dmnsn_astnode_map(DMNSN_AST_AND, "&" ); - dmnsn_astnode_map(DMNSN_AST_OR, "|" ); - dmnsn_astnode_map(DMNSN_AST_NOT, "!" ); - dmnsn_astnode_map(DMNSN_AST_TERNARY, "?:"); - - dmnsn_astnode_map(DMNSN_AST_ABS, "abs"); - dmnsn_astnode_map(DMNSN_AST_ACOS, "acos"); - dmnsn_astnode_map(DMNSN_AST_ACOSH, "acosh"); - dmnsn_astnode_map(DMNSN_AST_ASC, "asc"); - dmnsn_astnode_map(DMNSN_AST_ASIN, "asin"); - dmnsn_astnode_map(DMNSN_AST_ASINH, "asinh"); - dmnsn_astnode_map(DMNSN_AST_ATAN, "atan"); - dmnsn_astnode_map(DMNSN_AST_ATAN2, "atan2"); - dmnsn_astnode_map(DMNSN_AST_ATANH, "atanh"); - dmnsn_astnode_map(DMNSN_AST_CEIL, "ceil"); - dmnsn_astnode_map(DMNSN_AST_COS, "cos"); - dmnsn_astnode_map(DMNSN_AST_COSH, "cosh"); - dmnsn_astnode_map(DMNSN_AST_DEGREES, "degrees"); - dmnsn_astnode_map(DMNSN_AST_INT_DIV, "div"); - dmnsn_astnode_map(DMNSN_AST_EXP, "exp"); - dmnsn_astnode_map(DMNSN_AST_FLOOR, "floor"); - dmnsn_astnode_map(DMNSN_AST_INT, "int"); - dmnsn_astnode_map(DMNSN_AST_LN, "ln"); - dmnsn_astnode_map(DMNSN_AST_LOG, "log"); - dmnsn_astnode_map(DMNSN_AST_MAX, "max"); - dmnsn_astnode_map(DMNSN_AST_MIN, "min"); - dmnsn_astnode_map(DMNSN_AST_MOD, "mod"); - dmnsn_astnode_map(DMNSN_AST_POW, "pow"); - dmnsn_astnode_map(DMNSN_AST_RADIANS, "radians"); - dmnsn_astnode_map(DMNSN_AST_SIN, "sin"); - dmnsn_astnode_map(DMNSN_AST_SINH, "sinh"); - dmnsn_astnode_map(DMNSN_AST_SQRT, "sqrt"); - dmnsn_astnode_map(DMNSN_AST_STRCMP, "strcmp"); - dmnsn_astnode_map(DMNSN_AST_STRLEN, "strlen"); - dmnsn_astnode_map(DMNSN_AST_TAN, "tan"); - dmnsn_astnode_map(DMNSN_AST_TANH, "tanh"); - dmnsn_astnode_map(DMNSN_AST_VAL, "val"); - dmnsn_astnode_map(DMNSN_AST_VAXIS_ROTATE, "vaxis_rotate"); - dmnsn_astnode_map(DMNSN_AST_VCROSS, "vcross"); - dmnsn_astnode_map(DMNSN_AST_VDOT, "vdot"); - dmnsn_astnode_map(DMNSN_AST_VLENGTH, "vlength"); - dmnsn_astnode_map(DMNSN_AST_VNORMALIZE, "vnormalize"); - dmnsn_astnode_map(DMNSN_AST_VROTATE, "vrotate"); - - dmnsn_astnode_map(DMNSN_AST_PI, "pi"); - dmnsn_astnode_map(DMNSN_AST_TRUE, "true"); - dmnsn_astnode_map(DMNSN_AST_FALSE, "false"); - dmnsn_astnode_map(DMNSN_AST_X, "x"); - dmnsn_astnode_map(DMNSN_AST_Y, "y"); - dmnsn_astnode_map(DMNSN_AST_Z, "z"); - dmnsn_astnode_map(DMNSN_AST_T, "t"); - - dmnsn_astnode_map(DMNSN_AST_NEGATE, "-"); - dmnsn_astnode_map(DMNSN_AST_DOT_X, ".x"); - dmnsn_astnode_map(DMNSN_AST_DOT_Y, ".y"); - dmnsn_astnode_map(DMNSN_AST_DOT_Z, ".z"); - dmnsn_astnode_map(DMNSN_AST_DOT_T, ".t"); - dmnsn_astnode_map(DMNSN_AST_DOT_TRANSMIT, ".transmit"); - - dmnsn_astnode_map(DMNSN_AST_IDENTIFIER, "identifier"); - - dmnsn_astnode_map(DMNSN_AST_STRING, "string"); - - dmnsn_astnode_map(DMNSN_AST_ARRAY, "array"); - - dmnsn_astnode_map(DMNSN_AST_MACRO, "macro"); - - default: - fprintf(stderr, "WARNING: unrecognised astnode type %d.\n", - (int)astnode_type); - return "unrecognized-astnode"; - } -} |