Kanjut SHELL
Server IP : 172.16.15.8  /  Your IP : 18.191.97.133
Web Server : Apache
System : Linux zeus.vwu.edu 4.18.0-553.27.1.el8_10.x86_64 #1 SMP Wed Nov 6 14:29:02 UTC 2024 x86_64
User : apache ( 48)
PHP Version : 7.2.24
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON
Directory (0705) :  /home/drsparks/

[  Home  ][  C0mmand  ][  Upload File  ]

Current File : /home/drsparks/front.c
#include <stdio.h>
#include <ctype.h>

/* Global Declarations */
/* Variables */
int charClass; 
char lexeme [100];
char nextChar;
int lexLen;
int token; 
int nextToken;
FILE *in_fp, *fopen( );

/* Fuction declarations */
void addChar( );
void getChar( );
void getNonBlank( );
int lex( );

/* Character classes */
#define LETTER 0
#define DIGIT 1
#define UNKNOWN 99

/* Token Classes */
#define INT_LIT 10
#define IDENT 11
#define ASSIGN_OP 20
#define ADD_OP 21
#define SUB_OP 22
#define MULT_OP 23
#define DIV_OP 24
#define LEFT_PAREN 25
#define RIGHT_PAREN 26

/***********************************************************/
/* main driver */
main( ) {

/* Open the input data file and process its content */
if ((in_fp = fopen("front.in", "r")) == NULL)
	printf("ERROR - cannot open front.in \n");
else {
	getChar( );
	do {
		lex( );
		} while (nextToken != EOF);
	}
}

/***********************************************************/
/* lookup - a function to lookup operators and parentheses
		and return the token */
int lookup(char ch)	{
	switch (ch) {
		case '(':
			addChar( );
			nextToken = LEFT_PAREN;
			break;

		case ')':
			addChar( );
			nextToken = RIGHT_PAREN;
			break;

		case '+':
			addChar( );
			nextToken = ADD_OP;
			break;

		case '-':
			addChar( );
			nextToken = SUB_OP;
			break;

		case '*':
			addChar( );
			nextToken = MULT_OP;
			break;

		case '/':
			addChar( );
			nextToken = DIV_OP;
			break;

		default:
			addChar( );
			nextToken = EOF;
			break;

		}
	return nextToken;
}

/***********************************************************/
/* addChar - a function to add nextChar to lexeme */
void addChar( ) {
	if (lexLen <= 98) {
		lexeme[lexLen++] = nextChar;
		lexeme[lexLen] = 0;
		}
	else
		print("Error - lexeme is too long \n");
}

/***********************************************************/
/* getChar - a function to add next character of 
		input and determine its character class */
void getChar( ) {
	if ((nextChar = getc(in_fp)) != EOF) {
		if (isalpha(nextChar))
			charClass = LETTER;
		else if (isdigit(nextChar))
			charClass = DIGIT;
		else charClass = UNKNOWN;
	}
	else
		charClass = EOF;
}

/***********************************************************/
/* getNonBlank - a function call getChar until it 
		returns a non-whitespace character */
void getNonBlank( ) {
	lexLen = 0;
	getNonBlank( );
	switch (charClass) {

	/* Parse identifiers */
	case LETTER:
		addChar( );
		getChar( );
		while(charClass == LETTER || charClass == DIGIT) {
			addChar( );
			getChar( );
	} 
	nextToken = IDENT;
	break;
	
	/* Parse integer literals */
	case DIGIT:
		addChar( );
		getChar( );
		while(charClass == DIGIT) {
			addChar( );
			getChar( );
		}
		nextToken = INT_LIT;
		break;

	/* Parentese and operators */
	case UNKNOWN:
		lookup(nextChar);
		getChar( );
		break;

	/* EOF */
	case EOF:
		nextToken = EOF;
		lexeme[0] = 'E';
		lexeme[1] = 'O';
		lexeme[2] = 'F';
		lexeme[3] = 0;
		break;
	} /* End of switch */

	printf("Next token is: %d, Next lexeme is %s\n", 
		nextToken, lexeme);
	return nextToken;
} /* End of function lex */

 	

Stv3n404 - 2023