14 if(settings
.tokens
) { printf("<class>\n"); }
16 if(has_more_tokens(pC
) == true)
21 compiler_error(40, "Incomplete Class Declaration", pS
, pC
, pT
);
24 if(strcmp(pT
, "class") == 0 ) {
25 if(settings
.tokens
) { printf("\t<keyword>%s</keyword>\n", pT
); }
27 compiler_error(43, "Incorrect Token Found: Must be 'class'", pS
, pC
, pT
);
30 /* look for class name */
31 if(has_more_tokens(pC
) == true)
36 compiler_error(40, "Incomplete Class Declaration", pS
, pC
, pT
);
39 if (tk
== IDENTIFIER
){
40 if(settings
.tokens
) { printf("\t<identifier>%s</identifier>\n", pT
); }
42 compiler_error(44, "Could Not Find Class Name or Subroutine Name at This Location", pS
, pC
, pT
);
45 /* look for '{' symbol */
46 if(has_more_tokens(pC
) == true)
51 compiler_error(40, "Incomplete Class Declaration", pS
, pC
, pT
);
55 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
57 compiler_error(44, "Could Not Find Class Name or Subroutine Name at This Location", pS
, pC
, pT
);
60 if(has_more_tokens(pC
) == true)
65 compiler_error(40, "Incomplete Class Declaration", pS
, pC
, pT
);
68 while(strcmp(pT
, "static") == 0 || strcmp(pT
, "field") == 0)
70 parse_class_var_dec();
71 if(has_more_tokens(pC
) == true)
76 compiler_error(40, "Incomplete Class Declaration", pS
, pC
, pT
);
82 if(settings
.tokens
) { printf("</class>\n"); }
85 void parse_class_var_dec()
87 if(settings
.tokens
) { printf("<classVarDec>\n"); }
89 /* look for 'static' or 'field' */
90 if(settings
.tokens
) { printf("\t<identifier>%s</identifier>\n", pT
); }
91 if(has_more_tokens(pC
) == true)
96 compiler_error(40, "Incomplete Class Declaration", pS
, pC
, pT
);
100 if(tk
== IDENTIFIER
) {
101 if(settings
.tokens
) { printf("\t<identifier>%s</identifier>\n", pT
); }
102 } else if (tk
== KEYWORD
) {
103 if(strcmp(pT
, "int") == 0 || strcmp(pT
, "char") == 0 || strcmp(pT
, "boolean") == 0) {
104 if(settings
.tokens
) { printf("\t<keyword>%s</keyword>\n", pT
); }
106 compiler_error(41, "Token Must be Data Type.", pS
, pC
, pT
);
109 compiler_error(41, "Token Must be Data Type", pS
, pC
, pT
);
112 /* look or variable name */
113 if(has_more_tokens(pC
) == true)
115 pC
= advance(pC
, pT
);
118 compiler_error(40, "Incomplete Class Declaration", pS
, pC
, pT
);
120 if(tk
== IDENTIFIER
) {
121 if(settings
.tokens
) { printf("\t<identifier>%s</identifier>\n", pT
); }
123 compiler_error(42, "Token Must be Variable Name", pS
, pC
, pT
);
127 if(has_more_tokens(pC
) == true)
129 pC
= advance(pC
, pT
);
132 compiler_error(40, "Incomplete Class Declaration", pS
, pC
, pT
);
137 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
138 if(has_more_tokens(pC
) == true)
140 pC
= advance(pC
, pT
);
143 compiler_error(40, "Incomplete Class Declaration", pS
, pC
, pT
);
145 if(tk
== IDENTIFIER
) {
146 if(settings
.tokens
) { printf("\t<identifier>%s</identifier>\n", pT
); }
148 compiler_error(42, "Token Must be Variable Name", pS
, pC
, pT
);
150 if(has_more_tokens(pC
) == true)
152 pC
= advance(pC
, pT
);
155 compiler_error(40, "Incomplete Class Declaration", pS
, pC
, pT
);
157 } while (*pT
== ',');
161 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
163 compiler_error(33, "Could Not Find ';' Symbol At This Location", pS
, pC
, pT
);
166 if(settings
.tokens
) { printf("</classVarDec>\n"); }
169 void parse_subroutine()
171 if(settings
.tokens
) { printf("<subroutineDec>\n"); }
174 if(strcmp(pT
, "constructor") == 0 || strcmp(pT
, "function") == 0 || strcmp(pT
, "method") == 0)
176 if(settings
.tokens
) { printf("\t<keyword>%s</keyword>\n", pT
); }
178 compiler_error(8, "Incorrect Token Found: Must be 'constructor', 'function', or 'method'", pS
, pC
, pT
);
182 /* look for return type of function */
183 if(has_more_tokens(pC
) == true)
185 pC
= advance(pC
, pT
);
187 if(tk
== KEYWORD
|| tk
== IDENTIFIER
)
189 if(strcmp(pT
, "void") == 0)
191 if(settings
.tokens
) { printf("\t<keyword>%s</keyword>\n", pT
); }
193 if(settings
.tokens
) { printf("\t<type>%s</type>\n", pT
); }
196 compiler_error(9, "Could Not Complete Parse Tree of Subroutine. Incomplete Program", pS
, pC
, pT
);
199 compiler_error(29, "Incorrect Token Type", pS
, pC
, pT
);
202 /* look for subroutine name */
203 if(has_more_tokens(pC
) == true)
205 pC
= advance(pC
, pT
);
209 if(settings
.tokens
) { printf("\t<identifier>%s</identifier>\n", pT
); }
211 compiler_error(9, "Could Not Complete Parse Tree of Subroutine. Incomplete Program", pS
, pC
, pT
);
214 compiler_error(10, "Incorrect Token Type. Looking for Keyword or Identifier.", pS
, pC
, pT
);
217 /* look for symbol '(' that specifies beginning of parameter list */
218 if(has_more_tokens(pC
) == true)
220 pC
= advance(pC
, pT
);
224 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
227 compiler_error(12, "Parameter List for Function Missing", pS
, pC
, pT
);
230 compiler_error(11, "Name of Function Must be an Identifier", pS
, pC
, pT
);
233 /* look for end of parameter list */
236 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n<subroutineBody>\n", pT
); }
238 compiler_error(13, "Could Not Complete Parameter List for Function", pS
, pC
, pT
);
241 /* look for opening brace for block */
242 if(has_more_tokens(pC
) == true)
244 pC
= advance(pC
, pT
);
248 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
249 if(has_more_tokens(pC
) == true)
251 pC
= advance(pC
, pT
);
254 compiler_error(17, "Could Not Complete Variable List of Subroutine. Incomplete Program", pS
, pC
, pT
);
259 compiler_error(9, "Could Not Complete Parse Tree of Subroutine. Incomplete Program", pS
, pC
, pT
);
264 if(settings
.tokens
) { printf("</subroutineBody>\n</subroutineDec>\n"); }
269 if(*pT
== '(') { if(settings
.tokens
) { printf("<parameterList>\n"); } }
271 /* look for datatype in parameter list */
272 if(has_more_tokens(pC
) == true)
274 pC
= advance(pC
, pT
);
277 if(strcmp(pT
, "int") == 0 || strcmp(pT
, "char") == 0 || strcmp(pT
, "boolean") == 0)
279 if(settings
.tokens
) { printf("\t<keyword>%s</keyword>\n", pT
); }
281 compiler_error(14, "Incorrect Token Type in Parameter List. Looking for Datatype name.", pS
, pC
, pT
);
283 } else if(tk
== SYMBOL
&& *pT
== ')') { if(settings
.tokens
) { printf("</parameterList>\n"); } return; }
285 compiler_error(13, "Could Not Complete Parameter List for Function", pS
, pC
, pT
);
288 /* look for identifier for this parameter */
289 if(has_more_tokens(pC
) == true)
291 pC
= advance(pC
, pT
);
293 if(tk
== IDENTIFIER
) {
294 if(settings
.tokens
) { printf("\t<identifier>%s</identifier>\n", pT
); }
296 compiler_error(15, "Incorrect Token Type in Parameter List. Looking for Variable Identifier.", pS
, pC
, pT
);
299 compiler_error(13, "Could Not Complete Parameter List for Function", pS
, pC
, pT
);
302 /* are there more parameters? */
303 if(has_more_tokens(pC
) == true)
305 pC
= advance(pC
, pT
);
308 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
310 } else if (*pT
== ')') { /* exit parse_params */
311 if(settings
.tokens
) { printf("</parameterList>\n"); }
314 compiler_error(16, "Incorrect Token Type in Parameter List. Looking for ',' or ')'", pS
, pC
, pT
);
317 compiler_error(13, "Could Not Complete Parameter List for Function", pS
, pC
, pT
);
323 /* look for token named 'var' */
324 if(strcmp(pT
, "var") == 0)
326 if(settings
.tokens
) { printf("<varDec>\n\t<symbol>%s</symbol>\n", pT
); }
329 /* look for variable data type */
330 if(has_more_tokens(pC
) == true)
332 pC
= advance(pC
, pT
);
334 if(strcmp(pT
, "int") == 0 || strcmp(pT
, "char") == 0 || strcmp(pT
, "boolean") == 0 || strcmp(pT
, "Array") == 0)
336 if(settings
.tokens
) { printf("\t<identifier>%s</identifier>\n", pT
); }
338 } else if (tk
== IDENTIFIER
) { /* could also be a custom class name */
339 if(settings
.tokens
) { printf("\t<identifier>%s</identifier>\n", pT
); }
341 compiler_error(17, "Could Not Complete Variable List of Subroutine. Incomplete Program", pS
, pC
, pT
);
345 /* look for identifier(s) for variable(s) */
347 if(has_more_tokens(pC
) == true)
349 pC
= advance(pC
, pT
);
352 compiler_error(17, "Could Not Complete Variable List of Subroutine. Incomplete Program", pS
, pC
, pT
);
356 if(settings
.tokens
) { printf("\t<identifier>%s</identifier>\n", pT
); }
359 if(has_more_tokens(pC
) == true)
361 pC
= advance(pC
, pT
);
364 compiler_error(17, "Could Not Complete Variable List of Subroutine. Incomplete Program", pS
, pC
, pT
);
368 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
370 } while (*pT
== ',');
372 if(has_more_tokens(pC
) == true)
374 pC
= advance(pC
, pT
);
377 compiler_error(17, "Could Not Complete Variable List of Subroutine. Incomplete Program", pS
, pC
, pT
);
382 void parse_statements()
384 if(settings
.tokens
) { printf("<statements>\n"); }
386 if(strcmp(pT
, "let") == 0)
389 } else if(strcmp(pT
, "if") == 0)
392 } else if(strcmp(pT
, "while") == 0)
395 } else if(strcmp(pT
, "do") == 0)
398 } else if(strcmp(pT
, "return") == 0)
403 if(has_more_tokens(pC
) == true)
405 pC
= advance(pC
, pT
);
409 } while (strcmp(pT
, "let") == 0 || strcmp(pT
, "if") == 0 || strcmp(pT
, "while") == 0 || \
410 strcmp(pT
, "do") == 0 || strcmp(pT
, "return") == 0 );
411 if(settings
.tokens
) { printf("</statements>\n"); }
416 if(settings
.tokens
) { printf("<doStatement>\n\t<keyword>do</keyword>\n"); }
418 if(has_more_tokens(pC
) == true)
420 pC
= advance(pC
, pT
);
423 compiler_error(20, "Could Not Complete Do Statement. Incomplete Program", pS
, pC
, pT
);
426 /* must be an identifier */
427 if(tk
== IDENTIFIER
) {
428 parse_subroutine_call();
430 compiler_error(30, "Subroutine Name Must Be Listed Here", pS
, pC
, pT
);
435 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
437 compiler_error(33, "Could Not Find ';' Symbol At This Location.", pS
, pC
, pT
);
440 if(settings
.tokens
) { printf("</doStatement>\n"); }
446 if(settings
.tokens
) { printf("<letStatement>\n\t<keyword>let</keyword>\n"); }
447 if(has_more_tokens(pC
) == true)
449 pC
= advance(pC
, pT
);
452 compiler_error(20, "Could Not Complete Let Statement. Incomplete Program", pS
, pC
, pT
);
455 /* look for an identifier - must be a variable name */
458 if(settings
.tokens
) { printf("\t<identifier>%s</identifier>\n", pT
); }
460 compiler_error(31, "Could Not Find Identifier At This Location", pS
, pC
, pT
);
463 /* optional '[' for an array offset value */
464 if(has_more_tokens(pC
) == true)
466 pC
= advance(pC
, pT
);
469 compiler_error(20, "Could Not Complete Let Statement. Incomplete Program", pS
, pC
, pT
);
475 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
476 if(has_more_tokens(pC
) == true)
478 pC
= advance(pC
, pT
);
481 compiler_error(20, "Could Not Complete Let Statement. Incomplete Program", pS
, pC
, pT
);
486 /* should be closing ']' here if variable was array */
487 if(found_array
&& *pT
== ']')
489 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
490 if(has_more_tokens(pC
) == true)
492 pC
= advance(pC
, pT
);
495 compiler_error(20, "Could Not Find ']' Symbol At This Location", pS
, pC
, pT
);
501 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
503 compiler_error(32, "Could Not Find '=' Symbol At This Location", pS
, pC
, pT
);
506 if(has_more_tokens(pC
) == true)
508 pC
= advance(pC
, pT
);
511 compiler_error(20, "Could Not Complete Let Statement. Incomplete Program", pS
, pC
, pT
);
518 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
520 compiler_error(33, "Could Not Find ';' Symbol At This Location", pS
, pC
, pT
);
523 if(settings
.tokens
) { printf("</letStatement>\n"); }
528 if(settings
.tokens
) { printf("<whileStatement>\n\t<identifier>%s</identifier>\n", pT
); }
530 if(has_more_tokens(pC
) == true)
532 pC
= advance(pC
, pT
);
535 compiler_error(47, "Could Not Complete While Statement. Incomplete Program", pS
, pC
, pT
);
540 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
542 compiler_error(39, "Could Not Find '(' Symbol At This Location", pS
, pC
, pT
);
545 if(has_more_tokens(pC
) == true)
547 pC
= advance(pC
, pT
);
550 compiler_error(47, "Could Not Complete While Statement. Incomplete Program", pS
, pC
, pT
);
557 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
559 compiler_error(38, "Could Not Find ')' Symbol At This Location", pS
, pC
, pT
);
562 if(has_more_tokens(pC
) == true)
564 pC
= advance(pC
, pT
);
567 compiler_error(47, "Could Not Complete While Statement. Incomplete Program", pS
, pC
, pT
);
572 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
574 compiler_error(45, "Could Not Find '{' Symbol At This Location", pS
, pC
, pT
);
577 if(has_more_tokens(pC
) == true)
579 pC
= advance(pC
, pT
);
582 compiler_error(47, "Could Not Complete While Statement. Incomplete Program", pS
, pC
, pT
);
589 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
591 compiler_error(46, "Could Not Find '}' Symbol At This Location", pS
, pC
, pT
);
594 if(settings
.tokens
) { printf("</whileStatement>\n"); }
599 if(settings
.tokens
) { printf("<returnStatement>\n\t<identifier>%s</identifier>\n", pT
); }
602 if(has_more_tokens(pC
) == true)
604 pC
= advance(pC
, pT
);
607 compiler_error(20, "Could Not Complete Let Statement. Incomplete Program", pS
, pC
, pT
);
610 if (*pT
!= ';') { parse_expression(); }
614 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
616 compiler_error(33, "Could Not Find ';' Symbol At This Location", pS
, pC
, pT
);
618 if(settings
.tokens
) { printf("</returnStatement>\n"); }
623 if(settings
.tokens
) { printf("<ifStatement>\n\t<identifier>%s</identifier>\n", pT
); }
625 if(has_more_tokens(pC
) == true)
627 pC
= advance(pC
, pT
);
630 compiler_error(47, "Could Not Complete If Statement. Incomplete Program", pS
, pC
, pT
);
635 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
637 compiler_error(39, "Could Not Find '(' Symbol At This Location", pS
, pC
, pT
);
640 if(has_more_tokens(pC
) == true)
642 pC
= advance(pC
, pT
);
645 compiler_error(47, "Could Not Complete If Statement. Incomplete Program", pS
, pC
, pT
);
652 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
654 compiler_error(38, "Could Not Find ')' Symbol At This Location", pS
, pC
, pT
);
657 if(has_more_tokens(pC
) == true)
659 pC
= advance(pC
, pT
);
662 compiler_error(47, "Could Not Complete If Statement. Incomplete Program", pS
, pC
, pT
);
667 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
669 compiler_error(45, "Could Not Find '{' Symbol At This Location", pS
, pC
, pT
);
672 if(has_more_tokens(pC
) == true)
674 pC
= advance(pC
, pT
);
677 compiler_error(47, "Could Not Complete If Statement. Incomplete Program", pS
, pC
, pT
);
684 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
686 compiler_error(46, "Could Not Find '}' Symbol At This Location", pS
, pC
, pT
);
689 if(settings
.tokens
) { printf("</ifStatement>\n"); }
692 void parse_expression()
694 if(settings
.tokens
) { printf("\t<expression>\n"); }
697 if(strchr(BINARY_OP
, *pT
) != NULL
)
699 if(settings
.tokens
) { printf("\t<operator>%s</operator>\n", pT
); }
700 if(has_more_tokens(pC
) == true)
702 pC
= advance(pC
, pT
);
705 compiler_error(34, "Could Not Parse Expression. Incomplete Program", pS
, pC
, pT
);
709 if(settings
.tokens
) { printf("\t</expression>\n"); }
714 if(settings
.tokens
) { printf("<term>\n"); }
717 if(settings
.tokens
) { printf("\t<intConst>%s</intConst>\n", pT
); }
718 if(has_more_tokens(pC
) == true)
720 pC
= advance(pC
, pT
);
723 compiler_error(25, "Could Not Complete Term. Incomplete Program", pS
, pC
, pT
);
728 if(strchr(UNARY_OP
, *pT
) != NULL
)
730 if(settings
.tokens
) { printf("<unaryOperator>%s</unaryOperator>\n", pT
); }
731 if(has_more_tokens(pC
) == true)
733 pC
= advance(pC
, pT
);
736 compiler_error(25, "Could Not Complete Term. Incomplete Program", pS
, pC
, pT
);
743 if(settings
.tokens
) { printf("\t<identifier>%s</identifier>\n", pT
); }
745 if(has_more_tokens(pC
) == true)
747 pC
= advance(pC
, pT
);
750 compiler_error(25, "Could Not Complete Term. Incomplete Program", pS
, pC
, pT
);
757 if(settings
.tokens
) { printf("\t<keyword>%s</keywordr>\n", pT
); }
759 if(has_more_tokens(pC
) == true)
761 pC
= advance(pC
, pT
);
764 compiler_error(25, "Could Not Complete Term. Incomplete Program", pS
, pC
, pT
);
771 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
773 if(has_more_tokens(pC
) == true)
775 pC
= advance(pC
, pT
);
778 compiler_error(25, "Could Not Complete Term. Incomplete Program", pS
, pC
, pT
);
783 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
784 /* parse_expression(); */
786 compiler_error(26, "Improperly Terminated Array Expression. Symbol ']' Required at this Location.", pS
, pC
, pT
);
789 if(has_more_tokens(pC
) == true)
791 pC
= advance(pC
, pT
);
794 compiler_error(25, "Could Not Complete Term. Incomplete Program", pS
, pC
, pT
);
798 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
800 if(has_more_tokens(pC
) == true)
802 pC
= advance(pC
, pT
);
805 compiler_error(25, "Could Not Complete Term. Incomplete Program", pS
, pC
, pT
);
811 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
813 compiler_error(38, "Could Not Find Symbol ')' At This Location", pS
, pC
, pT
);
816 if(has_more_tokens(pC
) == true)
818 pC
= advance(pC
, pT
);
821 compiler_error(25, "Could Not Complete Term. Incomplete Program", pS
, pC
, pT
);
825 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
827 if(has_more_tokens(pC
) == true)
829 pC
= advance(pC
, pT
);
832 compiler_error(25, "Could Not Complete Term. Incomplete Program", pS
, pC
, pT
);
835 parse_subroutine_call();
840 if(settings
.tokens
) { printf("</term>\n"); }
843 void parse_subroutine_call()
845 if(settings
.tokens
) { printf("\t<subroutineCall>\n"); }
848 if(settings
.tokens
) { printf("\t<identifier>%s</identifier>\n", pT
); }
850 compiler_error(35, "Could Not Find Class Name or Subroutine Name at This Location", pS
, pC
, pT
);
853 if(has_more_tokens(pC
) == true)
855 pC
= advance(pC
, pT
);
858 compiler_error(36, "Could Not Complete Subroutine Call. Incomplete Program", pS
, pC
, pT
);
862 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
863 if(has_more_tokens(pC
) == true)
865 pC
= advance(pC
, pT
);
868 compiler_error(36, "Could Not Complete Subroutine Call. Incomplete Program", pS
, pC
, pT
);
872 if(settings
.tokens
) { printf("\t<identifier>%s</identifier>\n", pT
); }
874 compiler_error(37, "Could Not Find Method Name or Subroutine Name at This Location", pS
, pC
, pT
);
878 if(*pT
!= '(') /* this for calls with no class name at beginning */
880 if(has_more_tokens(pC
) == true)
882 pC
= advance(pC
, pT
);
885 compiler_error(36, "Could Not Complete Subroutine Call. Incomplete Program", pS
, pC
, pT
);
891 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
893 compiler_error(39, "Could Not Find Symbol '(' At This Location", pS
, pC
, pT
);
896 if(has_more_tokens(pC
) == true)
898 pC
= advance(pC
, pT
);
901 compiler_error(36, "Could Not Complete Subroutine Call. Incomplete Program", pS
, pC
, pT
);
908 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
910 compiler_error(38, "Could Not Find Symbol ')' At This Location", pS
, pC
, pT
);
913 if(has_more_tokens(pC
) == true)
915 pC
= advance(pC
, pT
);
918 compiler_error(24, "Could Not Complete Subroutine Call. Incomplete Program", pS
, pC
, pT
);
921 if(settings
.tokens
) { printf("\t</subroutineCall>\n"); }
924 void parse_expr_lst()
926 if(settings
.tokens
) { printf("\t<expressionList>\n"); }
931 if(settings
.tokens
) { printf("\t<symbol>%s</symbol>\n", pT
); }
932 if(has_more_tokens(pC
) == true)
934 pC
= advance(pC
, pT
);
937 compiler_error(24, "Could Not Complete Expression List. Incomplete Program", pS
, pC
, pT
);
943 if(settings
.tokens
) { printf("\t</expressionList>\n"); }