14887Schin /*********************************************************************** 24887Schin * * 34887Schin * This software is part of the ast package * 4*12068SRoger.Faulkner@Oracle.COM * Copyright (c) 1982-2010 AT&T Intellectual Property * 54887Schin * and is licensed under the * 64887Schin * Common Public License, Version 1.0 * 78462SApril.Chin@Sun.COM * by AT&T Intellectual Property * 84887Schin * * 94887Schin * A copy of the License is available at * 104887Schin * http://www.opensource.org/licenses/cpl1.0.txt * 114887Schin * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 124887Schin * * 134887Schin * Information and Software Systems Research * 144887Schin * AT&T Research * 154887Schin * Florham Park NJ * 164887Schin * * 174887Schin * David Korn <dgk@research.att.com> * 184887Schin * * 194887Schin ***********************************************************************/ 204887Schin #pragma prototyped 214887Schin /* 224887Schin * data for string evaluator library 234887Schin */ 244887Schin 254887Schin #include <ast_standards.h> 264887Schin #include "FEATURE/options" 274887Schin #include "streval.h" 284887Schin 294887Schin const unsigned char strval_precedence[35] = 304887Schin /* opcode precedence,assignment */ 314887Schin { 324887Schin /* DEFAULT */ MAXPREC|NOASSIGN, 334887Schin /* DONE */ 0|NOASSIGN|RASSOC, 344887Schin /* NEQ */ 10|NOASSIGN, 354887Schin /* NOT */ MAXPREC|NOASSIGN, 364887Schin /* MOD */ 14, 374887Schin /* ANDAND */ 6|NOASSIGN|SEQPOINT, 384887Schin /* AND */ 9|NOFLOAT, 394887Schin /* LPAREN */ MAXPREC|NOASSIGN|SEQPOINT, 404887Schin /* RPAREN */ 1|NOASSIGN|RASSOC|SEQPOINT, 414887Schin /* POW */ 14|NOASSIGN|RASSOC, 424887Schin /* TIMES */ 14, 434887Schin /* PLUSPLUS */ 15|NOASSIGN|NOFLOAT|SEQPOINT, 444887Schin /* PLUS */ 13, 454887Schin /* COMMA */ 1|NOASSIGN|SEQPOINT, 464887Schin /* MINUSMINUS */ 15|NOASSIGN|NOFLOAT|SEQPOINT, 474887Schin /* MINUS */ 13, 484887Schin /* DIV */ 14, 494887Schin /* LSHIFT */ 12|NOFLOAT, 504887Schin /* LE */ 11|NOASSIGN, 514887Schin /* LT */ 11|NOASSIGN, 524887Schin /* EQ */ 10|NOASSIGN, 534887Schin /* ASSIGNMENT */ 2|RASSOC, 544887Schin /* COLON */ 0|NOASSIGN, 554887Schin /* RSHIFT */ 12|NOFLOAT, 564887Schin /* GE */ 11|NOASSIGN, 574887Schin /* GT */ 11|NOASSIGN, 584887Schin /* QCOLON */ 3|NOASSIGN|SEQPOINT, 594887Schin /* QUEST */ 3|NOASSIGN|SEQPOINT|RASSOC, 604887Schin /* XOR */ 8|NOFLOAT, 614887Schin /* OROR */ 5|NOASSIGN|SEQPOINT, 624887Schin /* OR */ 7|NOFLOAT, 634887Schin /* DEFAULT */ MAXPREC|NOASSIGN, 644887Schin /* DEFAULT */ MAXPREC|NOASSIGN, 654887Schin /* DEFAULT */ MAXPREC|NOASSIGN, 664887Schin /* DEFAULT */ MAXPREC|NOASSIGN 674887Schin }; 684887Schin 694887Schin /* 704887Schin * This is for arithmetic expressions 714887Schin */ 724887Schin const char strval_states[64] = 734887Schin { 744887Schin A_EOF, A_REG, A_REG, A_REG, A_REG, A_REG, A_REG, A_REG, 754887Schin A_REG, 0, 0, A_REG, A_REG, A_REG, A_REG, A_REG, 764887Schin A_REG, A_REG, A_REG, A_REG, A_REG, A_REG, A_REG, A_REG, 774887Schin A_REG, A_REG, A_REG, A_REG, A_REG, A_REG, A_REG, A_REG, 784887Schin 794887Schin 0, A_NOT, 0, A_REG, A_REG, A_MOD, A_AND, A_LIT, 804887Schin A_LPAR, A_RPAR, A_TIMES,A_PLUS, A_COMMA,A_MINUS,A_DOT, A_DIV, 814887Schin A_DIG, A_DIG, A_DIG, A_DIG, A_DIG, A_DIG, A_DIG, A_DIG, 824887Schin A_DIG, A_DIG, A_COLON,A_REG, A_LT, A_ASSIGN,A_GT, A_QUEST 834887Schin 844887Schin }; 854887Schin 864887Schin 874887Schin const char e_argcount[] = "%s: function has wrong number of arguments"; 884887Schin const char e_badnum[] = "%s: bad number"; 894887Schin const char e_moretokens[] = "%s: more tokens expected"; 904887Schin const char e_paren[] = "%s: unbalanced parenthesis"; 914887Schin const char e_badcolon[] = "%s: invalid use of :"; 924887Schin const char e_divzero[] = "%s: divide by zero"; 934887Schin const char e_synbad[] = "%s: arithmetic syntax error"; 944887Schin const char e_notlvalue[] = "%s: assignment requires lvalue"; 954887Schin const char e_recursive[] = "%s: recursion too deep"; 964887Schin const char e_questcolon[] = "%s: ':' expected for '?' operator"; 974887Schin const char e_function[] = "%s: unknown function"; 984887Schin const char e_incompatible[] = "%s: invalid floating point operation"; 994887Schin const char e_overflow[] = "%s: overflow exception"; 1004887Schin const char e_domain[] = "%s: domain exception"; 1014887Schin const char e_singularity[] = "%s: singularity exception"; 1024887Schin const char e_charconst[] = "%s: invalid character constant"; 1034887Schin 1044887Schin #include "FEATURE/math" 105