iverilog/vhdlpp/lexor_keyword.gperf

146 lines
4.5 KiB
Plaintext
Raw Permalink Normal View History

/*
* We need this to prevent -Wextra (-W) from complaining that the mask and
* tokenType values are not initialized for the empty table entries.
*/
%define initializer-suffix ,0,0
2014-11-04 20:21:12 +01:00
%language=C++
%define class-name Lkwd
%{
2014-11-04 20:21:12 +01:00
/* Command-line: gperf -o -i 7 --ignore-case -C -k '1-4,6,9,$' -H keyword_hash -N check_identifier -t lexor_keyword.gperf */
#include "vhdlpp_config.h"
#include <cstring>
#include "compiler.h"
#include "parse_api.h"
#include "parse_wrap.h"
%}
struct lexor_keyword { const char*name; int mask; int tokenType; };
%%
abs, GN_KEYWORD_2008, K_abs
access, GN_KEYWORD_2008, K_access
after, GN_KEYWORD_2008, K_after
alias, GN_KEYWORD_2008, K_alias
all, GN_KEYWORD_2008, K_all
and, GN_KEYWORD_2008, K_and
architecture, GN_KEYWORD_2008, K_architecture
array, GN_KEYWORD_2008, K_array
assert, GN_KEYWORD_2008, K_assert
attribute, GN_KEYWORD_2008, K_attribute
begin, GN_KEYWORD_2008, K_begin
block, GN_KEYWORD_2008, K_block
body, GN_KEYWORD_2008, K_body
buffer, GN_KEYWORD_2008, K_buffer
bus, GN_KEYWORD_2008, K_bus
case, GN_KEYWORD_2008, K_case
component, GN_KEYWORD_2008, K_component
configuration, GN_KEYWORD_2008, K_configuration
constant, GN_KEYWORD_2008, K_constant
context, GN_KEYWORD_2008, K_context
2011-01-28 10:40:38 +01:00
cover, GN_KEYWORD_2008, K_cover
default, GN_KEYWORD_2008, K_default
disconnect, GN_KEYWORD_2008, K_disconnect
downto, GN_KEYWORD_2008, K_downto
else, GN_KEYWORD_2008, K_else
elsif, GN_KEYWORD_2008, K_elsif
end, GN_KEYWORD_2008, K_end
entity, GN_KEYWORD_2008, K_entity
exit, GN_KEYWORD_2008, K_exit
2011-01-28 10:40:38 +01:00
fairness, GN_KEYWORD_2008, K_fairness
file, GN_KEYWORD_2008, K_file
for, GN_KEYWORD_2008, K_for
2011-01-28 10:40:38 +01:00
force, GN_KEYWORD_2008, K_force
function, GN_KEYWORD_2008, K_function
generate, GN_KEYWORD_2008, K_generate
generic, GN_KEYWORD_2008, K_generic
group, GN_KEYWORD_2008, K_group
guarded, GN_KEYWORD_2008, K_guarded
if, GN_KEYWORD_2008, K_if
impure, GN_KEYWORD_2008, K_impure
in, GN_KEYWORD_2008, K_in
inertial, GN_KEYWORD_2008, K_inertial
inout, GN_KEYWORD_2008, K_inout
is, GN_KEYWORD_2008, K_is
label, GN_KEYWORD_2008, K_label
library, GN_KEYWORD_2008, K_library
linkage, GN_KEYWORD_2008, K_linkage
literal, GN_KEYWORD_2008, K_literal
loop, GN_KEYWORD_2008, K_loop
map, GN_KEYWORD_2008, K_map
mod, GN_KEYWORD_2008, K_mod
nand, GN_KEYWORD_2008, K_nand
new, GN_KEYWORD_2008, K_new
next, GN_KEYWORD_2008, K_next
nor, GN_KEYWORD_2008, K_nor
2011-03-09 04:31:57 +01:00
not, GN_KEYWORD_2008, K_not
null, GN_KEYWORD_2008, K_null
of, GN_KEYWORD_2008, K_of
on, GN_KEYWORD_2008, K_on
open, GN_KEYWORD_2008, K_open
or, GN_KEYWORD_2008, K_or
others, GN_KEYWORD_2008, K_others
out, GN_KEYWORD_2008, K_out
package, GN_KEYWORD_2008, K_package
port, GN_KEYWORD_2008, K_port
postponed, GN_KEYWORD_2008, K_postponed
procedure, GN_KEYWORD_2008, K_procedure
process, GN_KEYWORD_2008, K_process
property, GN_KEYWORD_2008, K_property
protected, GN_KEYWORD_2008, K_protected
pure, GN_KEYWORD_2008, K_pure
range, GN_KEYWORD_2008, K_range
record, GN_KEYWORD_2008, K_record
register, GN_KEYWORD_2008, K_register
reject, GN_KEYWORD_2008, K_reject
2011-01-28 10:40:38 +01:00
release, GN_KEYWORD_2008, K_release
rem, GN_KEYWORD_2008, K_rem
report, GN_KEYWORD_2008, K_report
restrict, GN_KEYWORD_2008, K_restrict
return, GN_KEYWORD_2008, K_return
reverse_range, GN_KEYWORD_2008, K_reverse_range
rol, GN_KEYWORD_2008, K_rol
ror, GN_KEYWORD_2008, K_ror
select, GN_KEYWORD_2008, K_select
2011-01-28 10:40:38 +01:00
sequence, GN_KEYWORD_2008, K_sequence
severity, GN_KEYWORD_2008, K_severity
signal, GN_KEYWORD_2008, K_signal
shared, GN_KEYWORD_2008, K_shared
sla, GN_KEYWORD_2008, K_sla
sll, GN_KEYWORD_2008, K_sll
sra, GN_KEYWORD_2008, K_sra
srl, GN_KEYWORD_2008, K_srl
2011-01-28 10:40:38 +01:00
strong, GN_KEYWORD_2008, K_strong
subtype, GN_KEYWORD_2008, K_subtype
then, GN_KEYWORD_2008, K_then
to, GN_KEYWORD_2008, K_to
transport, GN_KEYWORD_2008, K_transport
type, GN_KEYWORD_2008, K_type
unaffected, GN_KEYWORD_2008, K_unaffected
units, GN_KEYWORD_2008, K_units
until, GN_KEYWORD_2008, K_until
use, GN_KEYWORD_2008, K_use
variable, GN_KEYWORD_2008, K_variable
2011-01-28 10:40:38 +01:00
vmode, GN_KEYWORD_2008, K_vmode
vprop, GN_KEYWORD_2008, K_vprop
vunit, GN_KEYWORD_2008, K_vunit
wait, GN_KEYWORD_2008, K_wait
when, GN_KEYWORD_2008, K_when
while, GN_KEYWORD_2008, K_while
with, GN_KEYWORD_2008, K_with
xnor, GN_KEYWORD_2008, K_xnor
xor, GN_KEYWORD_2008, K_xor
%%
int lexor_keyword_mask = GN_KEYWORD_2008;
int lexor_keyword_code(const char*str, unsigned nstr)
{
2014-11-04 20:21:12 +01:00
const struct lexor_keyword*rc = Lkwd::check_identifier(str, nstr);
if (rc == 0)
return IDENTIFIER;
else if ((rc->mask & lexor_keyword_mask) == 0)
return IDENTIFIER;
else
return rc->tokenType;
}