mirror of
https://github.com/lcn2/calc.git
synced 2025-08-16 01:03:29 +03:00
Converted all ASCII tabs to ASCII spaces using a 8 character tab stop, for all files, except for all Makefiles (plus rpm.mk). The `git diff -w` reports no changes.
183 lines
8.3 KiB
C
183 lines
8.3 KiB
C
/*
|
|
* token - token defines
|
|
*
|
|
* Copyright (C) 1999-2007,2014,2021,2023 David I. Bell
|
|
*
|
|
* Calc is open software; you can redistribute it and/or modify it under
|
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
|
* as published by the Free Software Foundation.
|
|
*
|
|
* Calc 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 Lesser General
|
|
* Public License for more details.
|
|
*
|
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* Under source code control: 1990/02/15 01:48:37
|
|
* File existed as early as: before 1990
|
|
*
|
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
|
*/
|
|
|
|
|
|
#if !defined(INCLUDE_TOKEN_H)
|
|
#define INCLUDE_TOKEN_H
|
|
|
|
|
|
#if defined(CALC_SRC) /* if we are building from the calc source tree */
|
|
# include "zmath.h"
|
|
#else
|
|
# include <calc/zmath.h>
|
|
#endif
|
|
|
|
|
|
/*
|
|
* Token types
|
|
*/
|
|
#define T_NULL 0 /* null token */
|
|
#define T_LEFTPAREN 1 /* left parenthesis "(" */
|
|
#define T_RIGHTPAREN 2 /* right parenthesis ")" */
|
|
#define T_LEFTBRACE 3 /* left brace "{" */
|
|
#define T_RIGHTBRACE 4 /* right brace "}" */
|
|
#define T_SEMICOLON 5 /* end of statement ";" */
|
|
#define T_EOF 6 /* end of file */
|
|
#define T_COLON 7 /* label character ":" */
|
|
#define T_ASSIGN 8 /* assignment "=" */
|
|
#define T_PLUS 9 /* plus sign "+" */
|
|
#define T_MINUS 10 /* minus sign "-" */
|
|
#define T_MULT 11 /* multiply sign "*" */
|
|
#define T_DIV 12 /* divide sign "/" */
|
|
#define T_MOD 13 /* modulo sign "%" */
|
|
#define T_POWER 14 /* power sign "^" or "**" */
|
|
#define T_EQ 15 /* equality "==" */
|
|
#define T_NE 16 /* not-equal "!=" */
|
|
#define T_LT 17 /* less than "<" */
|
|
#define T_GT 18 /* greater than ">" */
|
|
#define T_LE 19 /* less than or equals "<=" */
|
|
#define T_GE 20 /* greater than or equals ">=" */
|
|
#define T_LEFTBRACKET 21 /* left bracket "[" */
|
|
#define T_RIGHTBRACKET 22 /* right bracket "]" */
|
|
#define T_SYMBOL 23 /* symbol name */
|
|
#define T_STRING 24 /* string value (double quotes) */
|
|
#define T_NUMBER 25 /* numeric real constant */
|
|
#define T_PLUSEQUALS 26 /* plus equals "+=" */
|
|
#define T_MINUSEQUALS 27 /* minus equals "-=" */
|
|
#define T_MULTEQUALS 28 /* multiply equals "*=" */
|
|
#define T_DIVEQUALS 29 /* divide equals "/=" */
|
|
#define T_MODEQUALS 30 /* modulo equals "%=" */
|
|
#define T_PLUSPLUS 31 /* plus-plus "++" */
|
|
#define T_MINUSMINUS 32 /* minus-minus "--" */
|
|
#define T_COMMA 33 /* comma "," */
|
|
#define T_ANDAND 34 /* logical and "&&" */
|
|
#define T_OROR 35 /* logical or "||" */
|
|
#define T_OLDVALUE 36 /* old value from prev calculation */
|
|
#define T_SLASHSLASH 37 /* integer divide "//" */
|
|
#define T_NEWLINE 38 /* newline character */
|
|
#define T_SLASHSLASHEQUALS 39 /* integer divide equals "//=" */
|
|
#define T_AND 40 /* arithmetic and "&" */
|
|
#define T_OR 41 /* arithmetic or "|" */
|
|
#define T_NOT 42 /* logical not "!" */
|
|
#define T_LEFTSHIFT 43 /* left shift "<<" */
|
|
#define T_RIGHTSHIFT 44 /* right shift ">>" */
|
|
#define T_ANDEQUALS 45 /* and equals "&=" */
|
|
#define T_OREQUALS 46 /* or equals "|= */
|
|
#define T_LSHIFTEQUALS 47 /* left shift equals "<<=" */
|
|
#define T_RSHIFTEQUALS 48 /* right shift equals ">>= */
|
|
#define T_POWEREQUALS 49 /* power equals "^=" or "**=" */
|
|
#define T_PERIOD 50 /* period "." */
|
|
#define T_IMAGINARY 51 /* numeric imaginary constant */
|
|
#define T_AMPERSAND 52 /* ampersand "&" */
|
|
#define T_QUESTIONMARK 53 /* question mark "?" */
|
|
#define T_AT 54 /* at sign "@" */
|
|
#define T_DOLLAR 55 /* dollar sign "$" */
|
|
#define T_HASH 56 /* hash or pound sign "#" */
|
|
#define T_HASHEQUALS 57 /* hash equals "#=" */
|
|
#define T_BACKQUOTE 58 /* backquote sign "`" */
|
|
#define T_ARROW 59 /* arrow "->" */
|
|
#define T_TILDE 60 /* tilde "~" */
|
|
#define T_TILDEEQUALS 61 /* tilde equals "~=" */
|
|
#define T_BACKSLASH 62 /* backslash or setminus "\" */
|
|
#define T_BACKSLASHEQUALS 63 /* backslash equals "\=" */
|
|
#define T_POUNDBANG 64 /* #!/usr/local/bin/calc comment */
|
|
#define T_POUNDCOMMENT 65 /* #[whitespace] comment */
|
|
|
|
|
|
/*
|
|
* Keyword tokens
|
|
*/
|
|
#define T_IF 101 /* if keyword */
|
|
#define T_ELSE 102 /* else keyword */
|
|
#define T_WHILE 103 /* while keyword */
|
|
#define T_CONTINUE 104 /* continue keyword */
|
|
#define T_BREAK 105 /* break keyword */
|
|
#define T_GOTO 106 /* goto keyword */
|
|
#define T_RETURN 107 /* return keyword */
|
|
#define T_LOCAL 108 /* local keyword */
|
|
#define T_GLOBAL 109 /* global keyword */
|
|
#define T_STATIC 110 /* static keyword */
|
|
#define T_DO 111 /* do keyword */
|
|
#define T_FOR 112 /* for keyword */
|
|
#define T_SWITCH 113 /* switch keyword */
|
|
#define T_CASE 114 /* case keyword */
|
|
#define T_DEFAULT 115 /* default keyword */
|
|
#define T_QUIT 116 /* quit keyword */
|
|
#define T_DEFINE 117 /* define keyword */
|
|
#define T_READ 118 /* read keyword */
|
|
#define T_SHOW 119 /* show keyword */
|
|
#define T_HELP 120 /* help keyword */
|
|
#define T_WRITE 121 /* write keyword */
|
|
#define T_MAT 122 /* mat keyword */
|
|
#define T_OBJ 123 /* obj keyword */
|
|
#define T_PRINT 124 /* print keyword */
|
|
#define T_CD 125 /* change directory keyword */
|
|
#define T_UNDEFINE 126 /* undefine keyword */
|
|
#define T_ABORT 127 /* abort operation */
|
|
|
|
|
|
#define iskeyword(n) ((n) > 100) /* true if token is a keyword */
|
|
|
|
|
|
/*
|
|
* Flags returned describing results of expression parsing.
|
|
*/
|
|
#define EXPR_RVALUE 0x0001 /* result is an rvalue */
|
|
#define EXPR_CONST 0x0002 /* result is constant */
|
|
#define EXPR_ASSIGN 0x0004 /* result is an assignment */
|
|
|
|
/* true if expression is rvalue */
|
|
#define isrvalue(n) ((n) & EXPR_RVALUE)
|
|
/* true if expr is lvalue */
|
|
#define islvalue(n) (((n) & EXPR_RVALUE) == 0)
|
|
/* true if expr is constant */
|
|
#define isconst(n) ((n) & EXPR_CONST)
|
|
/* true if expr is an assignment */
|
|
#define isassign(n) ((n) & EXPR_ASSIGN)
|
|
|
|
|
|
/*
|
|
* Flags for modes for tokenizing.
|
|
*/
|
|
#define TM_DEFAULT 0x0 /* normal mode */
|
|
#define TM_NEWLINES 0x1 /* treat any newline as a token */
|
|
#define TM_ALLSYMS 0x2 /* treat almost everything as a symbol */
|
|
|
|
|
|
EXTERN long errorcount; /* number of errors found */
|
|
|
|
E_FUNC long tokenstring(void);
|
|
E_FUNC long tokennumber(void);
|
|
E_FUNC char *tokensymbol(void);
|
|
E_FUNC void inittokens(void);
|
|
E_FUNC int tokenmode(int flag);
|
|
E_FUNC int gettoken(void);
|
|
E_FUNC void rescantoken(void);
|
|
E_FUNC void scanerror(int, char *, ...) __attribute__((format(printf, 2, 3)));
|
|
E_FUNC void warning(char *, ...) __attribute__((format(printf, 1, 2)));
|
|
|
|
|
|
#endif /* !INCLUDE_TOKEN_H */
|