Merge pull request #1866 from boqwxp/cleanup_test_autotb
[yosys.git] / passes / techmap / libparse.h
1 /*
2 * yosys -- Yosys Open SYnthesis Suite
3 *
4 * Copyright (C) 2012 Clifford Wolf <clifford@clifford.at>
5 *
6 * Permission to use, copy, modify, and/or distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 *
18 */
19
20 #ifndef LIBPARSE_H
21 #define LIBPARSE_H
22
23 #include <stdio.h>
24 #include <string>
25 #include <vector>
26 #include <set>
27
28 namespace Yosys
29 {
30 struct LibertyAst
31 {
32 std::string id, value;
33 std::vector<std::string> args;
34 std::vector<LibertyAst*> children;
35 ~LibertyAst();
36 LibertyAst *find(std::string name);
37 void dump(FILE *f, std::string indent = "", std::string path = "", bool path_ok = false);
38 static std::set<std::string> blacklist;
39 static std::set<std::string> whitelist;
40 };
41
42 struct LibertyParser
43 {
44 std::istream &f;
45 int line;
46 LibertyAst *ast;
47 LibertyParser(std::istream &f) : f(f), line(1), ast(parse()) {}
48 ~LibertyParser() { if (ast) delete ast; }
49
50 /* lexer return values:
51 'v': identifier, string, array range [...] -> str holds the token string
52 'n': newline
53 anything else is a single character.
54 */
55 int lexer(std::string &str);
56
57 LibertyAst *parse();
58 void error();
59 void error(const std::string &str);
60 };
61 }
62
63 #endif
64