1*4887Schin /*********************************************************************** 2*4887Schin * * 3*4887Schin * This software is part of the ast package * 4*4887Schin * Copyright (c) 1982-2007 AT&T Knowledge Ventures * 5*4887Schin * and is licensed under the * 6*4887Schin * Common Public License, Version 1.0 * 7*4887Schin * by AT&T Knowledge Ventures * 8*4887Schin * * 9*4887Schin * A copy of the License is available at * 10*4887Schin * http://www.opensource.org/licenses/cpl1.0.txt * 11*4887Schin * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 12*4887Schin * * 13*4887Schin * Information and Software Systems Research * 14*4887Schin * AT&T Research * 15*4887Schin * Florham Park NJ * 16*4887Schin * * 17*4887Schin * David Korn <dgk@research.att.com> * 18*4887Schin * * 19*4887Schin ***********************************************************************/ 20*4887Schin #pragma prototyped 21*4887Schin /* 22*4887Schin * data for string evaluator library 23*4887Schin */ 24*4887Schin 25*4887Schin #include <ast_standards.h> 26*4887Schin #include "FEATURE/options" 27*4887Schin #include "streval.h" 28*4887Schin 29*4887Schin const unsigned char strval_precedence[35] = 30*4887Schin /* opcode precedence,assignment */ 31*4887Schin { 32*4887Schin /* DEFAULT */ MAXPREC|NOASSIGN, 33*4887Schin /* DONE */ 0|NOASSIGN|RASSOC, 34*4887Schin /* NEQ */ 10|NOASSIGN, 35*4887Schin /* NOT */ MAXPREC|NOASSIGN, 36*4887Schin /* MOD */ 14, 37*4887Schin /* ANDAND */ 6|NOASSIGN|SEQPOINT, 38*4887Schin /* AND */ 9|NOFLOAT, 39*4887Schin /* LPAREN */ MAXPREC|NOASSIGN|SEQPOINT, 40*4887Schin /* RPAREN */ 1|NOASSIGN|RASSOC|SEQPOINT, 41*4887Schin /* POW */ 14|NOASSIGN|RASSOC, 42*4887Schin /* TIMES */ 14, 43*4887Schin /* PLUSPLUS */ 15|NOASSIGN|NOFLOAT|SEQPOINT, 44*4887Schin /* PLUS */ 13, 45*4887Schin /* COMMA */ 1|NOASSIGN|SEQPOINT, 46*4887Schin /* MINUSMINUS */ 15|NOASSIGN|NOFLOAT|SEQPOINT, 47*4887Schin /* MINUS */ 13, 48*4887Schin /* DIV */ 14, 49*4887Schin /* LSHIFT */ 12|NOFLOAT, 50*4887Schin /* LE */ 11|NOASSIGN, 51*4887Schin /* LT */ 11|NOASSIGN, 52*4887Schin /* EQ */ 10|NOASSIGN, 53*4887Schin /* ASSIGNMENT */ 2|RASSOC, 54*4887Schin /* COLON */ 0|NOASSIGN, 55*4887Schin /* RSHIFT */ 12|NOFLOAT, 56*4887Schin /* GE */ 11|NOASSIGN, 57*4887Schin /* GT */ 11|NOASSIGN, 58*4887Schin /* QCOLON */ 3|NOASSIGN|SEQPOINT, 59*4887Schin /* QUEST */ 3|NOASSIGN|SEQPOINT|RASSOC, 60*4887Schin /* XOR */ 8|NOFLOAT, 61*4887Schin /* OROR */ 5|NOASSIGN|SEQPOINT, 62*4887Schin /* OR */ 7|NOFLOAT, 63*4887Schin /* DEFAULT */ MAXPREC|NOASSIGN, 64*4887Schin /* DEFAULT */ MAXPREC|NOASSIGN, 65*4887Schin /* DEFAULT */ MAXPREC|NOASSIGN, 66*4887Schin /* DEFAULT */ MAXPREC|NOASSIGN 67*4887Schin }; 68*4887Schin 69*4887Schin /* 70*4887Schin * This is for arithmetic expressions 71*4887Schin */ 72*4887Schin const char strval_states[64] = 73*4887Schin { 74*4887Schin A_EOF, A_REG, A_REG, A_REG, A_REG, A_REG, A_REG, A_REG, 75*4887Schin A_REG, 0, 0, A_REG, A_REG, A_REG, A_REG, A_REG, 76*4887Schin A_REG, A_REG, A_REG, A_REG, A_REG, A_REG, A_REG, A_REG, 77*4887Schin A_REG, A_REG, A_REG, A_REG, A_REG, A_REG, A_REG, A_REG, 78*4887Schin 79*4887Schin 0, A_NOT, 0, A_REG, A_REG, A_MOD, A_AND, A_LIT, 80*4887Schin A_LPAR, A_RPAR, A_TIMES,A_PLUS, A_COMMA,A_MINUS,A_DOT, A_DIV, 81*4887Schin A_DIG, A_DIG, A_DIG, A_DIG, A_DIG, A_DIG, A_DIG, A_DIG, 82*4887Schin A_DIG, A_DIG, A_COLON,A_REG, A_LT, A_ASSIGN,A_GT, A_QUEST 83*4887Schin 84*4887Schin }; 85*4887Schin 86*4887Schin 87*4887Schin const char e_argcount[] = "%s: function has wrong number of arguments"; 88*4887Schin const char e_badnum[] = "%s: bad number"; 89*4887Schin const char e_moretokens[] = "%s: more tokens expected"; 90*4887Schin const char e_paren[] = "%s: unbalanced parenthesis"; 91*4887Schin const char e_badcolon[] = "%s: invalid use of :"; 92*4887Schin const char e_divzero[] = "%s: divide by zero"; 93*4887Schin const char e_synbad[] = "%s: arithmetic syntax error"; 94*4887Schin const char e_notlvalue[] = "%s: assignment requires lvalue"; 95*4887Schin const char e_recursive[] = "%s: recursion too deep"; 96*4887Schin const char e_questcolon[] = "%s: ':' expected for '?' operator"; 97*4887Schin const char e_function[] = "%s: unknown function"; 98*4887Schin const char e_incompatible[] = "%s: invalid floating point operation"; 99*4887Schin const char e_overflow[] = "%s: overflow exception"; 100*4887Schin const char e_domain[] = "%s: domain exception"; 101*4887Schin const char e_singularity[] = "%s: singularity exception"; 102*4887Schin const char e_charconst[] = "%s: invalid character constant"; 103*4887Schin 104*4887Schin #include "FEATURE/math" 105