2010-12-13 05:02:18 +01:00
|
|
|
/*
|
|
|
|
|
* 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
|
|
|
|
|
|
|
|
|
|
%{
|
|
|
|
|
/* Command-line: gperf -o -i 1 --ignore-case -C -k 1-3,$ -L C -H keyword_hash -N check_identifier -tT lexor_keyword.gperf */
|
|
|
|
|
|
|
|
|
|
#include "vhdlpp_config.h"
|
|
|
|
|
#include <cstring>
|
|
|
|
|
#include "compiler.h"
|
2011-01-03 07:30:09 +01:00
|
|
|
#include "parse_api.h"
|
|
|
|
|
#include "parse_wrap.h"
|
2010-12-13 05:02:18 +01:00
|
|
|
|
|
|
|
|
%}
|
|
|
|
|
struct lexor_keyword { const char*name; int mask; int tokenType; };
|
|
|
|
|
%%
|
|
|
|
|
abs, GN_KEYWORD_2008, K_abs
|
|
|
|
|
access, GN_KEYWORD_2008, K_access
|
2011-01-27 15:13:38 +01:00
|
|
|
after, GN_KEYWORD_2008, K_after
|
|
|
|
|
alias, GN_KEYWORD_2008, K_alias
|
2010-12-15 06:36:47 +01:00
|
|
|
all, GN_KEYWORD_2008, K_all
|
|
|
|
|
and, GN_KEYWORD_2008, K_and
|
2010-12-13 05:02:18 +01:00
|
|
|
architecture, GN_KEYWORD_2008, K_architecture
|
2011-01-27 15:13:38 +01:00
|
|
|
array, GN_KEYWORD_2008, K_array
|
|
|
|
|
assert, GN_KEYWORD_2008, K_assert
|
|
|
|
|
attribute, GN_KEYWORD_2008, K_attribute
|
2010-12-15 06:36:47 +01:00
|
|
|
begin, GN_KEYWORD_2008, K_begin
|
2011-01-27 15:13:38 +01:00
|
|
|
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
|
|
|
|
|
//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
|
2010-12-15 06:36:47 +01:00
|
|
|
end, GN_KEYWORD_2008, K_end
|
|
|
|
|
entity, GN_KEYWORD_2008, K_entity
|
2011-01-27 15:13:38 +01:00
|
|
|
exit, GN_KEYWORD_2008, K_exit
|
|
|
|
|
//fairness, GN_KEYWORD_2008, K_fairness
|
|
|
|
|
file, GN_KEYWORD_2008, K_file
|
|
|
|
|
for, GN_KEYWORD_2008, K_for
|
|
|
|
|
//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
|
2010-12-15 06:36:47 +01:00
|
|
|
in, GN_KEYWORD_2008, K_in
|
2011-01-27 15:13:38 +01:00
|
|
|
inertial, GN_KEYWORD_2008, K_internal
|
|
|
|
|
inout, GN_KEYWORD_2008, K_inout
|
2010-12-15 06:36:47 +01:00
|
|
|
is, GN_KEYWORD_2008, K_is
|
2011-01-27 15:13:38 +01:00
|
|
|
label, GN_KEYWORD_2008, K_label
|
2010-12-15 06:36:47 +01:00
|
|
|
library, GN_KEYWORD_2008, K_library
|
2011-01-27 15:13:38 +01:00
|
|
|
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
|
|
|
|
|
not, GN_KEYWORD_2008, K_not
|
|
|
|
|
null, GN_KEYWORD_2008, K_null
|
2010-12-15 06:36:47 +01:00
|
|
|
of, GN_KEYWORD_2008, K_of
|
2011-01-27 15:13:38 +01:00
|
|
|
on, GN_KEYWORD_2008, K_on
|
|
|
|
|
or, GN_KEYWORD_2008, K_or
|
|
|
|
|
others, GN_KEYWORD_2008, K_others
|
2010-12-15 06:36:47 +01:00
|
|
|
out, GN_KEYWORD_2008, K_out
|
2011-01-27 15:13:38 +01:00
|
|
|
package, GN_KEYWORD_2008, K_package
|
2010-12-15 06:36:47 +01:00
|
|
|
port, GN_KEYWORD_2008, K_port
|
2011-01-27 15:13:38 +01:00
|
|
|
postponed, GN_KEYWORD_2008, K_postponed
|
|
|
|
|
procedure, GN_KEYWORD_2008, K_procedure
|
|
|
|
|
process, GN_KEYWORD_2008, K_process
|
|
|
|
|
//property, GN_KEYWORD_2008, K_propoerty
|
|
|
|
|
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
|
|
|
|
|
//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
|
|
|
|
|
rol, GN_KEYWORD_2008, K_rol
|
|
|
|
|
ror, GN_KEYWORD_2008, K_ror
|
|
|
|
|
select, GN_KEYWORD_2008, K_select
|
|
|
|
|
//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
|
|
|
|
|
//string, GN_KEYWORD_2008, K_string
|
|
|
|
|
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
|
2010-12-15 06:36:47 +01:00
|
|
|
use, GN_KEYWORD_2008, K_use
|
2011-01-27 15:13:38 +01:00
|
|
|
variable, GN_KEYWORD_2008, K_variable
|
|
|
|
|
//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
|
2010-12-13 05:02:18 +01:00
|
|
|
%%
|
|
|
|
|
|
|
|
|
|
int lexor_keyword_mask = GN_KEYWORD_2008;
|
|
|
|
|
|
|
|
|
|
int lexor_keyword_code(const char*str, unsigned nstr)
|
|
|
|
|
{
|
|
|
|
|
const struct lexor_keyword*rc = check_identifier(str, nstr);
|
|
|
|
|
if (rc == 0)
|
|
|
|
|
return IDENTIFIER;
|
|
|
|
|
else if ((rc->mask & lexor_keyword_mask) == 0)
|
|
|
|
|
return IDENTIFIER;
|
|
|
|
|
else
|
|
|
|
|
return rc->tokenType;
|
|
|
|
|
}
|