1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
use crate::*;

// -----------------------------------------------------------------------------

#[derive(Clone, Debug, PartialEq, Node)]
pub struct ConfigDeclaration {
    pub nodes: (
        Keyword,
        ConfigIdentifier,
        Symbol,
        Vec<(LocalParameterDeclaration, Symbol)>,
        DesignStatement,
        Vec<ConfigRuleStatement>,
        Keyword,
        Option<(Symbol, ConfigIdentifier)>,
    ),
}

#[derive(Clone, Debug, PartialEq, Node)]
pub struct DesignStatement {
    pub nodes: (
        Keyword,
        Vec<(Option<(LibraryIdentifier, Symbol)>, CellIdentifier)>,
        Symbol,
    ),
}

#[derive(Clone, Debug, PartialEq, Node)]
pub enum ConfigRuleStatement {
    Default(Box<ConfigRuleStatementDefault>),
    InstLib(Box<ConfigRuleStatementInstLib>),
    InstUse(Box<ConfigRuleStatementInstUse>),
    CellLib(Box<ConfigRuleStatementCellLib>),
    CellUse(Box<ConfigRuleStatementCellUse>),
}

#[derive(Clone, Debug, PartialEq, Node)]
pub struct ConfigRuleStatementDefault {
    pub nodes: (DefaultClause, LiblistClause, Symbol),
}

#[derive(Clone, Debug, PartialEq, Node)]
pub struct ConfigRuleStatementInstLib {
    pub nodes: (InstClause, LiblistClause, Symbol),
}

#[derive(Clone, Debug, PartialEq, Node)]
pub struct ConfigRuleStatementInstUse {
    pub nodes: (InstClause, UseClause, Symbol),
}

#[derive(Clone, Debug, PartialEq, Node)]
pub struct ConfigRuleStatementCellLib {
    pub nodes: (CellClause, LiblistClause, Symbol),
}

#[derive(Clone, Debug, PartialEq, Node)]
pub struct ConfigRuleStatementCellUse {
    pub nodes: (CellClause, UseClause, Symbol),
}

#[derive(Clone, Debug, PartialEq, Node)]
pub struct DefaultClause {
    pub nodes: (Keyword,),
}

#[derive(Clone, Debug, PartialEq, Node)]
pub struct InstClause {
    pub nodes: (Keyword, InstName),
}

#[derive(Clone, Debug, PartialEq, Node)]
pub struct InstName {
    pub nodes: (TopmoduleIdentifier, Vec<(Symbol, InstanceIdentifier)>),
}

#[derive(Clone, Debug, PartialEq, Node)]
pub struct CellClause {
    pub nodes: (Keyword, Option<(LibraryIdentifier, Symbol)>, CellIdentifier),
}

#[derive(Clone, Debug, PartialEq, Node)]
pub struct LiblistClause {
    pub nodes: (Keyword, Vec<LibraryIdentifier>),
}

#[derive(Clone, Debug, PartialEq, Node)]
pub enum UseClause {
    Cell(Box<UseClauseCell>),
    Named(Box<UseClauseNamed>),
    CellNamed(Box<UseClauseCellNamed>),
}

#[derive(Clone, Debug, PartialEq, Node)]
pub struct UseClauseCell {
    pub nodes: (
        Keyword,
        Option<(LibraryIdentifier, Symbol)>,
        CellIdentifier,
        Option<(Symbol, Config)>,
    ),
}

#[derive(Clone, Debug, PartialEq, Node)]
pub struct UseClauseNamed {
    pub nodes: (
        Keyword,
        List<Symbol, NamedParameterAssignment>,
        Option<(Symbol, Config)>,
    ),
}

#[derive(Clone, Debug, PartialEq, Node)]
pub struct UseClauseCellNamed {
    pub nodes: (
        Keyword,
        Option<(LibraryIdentifier, Symbol)>,
        CellIdentifier,
        List<Symbol, NamedParameterAssignment>,
        Option<(Symbol, Config)>,
    ),
}

#[derive(Clone, Debug, PartialEq, Node)]
pub struct Config {
    pub nodes: (Keyword,),
}