/************************************************************************* * Copyright (C) 2009 Tavian Barnes * * * * 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 . * *************************************************************************/ #ifndef TOKENIZE_H #define TOKENIZE_H #include "../libdimension/dimension.h" typedef enum { /* Punctuation */ DMNSN_T_LBRACE, /* { */ DMNSN_T_RBRACE, /* } */ DMNSN_T_LPAREN, /* ( */ DMNSN_T_RPAREN, /* ) */ DMNSN_T_LBRACKET, /* [ */ DMNSN_T_RBRACKET, /* ] */ DMNSN_T_PLUS, /* + */ DMNSN_T_MINUS, /* - */ DMNSN_T_STAR, /* * */ DMNSN_T_SLASH, /* / */ DMNSN_T_COMMA, /* , */ DMNSN_T_SEMICOLON, /* ; */ DMNSN_T_QUESTION, /* ? */ DMNSN_T_COLON, /* : */ DMNSN_T_AND, /* & */ DMNSN_T_DOT, /* . */ DMNSN_T_PIPE, /* | */ DMNSN_T_LESS, /* < */ DMNSN_T_GREATER, /* > */ DMNSN_T_BANG, /* ! */ DMNSN_T_EQUALS, /* = */ DMNSN_T_LESS_EQUAL, /* <= */ DMNSN_T_GREATER_EQUAL, /* >= */ DMNSN_T_NOT_EQUAL, /* != */ /* Numeric values */ DMNSN_T_INTEGER, DMNSN_T_FLOAT, /* Keywords */ DMNSN_T_AA_LEVEL, DMNSN_T_AA_THRESHOLD, DMNSN_T_ABS, DMNSN_T_ABSORPTION, DMNSN_T_ACCURACY, DMNSN_T_ACOS, DMNSN_T_ACOSH, DMNSN_T_ADAPTIVE, DMNSN_T_ADC_BAILOUT, DMNSN_T_AGATE, DMNSN_T_AGATE_TURB, DMNSN_T_ALL, DMNSN_T_ALL_INTERSECTIONS, DMNSN_T_ALPHA, DMNSN_T_ALTITUDE, DMNSN_T_ALWAYS_SAMPLE, DMNSN_T_AMBIENT, DMNSN_T_AMBIENT_LIGHT, DMNSN_T_ANGLE, DMNSN_T_APERTURE, DMNSN_T_APPEND, DMNSN_T_ARC_ANGLE, DMNSN_T_AREA_LIGHT, DMNSN_T_ARRAY, DMNSN_T_ASC, DMNSN_T_ASCII, DMNSN_T_ASIN, DMNSN_T_ASINH, DMNSN_T_ASSUMED_GAMMA, DMNSN_T_ATAN, DMNSN_T_ATAN2, DMNSN_T_ATANH, DMNSN_T_AUTOSTOP, DMNSN_T_AVERAGE, DMNSN_T_B_SPLINE, DMNSN_T_BACKGROUND, DMNSN_T_BEZIER_SPLINE, DMNSN_T_BICUBIC_PATCH, DMNSN_T_BLACK_HOLE, DMNSN_T_BLOB, DMNSN_T_BLUE, DMNSN_T_BLUR_SAMPLES, DMNSN_T_BOUNDED_BY, DMNSN_T_BOX, DMNSN_T_BOXED, DMNSN_T_BOZO, DMNSN_T_BRICK, DMNSN_T_BRICK_SIZE, DMNSN_T_BRIGHTNESS, DMNSN_T_BRILLIANCE, DMNSN_T_BUMP_MAP, DMNSN_T_BUMP_SIZE, DMNSN_T_BUMPS, DMNSN_T_CAMERA, DMNSN_T_CAUSTICS, DMNSN_T_CEIL, DMNSN_T_CELLS, DMNSN_T_CHARSET, DMNSN_T_CHECKER, DMNSN_T_CHR, DMNSN_T_CIRCULAR, DMNSN_T_CLIPPED_BY, DMNSN_T_CLOCK, DMNSN_T_CLOCK_DELTA, DMNSN_T_CLOCK_ON, DMNSN_T_COLLECT, DMNSN_T_COLOR, DMNSN_T_COLOR_MAP, DMNSN_T_COMPONENT, DMNSN_T_COMPOSITE, DMNSN_T_CONCAT, DMNSN_T_CONE, DMNSN_T_CONFIDENCE, DMNSN_T_CONIC_SWEEP, DMNSN_T_CONSERVE_ENERGY, DMNSN_T_CONTAINED_BY, DMNSN_T_CONTROL0, DMNSN_T_CONTROL1, DMNSN_T_COORDS, DMNSN_T_COS, DMNSN_T_COSH, DMNSN_T_COUNT, DMNSN_T_CRACKLE, DMNSN_T_CRAND, DMNSN_T_CUBE, DMNSN_T_CUBIC, DMNSN_T_CUBIC_SPLINE, DMNSN_T_CUBIC_WAVE, DMNSN_T_CUTAWAY_TEXTURES, DMNSN_T_CYLINDER, DMNSN_T_CYLINDRICAL, DMNSN_T_DEFINED, DMNSN_T_DEGREES, DMNSN_T_DENSITY, DMNSN_T_DENSITY_FILE, DMNSN_T_DENSITY_MAP, DMNSN_T_DENTS, DMNSN_T_DF3, DMNSN_T_DIFFERENCE, DMNSN_T_DIFFUSE, DMNSN_T_DIMENSION_SIZE, DMNSN_T_DIMENSIONS, DMNSN_T_DIRECTION, DMNSN_T_DISC, DMNSN_T_DISPERSION, DMNSN_T_DISPERSION_SAMPLES, DMNSN_T_DIST_EXP, DMNSN_T_DISTANCE, DMNSN_T_DIV, DMNSN_T_DOUBLE_ILLUMINATE, DMNSN_T_ECCENTRICITY, DMNSN_T_EMISSION, DMNSN_T_ERROR_BOUND, DMNSN_T_EVALUATE, DMNSN_T_EXP, DMNSN_T_EXPAND_THRESHOLDS, DMNSN_T_EXPONENT, DMNSN_T_EXTERIOR, DMNSN_T_EXTINCTION, DMNSN_T_FACE_INDICES, DMNSN_T_FACETS, DMNSN_T_FADE_COLOR, DMNSN_T_FADE_DISTANCE, DMNSN_T_FADE_POWER, DMNSN_T_FALLOFF, DMNSN_T_FALLOFF_ANGLE, DMNSN_T_FALSE, DMNSN_T_FILE_EXISTS, DMNSN_T_FILTER, DMNSN_T_FINAL_CLOCK, DMNSN_T_FINAL_FRAME, DMNSN_T_FINISH, DMNSN_T_FISHEYE, DMNSN_T_FLATNESS, DMNSN_T_FLIP, DMNSN_T_FLOOR, DMNSN_T_FOCAL_POINT, DMNSN_T_FOG, DMNSN_T_FOG_ALT, DMNSN_T_FOG_OFFSET, DMNSN_T_FOG_TYPE, DMNSN_T_FORM, DMNSN_T_FRAME_NUMBER, DMNSN_T_FREQUENCY, DMNSN_T_FRESNEL, DMNSN_T_FUNCTION, DMNSN_T_GATHER, DMNSN_T_GIF, DMNSN_T_GLOBAL_LIGHTS, DMNSN_T_GLOBAL_SETTINGS, DMNSN_T_GRADIENT, DMNSN_T_GRANITE, DMNSN_T_GRAY, DMNSN_T_GRAY_THRESHOLD, DMNSN_T_GREEN, DMNSN_T_HEIGHT_FIELD, DMNSN_T_HEXAGON, DMNSN_T_HF_GRAY_16, DMNSN_T_HIERARCHY, DMNSN_T_HYPERCOMPLEX, DMNSN_T_HOLLOW, DMNSN_T_IFF, DMNSN_T_IMAGE_HEIGHT, DMNSN_T_IMAGE_MAP, DMNSN_T_IMAGE_PATTERN, DMNSN_T_IMAGE_WIDTH, DMNSN_T_INITIAL_CLOCK, DMNSN_T_INITIAL_FRAME, DMNSN_T_INSIDE, DMNSN_T_INSIDE_VECTOR, DMNSN_T_INT, DMNSN_T_INTERIOR, DMNSN_T_INTERIOR_TEXTURE, DMNSN_T_INTERNAL, DMNSN_T_INTERPOLATE, DMNSN_T_INTERSECTION, DMNSN_T_INTERVALS, DMNSN_T_INVERSE, DMNSN_T_IOR, DMNSN_T_IRID, DMNSN_T_IRID_WAVELENGTH, DMNSN_T_ISOSURFACE, DMNSN_T_JITTER, DMNSN_T_JPEG, DMNSN_T_JULIA, DMNSN_T_JULIA_FRACTAL, DMNSN_T_LAMBDA, DMNSN_T_LATHE, DMNSN_T_LEOPARD, DMNSN_T_LIGHT_GROUP, DMNSN_T_LIGHT_SOURCE, DMNSN_T_LINEAR_SPLINE, DMNSN_T_LINEAR_SWEEP, DMNSN_T_LN, DMNSN_T_LOAD_FILE, DMNSN_T_LOCATION, DMNSN_T_LOG, DMNSN_T_LOOK_AT, DMNSN_T_LOOKS_LIKE, DMNSN_T_LOW_ERROR_FACTOR, DMNSN_T_MAGNET, DMNSN_T_MAJOR_RADIUS, DMNSN_T_MANDEL, DMNSN_T_MAP_TYPE, DMNSN_T_MARBLE, DMNSN_T_MATERIAL, DMNSN_T_MATERIAL_MAP, DMNSN_T_MATRIX, DMNSN_T_MAX, DMNSN_T_MAX_EXTENT, DMNSN_T_MAX_GRADIENT, DMNSN_T_MAX_INTERSECTIONS, DMNSN_T_MAX_ITERATION, DMNSN_T_MAX_SAMPLE, DMNSN_T_MAX_TRACE, DMNSN_T_MAX_TRACE_LEVEL, DMNSN_T_MEDIA, DMNSN_T_MEDIA_ATTENUATION, DMNSN_T_MEDIA_INTERACTION, DMNSN_T_MERGE, DMNSN_T_MESH, DMNSN_T_MESH2, DMNSN_T_METALLIC, DMNSN_T_METHOD, DMNSN_T_METRIC, DMNSN_T_MIN, DMNSN_T_MIN_EXTENT, DMNSN_T_MINIMUM_REUSE, DMNSN_T_MOD, DMNSN_T_MORTAR, DMNSN_T_NATURAL_SPLINE, DMNSN_T_NEAREST_COUNT, DMNSN_T_NO, DMNSN_T_NO_BUMP_SCALE, DMNSN_T_NO_IMAGE, DMNSN_T_NO_REFLECTION, DMNSN_T_NO_SHADOW, DMNSN_T_NOISE_GENERATOR, DMNSN_T_NORMAL, DMNSN_T_NORMAL_INDICES, DMNSN_T_NORMAL_MAP, DMNSN_T_NORMAL_VECTORS, DMNSN_T_NUMBER_OF_WAVES, DMNSN_T_OBJECT, DMNSN_T_OCTAVES, DMNSN_T_OFF, DMNSN_T_OFFSET, DMNSN_T_OMEGA, DMNSN_T_OMNIMAX, DMNSN_T_ON, DMNSN_T_ONCE, DMNSN_T_ONION, DMNSN_T_OPEN, DMNSN_T_ORIENT, DMNSN_T_ORIENTATION, DMNSN_T_ORTHOGRAPHIC, DMNSN_T_PANORAMIC, DMNSN_T_PARALLEL, DMNSN_T_PARAMETRIC, DMNSN_T_PASS_THROUGH, DMNSN_T_PATTERN, DMNSN_T_PERSPECTIVE, DMNSN_T_PGM, DMNSN_T_PHASE, DMNSN_T_PHONG, DMNSN_T_PHONG_SIZE, DMNSN_T_PHOTONS, DMNSN_T_PI, DMNSN_T_PIGMENT, DMNSN_T_PIGMENT_MAP, DMNSN_T_PIGMENT_PATTERN, DMNSN_T_PLANAR, DMNSN_T_PLANE, DMNSN_T_PNG, DMNSN_T_POINT_AT, DMNSN_T_POLY, DMNSN_T_POLY_WAVE, DMNSN_T_POLYGON, DMNSN_T_POT, DMNSN_T_POW, DMNSN_T_PPM, DMNSN_T_PRECISION, DMNSN_T_PRECOMPUTE, DMNSN_T_PRETRACE_END, DMNSN_T_PRETRACE_START, DMNSN_T_PRISM, DMNSN_T_PROD, DMNSN_T_PROJECTED_THROUGH, DMNSN_T_PWR, DMNSN_T_QUADRATIC_SPLINE, DMNSN_T_QUADRIC, DMNSN_T_QUARTIC, DMNSN_T_QUATERNION, DMNSN_T_QUICK_COLOR, DMNSN_T_QUILTED, DMNSN_T_RADIAL, DMNSN_T_RADIANS, DMNSN_T_RADIOSITY, DMNSN_T_RADIUS, DMNSN_T_RAINBOW, DMNSN_T_RAMP_WAVE, DMNSN_T_RAND, DMNSN_T_RATIO, DMNSN_T_RECIPROCAL, DMNSN_T_RECURSION_LIMIT, DMNSN_T_RED, DMNSN_T_REFLECTION, DMNSN_T_REFLECTION_EXPONENT, DMNSN_T_REFRACTION, DMNSN_T_REPEAT, DMNSN_T_RGB, DMNSN_T_RGBF, DMNSN_T_RGBFT, DMNSN_T_RGBT, DMNSN_T_RIGHT, DMNSN_T_RIPPLES, DMNSN_T_ROTATE, DMNSN_T_ROUGHNESS, DMNSN_T_SAMPLES, DMNSN_T_SAVE_FILE, DMNSN_T_SCALE, DMNSN_T_SCALLOP_WAVE, DMNSN_T_SCATTERING, DMNSN_T_SEED, DMNSN_T_SELECT, DMNSN_T_SHADOWLESS, DMNSN_T_SIN, DMNSN_T_SINE_WAVE, DMNSN_T_SINH, DMNSN_T_SIZE, DMNSN_T_SKY, DMNSN_T_SKY_SPHERE, DMNSN_T_SLICE, DMNSN_T_SLOPE, DMNSN_T_SLOPE_MAP, DMNSN_T_SMOOTH, DMNSN_T_SMOOTH_TRIANGLE, DMNSN_T_SOLID, DMNSN_T_SOR, DMNSN_T_SPACING, DMNSN_T_SPECULAR, DMNSN_T_SPHERE, DMNSN_T_SPHERE_SWEEP, DMNSN_T_SPHERICAL, DMNSN_T_SPIRAL1, DMNSN_T_SPIRAL2, DMNSN_T_SPLINE, DMNSN_T_SPLIT_UNION, DMNSN_T_SPOTLIGHT, DMNSN_T_SPOTTED, DMNSN_T_SQR, DMNSN_T_SQRT, DMNSN_T_STR, DMNSN_T_STRCMP, DMNSN_T_STRENGTH, DMNSN_T_STRLEN, DMNSN_T_STRLWR, DMNSN_T_STRUPR, DMNSN_T_STURM, DMNSN_T_SUBSTR, DMNSN_T_SUM, DMNSN_T_SUPERELLIPSOID, DMNSN_T_SYS, DMNSN_T_T, DMNSN_T_TAN, DMNSN_T_TANH, DMNSN_T_TARGET, DMNSN_T_TEXT, DMNSN_T_TEXTURE, DMNSN_T_TEXTURE_LIST, DMNSN_T_TEXTURE_MAP, DMNSN_T_TGA, DMNSN_T_THICKNESS, DMNSN_T_THRESHOLD, DMNSN_T_TIFF, DMNSN_T_TIGHTNESS, DMNSN_T_TILE2, DMNSN_T_TILES, DMNSN_T_TOLERANCE, DMNSN_T_TOROIDAL, DMNSN_T_TORUS, DMNSN_T_TRACE, DMNSN_T_TRANSFORM, DMNSN_T_TRANSLATE, DMNSN_T_TRANSMIT, DMNSN_T_TRIANGLE, DMNSN_T_TRIANGLE_WAVE, DMNSN_T_TRUE, DMNSN_T_TTF, DMNSN_T_TURB_DEPTH, DMNSN_T_TURBULENCE, DMNSN_T_TYPE, DMNSN_T_U, DMNSN_T_U_STEPS, DMNSN_T_ULTRA_WIDE_ANGLE, DMNSN_T_UNION, DMNSN_T_UP, DMNSN_T_USE_ALPHA, DMNSN_T_USE_COLOR, DMNSN_T_USE_INDEX, DMNSN_T_UTF8, DMNSN_T_UV_INDICES, DMNSN_T_UV_MAPPING, DMNSN_T_UV_VECTORS, DMNSN_T_V, DMNSN_T_V_STEPS, DMNSN_T_VAL, DMNSN_T_VARIANCE, DMNSN_T_VAXIS_ROTATE, DMNSN_T_VCROSS, DMNSN_T_VDOT, DMNSN_T_VERTEX_VECTORS, DMNSN_T_VLENGTH, DMNSN_T_VNORMALIZE, DMNSN_T_VROTATE, DMNSN_T_VSTR, DMNSN_T_VTURBULENCE, DMNSN_T_WARP, DMNSN_T_WATER_LEVEL, DMNSN_T_WAVES, DMNSN_T_WIDTH, DMNSN_T_WOOD, DMNSN_T_WRINKLES, DMNSN_T_X, DMNSN_T_Y, DMNSN_T_YES, DMNSN_T_Z, /* Directives (#declare, etc.) */ DMNSN_T_BREAK, DMNSN_T_CASE, DMNSN_T_DEBUG, DMNSN_T_DECLARE, DMNSN_T_DEFAULT, DMNSN_T_ELSE, DMNSN_T_END, DMNSN_T_ERROR, DMNSN_T_FCLOSE, DMNSN_T_FOPEN, DMNSN_T_IF, DMNSN_T_IFDEF, DMNSN_T_IFNDEF, DMNSN_T_INCLUDE, DMNSN_T_LOCAL, DMNSN_T_MACRO, DMNSN_T_RANGE, DMNSN_T_READ, DMNSN_T_RENDER, DMNSN_T_STATISTICS, DMNSN_T_SWITCH, DMNSN_T_UNDEF, DMNSN_T_VERSION, DMNSN_T_WARNING, DMNSN_T_WHILE, DMNSN_T_WRITE, /* Identifiers */ DMNSN_T_IDENTIFIER, /* Strings */ DMNSN_T_STRING, } dmnsn_token_type; typedef struct dmnsn_token dmnsn_token; struct dmnsn_token { dmnsn_token_type type; char *value; /* File name, and line and column numbers from source code */ const char *filename; unsigned int line, col; }; /* The workhorse */ dmnsn_array *dmnsn_tokenize(const char *filename, FILE *file); /* Free an array of tokens - use this rather than dmnsn_delete_array() */ void dmnsn_delete_tokens(dmnsn_array *tokens); /* Print an S-expression of a list of tokens to `file' */ void dmnsn_print_token_sexpr(FILE *file, const dmnsn_array *tokens); /* Returns a readable name for a token type (ex. DMNSN_T_FLOAT -> float) */ const char *dmnsn_token_string(dmnsn_token_type token_type); #endif /* TOKENIZE_H */