home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / calc / part03 / token.h < prev   
C/C++ Source or Header  |  1992-05-09  |  5KB  |  139 lines

  1. /*
  2.  * Copyright (c) 1992 David I. Bell
  3.  * Permission is granted to use, distribute, or modify this source,
  4.  * provided that this copyright notice remains intact.
  5.  */
  6.  
  7.  
  8. /*
  9.  * Token types
  10.  */
  11. #define T_NULL            0    /* null token */
  12. #define T_LEFTPAREN        1    /* left parenthesis "(" */
  13. #define T_RIGHTPAREN        2    /* right parenthesis ")" */
  14. #define T_LEFTBRACE        3    /* left brace "{" */
  15. #define T_RIGHTBRACE        4    /* right brace "}" */
  16. #define T_SEMICOLON        5    /* end of statement ";" */
  17. #define T_EOF            6    /* end of file */
  18. #define T_COLON            7    /* label character ":" */
  19. #define T_ASSIGN        8    /* assignment "=" */
  20. #define T_PLUS            9    /* plus sign "+" */
  21. #define T_MINUS            10    /* minus sign "-" */
  22. #define T_MULT            11    /* multiply sign "*" */
  23. #define T_DIV            12    /* divide sign "/" */
  24. #define T_MOD            13    /* modulo sign "%" */
  25. #define T_POWER            14    /* power sign "^" or "**" */
  26. #define T_EQ            15    /* equality "==" */
  27. #define T_NE            16    /* notequal "!=" */
  28. #define T_LT            17    /* less than "<" */
  29. #define T_GT            18    /* greater than ">" */
  30. #define T_LE            19    /* less than or equals "<=" */
  31. #define T_GE            20    /* greater than or equals ">=" */
  32. #define T_LEFTBRACKET        21    /* left bracket "[" */
  33. #define T_RIGHTBRACKET        22    /* right bracket "]" */
  34. #define T_SYMBOL        23    /* symbol name */
  35. #define T_STRING        24    /* string value (double quotes) */
  36. #define T_NUMBER        25    /* numeric real constant */
  37. #define T_PLUSEQUALS        26    /* plus equals "+=" */
  38. #define T_MINUSEQUALS        27    /* minus equals "-=" */
  39. #define T_MULTEQUALS        28    /* multiply equals "*=" */
  40. #define T_DIVEQUALS        29    /* divide equals "/=" */
  41. #define T_MODEQUALS        30    /* modulo equals "%=" */
  42. #define T_PLUSPLUS        31    /* plusplus "++" */
  43. #define T_MINUSMINUS        32    /* minusminus "--" */
  44. #define T_COMMA            33    /* comma "," */
  45. #define T_ANDAND        34    /* logical and "&&" */
  46. #define T_OROR            35    /* logical or "||" */
  47. #define T_OLDVALUE        36    /* old value from previous calculation */
  48. #define T_SLASHSLASH        37    /* integer divide "//" */
  49. #define T_NEWLINE        38    /* newline character */
  50. #define T_SLASHSLASHEQUALS    39    /* integer divide equals "//=" */
  51. #define T_AND            40    /* arithmetic and "&" */
  52. #define T_OR            41    /* arithmetic or "|" */
  53. #define T_NOT            42    /* logical not "!" */
  54. #define T_LEFTSHIFT        43    /* left shift "<<" */
  55. #define T_RIGHTSHIFT        44    /* right shift ">>" */
  56. #define T_ANDEQUALS        45    /* and equals "&=" */
  57. #define T_OREQUALS        46    /* or equals "|= */
  58. #define T_LSHIFTEQUALS        47    /* left shift equals "<<=" */
  59. #define T_RSHIFTEQUALS        48    /* right shift equals ">>= */
  60. #define T_POWEREQUALS        49    /* power equals "^=" or "**=" */
  61. #define T_PERIOD        50    /* period "." */
  62. #define T_IMAGINARY        51    /* numeric imaginary constant */
  63. #define    T_AMPERSAND        52    /* ampersand "&" */
  64. #define    T_QUESTIONMARK        53    /* question mark "?" */
  65.  
  66.  
  67. /*
  68.  * Keyword tokens
  69.  */
  70. #define T_IF            101    /* if keyword */
  71. #define T_ELSE            102    /* else keyword */
  72. #define T_WHILE            103    /* while keyword */
  73. #define T_CONTINUE        104    /* continue keyword */
  74. #define T_BREAK            105    /* break keyword */
  75. #define T_GOTO            106    /* goto keyword */
  76. #define T_RETURN        107    /* return keyword */
  77. #define T_LOCAL            108    /* local keyword */
  78. #define T_GLOBAL        109    /* global keyword */
  79. #define T_PRINT            110    /* print keyword */
  80. #define T_DO            111    /* do keyword */
  81. #define T_FOR            112    /* for keyword */
  82. #define T_SWITCH        113    /* switch keyword */
  83. #define T_CASE            114    /* case keyword */
  84. #define T_DEFAULT        115    /* default keyword */
  85. #define T_QUIT            116    /* quit keyword */
  86. #define T_DEFINE        117    /* define keyword */
  87. #define T_READ            118    /* read keyword */
  88. #define T_SHOW            119    /* show keyword */
  89. #define T_HELP            120    /* help keyword */
  90. #define T_WRITE            121    /* write keyword */
  91. #define T_MAT            122    /* mat keyword */
  92. #define T_OBJ            123    /* obj keyword */
  93.  
  94.  
  95. #define iskeyword(n) ((n) > 100)    /* TRUE if token is a keyword */
  96.  
  97.  
  98. /*
  99.  * Flags returned describing results of expression parsing.
  100.  */
  101. #define EXPR_RVALUE    0x0001        /* result is an rvalue */
  102. #define EXPR_CONST    0x0002        /* result is constant */
  103. #define EXPR_ASSIGN    0x0004        /* result is an assignment */
  104.  
  105. #define isrvalue(n)    ((n) & EXPR_RVALUE)    /* TRUE if expression is rvalue */
  106. #define islvalue(n)    (((n) & EXPR_RVALUE) == 0)    /* TRUE if expr is lvalue */
  107. #define isconst(n)    ((n) & EXPR_CONST)    /* TRUE if expr is constant */
  108. #define isassign(n)    ((n) & EXPR_ASSIGN)    /* TRUE if expr is an assignment */
  109.  
  110.  
  111. /*
  112.  * Flags for modes for tokenizing.
  113.  */
  114. #define TM_DEFAULT    0x0        /* normal mode */
  115. #define TM_NEWLINES    0x1        /* treat any newline as a token */
  116. #define TM_ALLSYMS    0x2        /* treat almost everything as a symbol */
  117.  
  118.  
  119. extern long errorcount;        /* number of errors found */
  120.  
  121. extern char *tokenstring();
  122. extern long tokennumber();
  123. extern void inittokens();       /* initialize all token information */
  124. extern void tokenmode();
  125. extern int gettoken();
  126. extern void rescantoken();
  127.  
  128. #ifdef VARARGS
  129. extern void scanerror();
  130. #else
  131. # ifdef __STDC__
  132. extern void scanerror(int, char *, ...);
  133. # else
  134. extern void scanerror();
  135. # endif
  136. #endif
  137.  
  138. /* END CODE */
  139.