/* $Id: plang_test.c 1463 2005-08-21 09:40:11Z mipsator $ */

/* Public Domain */

/* c parser test */
#include <sys/param.h>
#include <stdlib.h>

#include "../compat/pmk_stdio.h"
#include "../compat/pmk_string.h"
#include "../parse_lang.h"

bool ppro(void *, char *, prseng_t *);
bool proc(void *, char *, prseng_t *);
bool decl(void *, char *, prseng_t *);
bool type(void *, char *, prseng_t *);
	
	
bool ppro(void *data, char *pstr, prseng_t *ppe) {
	char	iname[MAXPATHLEN],
		c;

	printf("PPRO: found preprocessor directive '%s'\n", pstr);

	if (strncmp(pstr, RKW_PP_INCL, strlen(pstr) + 1) == 0) {
		prs_c_skip(ppe);

		c = prseng_get_char(ppe);

		prseng_next_char(ppe); /* XXX */

		prseng_get_idtf(ppe, iname, sizeof(iname), PRS_C_IDTF_FNAME);

		switch(c) {
			case '"' :
				printf("PPRO: local include '%s'\n", iname);
				break;

			case '<' :
				printf("PPRO: system include '%s'\n", iname);
				break;
		}

	}

	prs_c_line_skip(ppe);

	return(true);
}

bool proc(void *data, char *pstr, prseng_t *ppe) {
	printf("PROC: found function call '%s'\n", pstr);

	return(true);
}

bool decl(void *data, char *pstr, prseng_t *ppe) {
	printf("PROC: found function declarator '%s'\n", pstr);

	return(true);
}

bool type(void *data, char *pstr, prseng_t *ppe) {
	printf("TYPE: found type '%s'\n", pstr);

	return(true);
}

int main(int argc, char **argv) {
	FILE		*fp;
	prs_cmn_t	 pcmn;

	if (argc != 2) {
		printf("Expecting a filename as argument\n");
		exit(1); /* XXX */
	}

	pcmn.func_ppro = &ppro;
	pcmn.func_proc = &proc;
	pcmn.func_decl = &decl;
	pcmn.func_type = &type;
	pcmn.data = NULL;

	fp = fopen(argv[1], "r");
	if (fp == NULL) {
		printf("cannot open '%s'\n", argv[1]);
	} else {
		prs_c_file(&pcmn, fp);
	}

	fclose(fp);

	return(0);
}



syntax highlighted by Code2HTML, v. 0.9.1