mirror of
git://projects.qi-hardware.com/eda-tools.git
synced 2024-11-26 13:13:45 +02:00
b2/: add parsing of part characteristics (WIP)
This commit is contained in:
parent
08b1ed1c51
commit
90e541cd7a
2
b2/CHAR
Normal file
2
b2/CHAR
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
FOO R101X FP=0603 R=100R TOL=5x
|
||||||
|
FOO R102Y FP=0603 R=1k TOL=1x
|
@ -6,7 +6,7 @@
|
|||||||
<diode> = D<SCH<Z<TVS; // D < SCH may make sense, the rest doesn't
|
<diode> = D<SCH<Z<TVS; // D < SCH may make sense, the rest doesn't
|
||||||
|
|
||||||
T=<comp> {
|
T=<comp> {
|
||||||
R: { R=#R TOL=%R };
|
R: { R=#R TOL=%R FP=* };
|
||||||
C: { C=#F TOL=%C V=#V };
|
C: { C=#F TOL=%C V=#V };
|
||||||
L: { L=#H TOL=%L I=#A };
|
L: { L=#H TOL=%L I=#A };
|
||||||
D: { C=#F }
|
D: { C=#F }
|
||||||
|
12
b2/boom.c
12
b2/boom.c
@ -36,22 +36,26 @@ static void open_stdin(const char *name)
|
|||||||
|
|
||||||
static void usage(const char *name)
|
static void usage(const char *name)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "usage: %s [file]\n", name);
|
fprintf(stderr, "usage: %s [file ...]\n", name);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
switch (argc) {
|
switch (argc) {
|
||||||
case 1:
|
case 1:
|
||||||
break;
|
break;
|
||||||
case 2:
|
default:
|
||||||
open_stdin(argv[1]);
|
open_stdin(argv[1]);
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
usage(*argv);
|
|
||||||
}
|
}
|
||||||
parse_hierarchy();
|
parse_hierarchy();
|
||||||
|
for (i = 2; i < argc; i++) {
|
||||||
|
open_stdin(argv[i]);
|
||||||
|
parse_characteristics();
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -23,12 +23,14 @@
|
|||||||
extern int yyparse(void);
|
extern int yyparse(void);
|
||||||
|
|
||||||
static int start_token;
|
static int start_token;
|
||||||
|
static int expose_nl;
|
||||||
static int lineno = 1;
|
static int lineno = 1;
|
||||||
|
|
||||||
|
|
||||||
void parse_hierarchy(void)
|
void parse_hierarchy(void)
|
||||||
{
|
{
|
||||||
start_token = START_HIERARCHY;
|
start_token = START_HIERARCHY;
|
||||||
|
expose_nl = 0;
|
||||||
yyparse();
|
yyparse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,6 +38,7 @@ void parse_hierarchy(void)
|
|||||||
void parse_characteristics(void)
|
void parse_characteristics(void)
|
||||||
{
|
{
|
||||||
start_token = START_CHAR;
|
start_token = START_CHAR;
|
||||||
|
expose_nl = 1;
|
||||||
yyparse();
|
yyparse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,7 +65,9 @@ void parse_characteristics(void)
|
|||||||
"/*"([^*]|("*"+([^*/])))*"*"+"/" ;
|
"/*"([^*]|("*"+([^*/])))*"*"+"/" ;
|
||||||
|
|
||||||
[ \t] ;
|
[ \t] ;
|
||||||
\n lineno++;
|
\n { lineno++;
|
||||||
|
if (expose_nl)
|
||||||
|
return TOK_NL; }
|
||||||
^#[^n]*\n lineno++;
|
^#[^n]*\n lineno++;
|
||||||
|
|
||||||
. return *yytext;
|
. return *yytext;
|
||||||
|
45
b2/lang.y
45
b2/lang.y
@ -17,6 +17,7 @@
|
|||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "param.h"
|
#include "param.h"
|
||||||
#include "chr.h"
|
#include "chr.h"
|
||||||
|
#include "db.h"
|
||||||
|
|
||||||
#include "y.tab.h"
|
#include "y.tab.h"
|
||||||
|
|
||||||
@ -68,11 +69,13 @@ static const struct field *top_field(void)
|
|||||||
struct selector *sel;
|
struct selector *sel;
|
||||||
struct condition *cond;
|
struct condition *cond;
|
||||||
struct action act;
|
struct action act;
|
||||||
|
struct part *part;
|
||||||
|
struct param *param;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
%token START_HIERARCHY START_CHAR
|
%token START_HIERARCHY START_CHAR
|
||||||
%token TOK_LE TOK_GE
|
%token TOK_LE TOK_GE TOK_NL
|
||||||
%token <s> WORD
|
%token <s> WORD
|
||||||
|
|
||||||
%type <equiv> nameqs
|
%type <equiv> nameqs
|
||||||
@ -83,11 +86,14 @@ static const struct field *top_field(void)
|
|||||||
%type <sel> selectors
|
%type <sel> selectors
|
||||||
%type <cond> conditions condition
|
%type <cond> conditions condition
|
||||||
%type <act> opt_wildcard action
|
%type <act> opt_wildcard action
|
||||||
|
%type <part> part
|
||||||
|
%type <param> param params
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
all:
|
all:
|
||||||
START_HIERARCHY hierarchy
|
START_HIERARCHY hierarchy
|
||||||
|
| START_CHAR characteristics
|
||||||
;
|
;
|
||||||
|
|
||||||
hierarchy:
|
hierarchy:
|
||||||
@ -337,3 +343,40 @@ format:
|
|||||||
yyerrorf("unknown field \"%s\"", $2);
|
yyerrorf("unknown field \"%s\"", $2);
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
characteristics:
|
||||||
|
| TOK_NL
|
||||||
|
| part characteristics
|
||||||
|
;
|
||||||
|
|
||||||
|
part:
|
||||||
|
WORD WORD params TOK_NL
|
||||||
|
{
|
||||||
|
$$ = part_lookup($1, $2);
|
||||||
|
if (!$$)
|
||||||
|
$$ = part_add($1, $2);
|
||||||
|
if ($$->param)
|
||||||
|
yyerror("parameters already defined");
|
||||||
|
$$->param = $3;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
params:
|
||||||
|
{
|
||||||
|
$$ = NULL;
|
||||||
|
}
|
||||||
|
| param params
|
||||||
|
{
|
||||||
|
$$ = $1;
|
||||||
|
$$->next = $2;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
|
||||||
|
param:
|
||||||
|
WORD '=' WORD
|
||||||
|
{
|
||||||
|
$$ = alloc_type(struct param);
|
||||||
|
$$->u.name = $1;
|
||||||
|
$$->value.u.name = $3;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
@ -69,6 +69,15 @@ struct value {
|
|||||||
} u;
|
} u;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct param {
|
||||||
|
union {
|
||||||
|
const char *name;
|
||||||
|
const struct field *field;
|
||||||
|
} u;
|
||||||
|
struct value value;
|
||||||
|
struct param *next;
|
||||||
|
};
|
||||||
|
|
||||||
struct param_ops {
|
struct param_ops {
|
||||||
int (*eval)(const struct format *fmt, const char *s,
|
int (*eval)(const struct format *fmt, const char *s,
|
||||||
struct value *res);
|
struct value *res);
|
||||||
|
Loading…
Reference in New Issue
Block a user