home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
messroms.de
/
2007-01-13_www.messroms.de.zip
/
VZ200
/
TOOLS
/
ZCCSRC.ZIP
/
scc
/
lex.c
< prev
next >
Wrap
C/C++ Source or Header
|
2000-03-01
|
2KB
|
170 lines
/* File lex.c: 2.1 (83/03/20,16:02:09) */
/*% cc -O -c %
*
*/
#include <stdio.h>
#include "defs.h"
#include "data.h"
#include "proto.h"
/*
* semicolon enforcer
*
* called whenever syntax requires a semicolon
*
*/
void ns(void)
{
if (!match(";"))
error("missing semicolon");
}
void junk(void)
{
if (an(inbyte()))
while (an(ch()))
gch();
else
while (an(ch()))
{
if (ch() == 0)
break;
gch();
}
blanks();
}
int endst(void)
{
blanks();
return ((streq(line + lptr, ";") | (ch() == 0)));
}
void needbrack(char *str)
{
if (!match(str))
{
error("missing bracket");
comment();
outstr(str);
nl();
}
}
/*
* test if given character is alpha
*/
int alpha(char c)
{
c = c & 127;
return (((c >= 'a') & (c <= 'z')) |
((c >= 'A') & (c <= 'Z')) |
(c == '_'));
}
/*
* test if given character is numeric
*/
int numeric(char c)
{
c = c & 127;
return ((c >= '0') & (c <= '9'));
}
/*
* test if given character is alphanumeric
*/
int an(char c)
{
return ((alpha(c)) | (numeric(c)));
}
int sstreq(char *str1)
{
return (streq(line + lptr, str1));
}
int streq(char str1[], char str2[])
{
int k;
k = 0;
while (str2[k])
{
if ((str1[k] != str2[k]))
return (0);
k++;
}
return (k);
}
int astreq(char str1[], char str2[], int len)
{
int k;
k = 0;
while (k < len)
{
if ((str1[k] != str2[k]))
break;
if (str1[k] == 0)
break;
if (str2[k] == 0)
break;
k++;
}
if (an(str1[k]))
return (0);
if (an(str2[k]))
return (0);
return (k);
}
int match(char *lit)
{
int k;
blanks();
if (0!=(k = streq(line + lptr, lit)))
{
lptr = lptr + k;
return (1);
}
return (0);
}
int amatch(char *lit, int len)
{
int k;
blanks();
if (0!=(k = astreq(line + lptr, lit, len)))
{
lptr = lptr + k;
while (an(ch()))
inbyte();
return (1);
}
return (0);
}
void blanks(void)
{
for (;;)
{
while (ch() == 0)
{
preprocess();
if (feof(input))
break;
}
if (ch() == ' ')
gch();
else if (ch() == 9)
gch();
else
return;
}
}