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

📄 parse.c

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 C
字号:
/* * Copyright 1993, 2000 Christopher Seiwald. * * This file is part of Jam - see jam.c for Copyright information. *//*  This file is ALSO: *  Copyright 2001-2004 David Abrahams. *  Distributed under the Boost Software License, Version 1.0. *  (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) */# include "jam.h"# include "lists.h"# include "parse.h"# include "scan.h"# include "newstr.h"# include "modules.h"# include "frames.h"/* * 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 *. */static PARSE *yypsave;voidparse_file( char *f, FRAME* frame ){	/* 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(;;)	{	    PARSE *p;	    /* 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. */            parse_evaluate( p, frame );	    parse_free( p );	}}voidparse_save( PARSE *p ){	yypsave = p;}PARSE *parse_make( 	LIST	*(*func)( PARSE *p, FRAME *args ),	PARSE	*left,	PARSE	*right,	PARSE	*third,	char	*string,	char	*string1,	int	num ){	PARSE	*p = (PARSE *)BJAM_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;        p->rulename = 0;                if ( left )        {            p->file = left->file;            p->line = left->line;        }        else        {            yyinput_stream( &p->file, &p->line );        }	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 );        if ( p->rulename )            freestr( p->rulename );		BJAM_FREE( (char *)p );}LIST* parse_evaluate( PARSE *p, FRAME* frame ){    frame->procedure = p;    return (*p->func)(p, frame);}

⌨️ 快捷键说明

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