1
0
mirror of git://projects.qi-hardware.com/eda-tools.git synced 2024-12-22 19:47:21 +02:00

b2/: add regular expression conversion debugging (option -R)

This commit is contained in:
Werner Almesberger 2012-06-03 10:10:47 -03:00
parent 12b21f032c
commit da1010f92a
4 changed files with 22 additions and 4 deletions

View File

@ -75,6 +75,15 @@ static void do_substitutions(void)
}
static void parse_re(const char *re)
{
char *res;
subst_match(NULL, re, &res);
printf("%s\n", res);
}
static void dump_hierarchy(struct action act)
{
fields_dump(stderr, act.fields);
@ -124,6 +133,7 @@ static void usage(const char *name)
" -N name for the next file, override the name in diagnostics\n"
" -q var=value ... run substitutions with the specified inputs\n"
" -Q var=value ... run substitutions and then do parametric search\n"
" -R regex parse and print regular expression\n"
, name);
exit(1);
}
@ -178,6 +188,11 @@ int main(int argc, char **argv)
process = add_var;
query = 1;
select_parts = 1;
} else if (!strcmp(argv[i], "-R")) {
i++;
if (!argv[i])
usage(*argv);
parse_re(argv[i]);
} else
usage(*argv);
}

View File

@ -619,7 +619,7 @@ block:
if ($4) {
if ($2 != rel_eq)
yyerror("only = allow for matching");
$$ = subst_match($1, $3);
$$ = subst_match($1, $3, NULL);
$$->u.match.block = $4;
} else {
$$ = subst_assign($1, $2, $3);

View File

@ -113,7 +113,7 @@ static char *prepare_re(const char *re, char *units)
}
struct subst *subst_match(const char *src, const char *re)
struct subst *subst_match(const char *src, const char *re, char **res)
{
char error[1000];
struct subst *sub;
@ -124,7 +124,10 @@ struct subst *subst_match(const char *src, const char *re)
sub->u.match.src = src;
tmp = prepare_re(re, sub->u.match.units);
err = regcomp(&sub->u.match.re, tmp, REG_EXTENDED);
free(tmp);
if (res)
*res = tmp;
else
free(tmp);
if (err) {
regerror(err, &sub->u.match.re, error, sizeof(error));
yyerrorf("%s", error);

View File

@ -76,7 +76,7 @@ struct subst {
extern const char *fn;
struct subst *subst_match(const char *src, const char *re);
struct subst *subst_match(const char *src, const char *re, char **res);
struct subst *subst_assign(const char *dst, enum relop op, const char *pat);
struct subst *subst_end(void);
struct subst *subst_ignore(void);