scarf_parser/lexer/
keywords.rs1use crate::*;
7
8#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Debug)]
10pub enum StandardVersion {
11 IEEE1364_1995,
12 IEEE1364_2001,
13 IEEE1364_2001Noconfig,
14 IEEE1364_2005,
15 IEEE1800_2005,
16 IEEE1800_2009,
17 IEEE1800_2012,
18 IEEE1800_2017,
19 IEEE1800_2023,
20}
21
22impl Default for StandardVersion {
23 fn default() -> Self {
24 StandardVersion::IEEE1800_2023
25 }
26}
27
28impl<'a> Token<'a> {
29 pub fn keyword_replace(&self, standard: &StandardVersion) -> bool {
32 let valid_in_standard = match self {
33 Token::Automatic
34 | Token::Endgenerate
35 | Token::Generate
36 | Token::Genvar
37 | Token::Localparam
38 | Token::Noshowcancelled
39 | Token::PulsestyleOndetect
40 | Token::PulsestyleOnevent
41 | Token::Showcancelled
42 | Token::Signed
43 | Token::Unsigned => *standard >= StandardVersion::IEEE1364_2001,
44 Token::Cell
45 | Token::Config
46 | Token::Design
47 | Token::Endconfig
48 | Token::Incdir
49 | Token::Include
50 | Token::Instance
51 | Token::Liblist
52 | Token::Library
53 | Token::Use => {
54 (*standard >= StandardVersion::IEEE1364_2001)
55 & (*standard != StandardVersion::IEEE1364_2001Noconfig)
56 }
57 Token::Uwire => *standard >= StandardVersion::IEEE1364_2005,
58 Token::Alias
59 | Token::AlwaysComb
60 | Token::AlwaysFf
61 | Token::AlwaysLatch
62 | Token::Assert
63 | Token::Assume
64 | Token::Before
65 | Token::Bind
66 | Token::Bins
67 | Token::Binsof
68 | Token::Bit
69 | Token::Break
70 | Token::Byte
71 | Token::Chandle
72 | Token::Class
73 | Token::Clocking
74 | Token::Const
75 | Token::Constraint
76 | Token::Context
77 | Token::Continue
78 | Token::Cover
79 | Token::Covergroup
80 | Token::Coverpoint
81 | Token::Cross
82 | Token::Dist
83 | Token::Do
84 | Token::Endclass
85 | Token::Endclocking
86 | Token::Endgroup
87 | Token::Endinterface
88 | Token::Endpackage
89 | Token::Endprogram
90 | Token::Endproperty
91 | Token::Endsequence
92 | Token::Enum
93 | Token::Expect
94 | Token::Export
95 | Token::Extends
96 | Token::Extern
97 | Token::Final
98 | Token::FirstMatch
99 | Token::Foreach
100 | Token::Forkjoin
101 | Token::Iff
102 | Token::IgnoreBins
103 | Token::IllegalBins
104 | Token::Import
105 | Token::Inside
106 | Token::Int
107 | Token::Interface
108 | Token::Intersect
109 | Token::JoinAny
110 | Token::JoinNone
111 | Token::Local
112 | Token::Logic
113 | Token::Longint
114 | Token::Matches
115 | Token::Modport
116 | Token::New
117 | Token::Null
118 | Token::Package
119 | Token::Packed
120 | Token::Priority
121 | Token::Program
122 | Token::Property
123 | Token::Protected
124 | Token::Pure
125 | Token::Rand
126 | Token::Randc
127 | Token::Randcase
128 | Token::Randsequence
129 | Token::Ref
130 | Token::Return
131 | Token::Sequence
132 | Token::Shortint
133 | Token::Shortreal
134 | Token::Solve
135 | Token::Static
136 | Token::String
137 | Token::Struct
138 | Token::Super
139 | Token::Tagged
140 | Token::This
141 | Token::Throughout
142 | Token::Timeprecision
143 | Token::Timeunit
144 | Token::Type
145 | Token::Typedef
146 | Token::Union
147 | Token::Unique
148 | Token::Var
149 | Token::Virtual
150 | Token::Void
151 | Token::WaitOrder
152 | Token::Wildcard
153 | Token::With
154 | Token::Within => *standard >= StandardVersion::IEEE1800_2005,
155 Token::AcceptOn
156 | Token::Checker
157 | Token::Endchecker
158 | Token::Eventually
159 | Token::Global
160 | Token::Implies
161 | Token::Let
162 | Token::Nexttime
163 | Token::RejectOn
164 | Token::Restrict
165 | Token::SAlways
166 | Token::SEventually
167 | Token::SNexttime
168 | Token::SUntil
169 | Token::SUntilWith
170 | Token::Strong
171 | Token::SyncAcceptOn
172 | Token::SyncRejectOn
173 | Token::Unique0
174 | Token::Until
175 | Token::UntilWith
176 | Token::Untyped
177 | Token::Weak => *standard >= StandardVersion::IEEE1800_2009,
178 Token::Implements
179 | Token::Interconnect
180 | Token::Nettype
181 | Token::Soft => *standard >= StandardVersion::IEEE1800_2012,
182 _ => true,
183 };
184 !valid_in_standard
185 }
186}