[go: up one dir, main page]

File: parser.c

package info (click to toggle)
asclock 2.0.12-7
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 1,012 kB
  • ctags: 305
  • sloc: ansic: 1,152; sh: 167; makefile: 62
file content (126 lines) | stat: -rw-r--r-- 1,477 bytes parent folder | download | duplicates (13)
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include "asclock.h"

#define GETNEXT fread(&next, 1, sizeof(char), file); if(feof(file)) return FALSE

static char next;
static FILE *file;

static void buferr()
{
  fprintf(stderr, "please do not enter numbers bigger than the number of atoms in the universe. thanks\n");
  exit(-1);
}


int read_init(FILE *f)
{

  file = f;

  GETNEXT;

  return TRUE;
}

int read_type(int *type) {
  
  while(1) 
    {
      if(isalpha(next))
	return TRUE;

      GETNEXT;

      if(next=='*')
        while(1) {
	  GETNEXT;
          if(next!='*') continue;
          GETNEXT;
          if(next=='/') break;
        }
      else if(next=='/') 
        while(1) {
	  GETNEXT;
	  if(next=='\n') { GETNEXT; break; }
        }

      if(isalpha(next)) return TRUE;

      GETNEXT;
    }
  return TRUE;
}

int read_token(char *str, int max)
{
  int i;
  i = 0;

  while(isspace(next))
    GETNEXT;

  while( (isalnum(next) || (next=='_')) && (i<max)) 
    {
      str[i++] = next;
      GETNEXT;
    }

  if(i==max) buferr();

  str[i] = '\0';

  return TRUE;
}

int read_assign() 
{

  while(next!='=')
    GETNEXT;

  GETNEXT;
  
  return TRUE;
}

int read_int(int *ret)
{
  char buf[64];
  int i;

  while(isspace(next))
    GETNEXT;

  i = 0;
  while(isdigit(next) && (i<64)) {
    buf[i++]=next;
    GETNEXT;
  }

  if(i==64) buferr();

  buf[i] = '\0';

  *ret = atoi(buf);

  return TRUE;
}

int read_semicolon() 
{

  while(next!=';')
    GETNEXT;

  GETNEXT;

  return TRUE;
}