Metropoli BBS
VIEWER: aplparsf.c MODE: TEXT (ASCII)
/* Copyright (C) 1992 by Thomas Glen Smith.  All Rights Reserved. */
/* aplparsf APL2 V1.0.0 ************************************************
* Called from aplparse for each newly parsed token to perform special  *
* processing, and look for syntactical errors based on token_code.     *
***********************************************************************/
#define INCLUDES APLCHDEF+APLTOKEN
#include "includes.h"
void aplparsf(cur,ss,t,u,bracket_count_ptr,paren_count_ptr)
Apltoken cur;    /* most recent token */
char **ss;               /* pointer in string yet to be tokenized. */
char *t;                 /* points to start of most recent token. */
char *u;                 /* points after end of string to tokenize. */
int *bracket_count_ptr;  /* count for matching brackets */
int *paren_count_ptr;    /* count for matching parentheses. */
{
     Aplpnam; Aplpnum; Aplquad; Aplquote;

     switch (cur->token_code) {
          case ALPHABET: /* name */
               aplpnam(cur,t,ss,u);
               cur->token_code = OPERAND_TOKEN;
               break;
          case CAP_NULL:
               aplpnam(cur,t,ss,u);
               cur->token_code = CAP_NULL;
               break;
          case DIGIT:
          case DOT:
          case OVERBAR:
               aplpnum(cur,ss,u); /* numeric constant */
               break;
          case LEFT_BRACKET: (*bracket_count_ptr)++; break;
          case LEFT_PAREN: (*paren_count_ptr)++; break;
          case QUAD: aplquad(cur,ss,u); /* Lio or Lav */ break;
          case QUOTE: aplquote(cur,ss,u); /* quoted string */ break;
          case RIGHT_BRACKET:
               if (0 > --(*bracket_count_ptr)) {
                    cur->token_code = MESSAGE_TOKEN;
                    cur->token_ptr.token_string =
                         "unbalanced brackets";
               }
               break;
          case RIGHT_PAREN:
               if (0 > --(*paren_count_ptr)) {
                    cur->token_code =  MESSAGE_TOKEN;
                    cur->token_ptr.token_string =
                         "unbalanced parentheses";
               }
               break;
          case UNKNOWN: /* bad character */
               cur->token_code = MESSAGE_TOKEN;
               cur->token_ptr.token_string = "Unknown character.";
               break;
     } /* end switch */
}
[ RETURN TO DIRECTORY ]