⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parse.c

📁 jam源码
💻 C
字号:
/* * Copyright 1993, 2000 Christopher Seiwald. * * This file is part of Jam - see jam.c for Copyright information. *//* * parse.c - make and destroy parse trees as driven by the parser * * 09/07/00 (seiwald) - ref count on PARSE to avoid freeing when used, *		as per Matt Armstrong. * 09/11/00 (seiwald) - structure reworked to reflect that (*func)() *		returns a LIST *. * 10/22/02 (seiwald) - working return/break/continue statements * 11/04/02 (seiwald) - const-ing for string literals */# include "jam.h"# include "lists.h"# include "parse.h"# include "scan.h"# include "newstr.h"static PARSE *yypsave;voidparse_file( const char *f ){	/* Suspend scan of current file */	/* and push this new file in the stream */	yyfparse(f);	/* Now parse each block of rules and execute it. */	/* Execute it outside of the parser so that recursive */	/* calls to yyrun() work (no recursive yyparse's). */	for(;;)	{	    LOL l;	    PARSE *p;	    int jmp = 0; /* JMP_NONE */	    /* $(<) and $(>) empty in outer scope. */	    lol_init( &l );	    /* Filled by yyparse() calling parse_save() */	    yypsave = 0;	    /* If parse error or empty parse, outta here */	    if( yyparse() || !( p = yypsave ) )		break;	    /* Run the parse tree. */	    list_free( (*(p->func))( p, &l, &jmp ) );	    parse_free( p );	}}voidparse_save( PARSE *p ){	yypsave = p;}PARSE *parse_make( 	LIST		*(*func)( PARSE *p, LOL *args, int *jmp ),	PARSE		*left,	PARSE		*right,	PARSE		*third,	const char 	*string,	const char 	*string1,	int		num ){	PARSE	*p = (PARSE *)malloc( sizeof( PARSE ) );	p->func = func;	p->left = left;	p->right = right;	p->third = third;	p->string = string;	p->string1 = string1;	p->num = num;	p->refs = 1;	return p;}voidparse_refer( PARSE *p ){	++p->refs;}voidparse_free( PARSE *p ){	if( --p->refs )	    return;	if( p->string )	    freestr( p->string );	if( p->string1 )	    freestr( p->string1 );	if( p->left )	    parse_free( p->left );	if( p->right )	    parse_free( p->right );	if( p->third )	    parse_free( p->third );		free( (char *)p );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -