126 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
 | 
						|
 * See the copyright notice in the ACK home directory, in the file "Copyright".
 | 
						|
 */
 | 
						|
/* $Id$ */
 | 
						|
/* PREPROCESSOR: INPUT SKIP FUNCTIONS */
 | 
						|
 | 
						|
#include "arith.h"
 | 
						|
#include "LLlex.h"
 | 
						|
#include "class.h"
 | 
						|
#include "input.h"
 | 
						|
 | 
						|
extern int InputLevel;
 | 
						|
 | 
						|
int skipspaces(ch, skipnl) register int ch;
 | 
						|
{
 | 
						|
	/*	skipspaces() skips any white space and returns the first
 | 
						|
	    non-space character.
 | 
						|
	*/
 | 
						|
	register int nlseen = 0;
 | 
						|
 | 
						|
	for (;;)
 | 
						|
	{
 | 
						|
		while (class(ch) == STSKIP)
 | 
						|
			ch = GetChar();
 | 
						|
		if (skipnl && class(ch) == STNL)
 | 
						|
		{
 | 
						|
			ch = GetChar();
 | 
						|
			LineNumber++;
 | 
						|
			nlseen++;
 | 
						|
			continue;
 | 
						|
		}
 | 
						|
		if (ch == TOKSEP && InputLevel)
 | 
						|
		{
 | 
						|
			ch = GetChar();
 | 
						|
			continue;
 | 
						|
		}
 | 
						|
 | 
						|
		/* \\\n are handled by trigraph */
 | 
						|
 | 
						|
		if (ch == '/')
 | 
						|
		{
 | 
						|
			ch = GetChar();
 | 
						|
			if (ch == '*' && !InputLevel)
 | 
						|
			{
 | 
						|
				skipcomment();
 | 
						|
				ch = GetChar();
 | 
						|
			}
 | 
						|
			else if (ch == '/' && !InputLevel)
 | 
						|
			{
 | 
						|
				skiplinecomment();
 | 
						|
				ch = GetChar();
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				UnGetChar();
 | 
						|
				return '/';
 | 
						|
			}
 | 
						|
		}
 | 
						|
		else if (nlseen && ch == '#')
 | 
						|
		{
 | 
						|
			domacro();
 | 
						|
			ch = GetChar();
 | 
						|
		}
 | 
						|
		else
 | 
						|
			return ch;
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
SkipToNewLine()
 | 
						|
{
 | 
						|
	register int ch;
 | 
						|
	register int garbage = 0;
 | 
						|
	register int delim = 0;
 | 
						|
 | 
						|
	while ((ch = GetChar()) != '\n')
 | 
						|
	{
 | 
						|
		if (delim)
 | 
						|
		{
 | 
						|
			if (ch == '\\')
 | 
						|
			{
 | 
						|
				if (GetChar() == '\n')
 | 
						|
					break;
 | 
						|
			}
 | 
						|
			else if (ch == delim)
 | 
						|
			{
 | 
						|
				delim = 0;
 | 
						|
			}
 | 
						|
			continue;
 | 
						|
		}
 | 
						|
		else if (ch == '\'' || ch == '\"')
 | 
						|
		{
 | 
						|
			delim = ch;
 | 
						|
			garbage = 1;
 | 
						|
		}
 | 
						|
		else if (ch == '/')
 | 
						|
		{
 | 
						|
			if (!InputLevel)
 | 
						|
			{
 | 
						|
				int nch = GetChar();
 | 
						|
				if (nch == '*')
 | 
						|
				{
 | 
						|
					skipcomment();
 | 
						|
					continue;
 | 
						|
				}
 | 
						|
				else if (nch == '/')
 | 
						|
				{
 | 
						|
					skiplinecomment();
 | 
						|
					continue;
 | 
						|
				}
 | 
						|
				else
 | 
						|
					UnGetChar();
 | 
						|
			}
 | 
						|
		}
 | 
						|
		else if (ch == TOKSEP && InputLevel)
 | 
						|
		{
 | 
						|
			continue;
 | 
						|
		}
 | 
						|
		if (!is_wsp(ch))
 | 
						|
			garbage = 1;
 | 
						|
	}
 | 
						|
	if (delim)
 | 
						|
		strict("unclosed opening %c", delim);
 | 
						|
	++LineNumber;
 | 
						|
	return garbage;
 | 
						|
}
 |