File: scanner.h

package info (click to toggle)
focal 1.0.1-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 308 kB
  • ctags: 291
  • sloc: ansic: 3,313; makefile: 159
file content (89 lines) | stat: -rw-r--r-- 2,589 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89

            case 1: /* Operator found */
               switch ( lachar )
               {

                  case '[':
                  case '<':
                  case '{':
                     lachar = '(';
                  case '(':
                     token = lachar;
                     break;

                  case ']':
                  case '>':
                  case '}':
                     lachar = ')';
                  case ')':
                     token = lachar;
                     break;

                 default:
                     if (latran == 1)
                        token = EOS;
                     else
                        token = lachar;
               }
               break;

#define MAXFUNC 10
            case 2: /* Symbol found */
               {
                  int i;
                  static char *functable[MAXFUNC] = {
                        "FSQT", "FABS", "FSGN", "FITR", "FRAN",
                        "FEXP", "FSIN", "FCOS", "FATN", "FLOG" };

                  value = 0.0;
                  token = VAR;
                  for ( i=0; symbol[i] != '\0'; i++ ) 
                     symbol[i] = upcase(symbol[i]);
                  if ( symbol[0] == 'F' )
                  {
                     token = FNAME;
                     for ( i=0; i<MAXFUNC; i++ )
                     {
                        if ( strcmp ( symbol, functable[i] ) == 0 )
                        {
                           value = i + 1;
                           break;
                        }
                     }
                  }
               }
               break;

            case 3: /* Number found */
               value = value * 10.0 + dignum;
               token = NUM;
               break;

            case 5: /* Exponent found */
               sexp = sexp * 10.0 + dignum;
               token = NUM;
               break;

            case 7: /* Fractional part */
               value = value + (sfrc * dignum);
               sfrc = sfrc / 10.0;
               token = NUM;
               break;

            case 8: /* Build exponential form */
               token = NUM;
               if (value != 0.0)
               {
                  if (sexp < 38.0)
                     value = value * pow ( 10.0, (sexp * expsgn) );
                  else
                     Parse_Error ( SCAN_ERROR, SCAN_EXPON );
               }
               break;

            case 9: /* Exponent sign */
               token = NUM;
               if (lachar == '-')
                  expsgn = -1.0;
               break;