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