/* 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 */ }