V10/cmd/gre/egparen.c

#include	"re.h"
#include	"lre.h"
#include	"hdr.h"

static int egparen(Expr *e);

int
re_paren(re_re *re)
{
	return egparen(re->root);
}

static int
egparen(Expr *e)
{
	if(e == 0)
		return(0);
	switch(e->type)
	{
	case Null:
	case Literal:
	case Dot:
	case Carat:
	case Dollar:
	case Backref:
	case Compcharclass:
	case Charclass:
		break;
	case Cat:
	case Alternate:
		return(egparen(e->l)+egparen(e->r));
	case Star:
	case Plus:
	case Quest:
	case EOP:
		return(egparen(e->l));
	case Group:
		return(1+egparen(e->l));
	}
	return(0);
}