ftp.nice.ch/pub/next/unix/developer/pcn.2.0.s.tar.gz#/src/compiler/parser/debug.c

This is debug.c in view mode; [Download] [Up]

#include "co_parse.h"

main(argc, argv)
int argc;
char **argv;
{
    FILE *fp;
    char *file;
    datum *tree;
    int had_errors;
    int error_count;
    int gmax;
    extern char *getenv();
    int print_tree;
    char *name;
    extern int yydebug;
    extern char *rindex();
    int tokenize;

    if (getenv("BACK"))
    {
	int one = 1;
	_p_co_set_backward_compatibility(&one);
    }

    name = rindex(argv[0], '/');
    if (name)
	name++;
    else
	name = argv[0];
    if (strcmp(name, "check") == 0)
	print_tree = 0;
    else
	print_tree = 1;

    if (strcmp(name, "dparse") == 0)
	yydebug = 1;
    else
	yydebug = 0;

    if (strcmp(name, "tokenize") == 0)
	tokenize = 1;
    else
	tokenize = 0;

    if (argc == 1)
    {
	file = "stdin";
	fp = stdin;
    }
    else
    {
	char buf[1024];

	file = argv[1];

	sprintf(buf, "/lib/cpp -DPCN %s", file);
	fp = popen(buf, "r");
	if (fp == NULL)
	{
	    perror("popen");
	    exit(1);
	}
    }

    if (tokenize)
    {
	int tok;
	char tok_buf[100];

	while ((tok = yylex()) != 0)
	{
	    if (tok >= 258 && tok <= 280)
		sprintf(tok_buf, "%d", tok);
	    else
	    {
		tok_buf[0] = tok;
		tok_buf[1] = 0;
	    }

	    if (tok == ID || tok == CHARACTERconstant ||
		tok == INTEGERconstant)
		printf("Got token %s %s\n", tok_buf, yylval->data.sval);
	    else
		printf("Got token %s\n", tok_buf);
	}
	
    }
    else
    {
	_p_co_init_parser(file,  &fp);
	
	do
	{
	    _p_co_parse_one_form(&tree, &had_errors);
	    
	    if (tree && print_tree)
	    {
		printf("Got parse tree:\n");
		_p_co_print(tree);
		_p_co_free_parse_tree(&tree);
	    }
	}
	while (tree);
	
	_p_co_get_parse_error_count(&error_count);
	_p_co_get_global_temp_max(&gmax);
	printf("Parse had %d errors, gmax=%d\n", error_count, gmax);
    }
}

exit_from_c(rc)
int rc;
{
    exit(rc);
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.