From 511a274b41b2a25104f4e848a19a8a22f12b47ba Mon Sep 17 00:00:00 2001 From: Cary R Date: Mon, 18 Jan 2010 19:06:01 -0800 Subject: [PATCH] Add all the SystemVerilog (1800-2005) keywords. This patch adds the SystemVerilog keywords to Icarus. This allows use to easily verify that out plain Verilog does not contain any SystemVerilog keywords. The keywords are not parsed in any way. When parsing a Verilog file using -gsystem-verilog any identifier that is a keyword will cause a parse error. It is the users responsibility to figure out the problem since bison does not give nice error message when it finds a keyword instead of an identifier. --- lexor_keyword.gperf | 99 +++++++++++++++++++++++++++++++++++++++++++-- parse.y | 22 ++++++++-- 2 files changed, 114 insertions(+), 7 deletions(-) diff --git a/lexor_keyword.gperf b/lexor_keyword.gperf index 9602f952a..1951493b6 100644 --- a/lexor_keyword.gperf +++ b/lexor_keyword.gperf @@ -16,6 +16,7 @@ abstol, GN_KEYWORDS_VAMS_2_3, K_abstol access, GN_KEYWORDS_VAMS_2_3, K_access acos, GN_KEYWORDS_VAMS_2_3, K_acos acosh, GN_KEYWORDS_VAMS_2_3, K_acosh +alias, GN_KEYWORDS_1800_2005, K_alias always, GN_KEYWORDS_1364_1995, K_always always_comb, GN_KEYWORDS_1800_2005, K_always_comb always_ff, GN_KEYWORDS_1800_2005, K_always_ff @@ -26,25 +27,44 @@ asin, GN_KEYWORDS_VAMS_2_3, K_asin asinh, GN_KEYWORDS_VAMS_2_3, K_asinh assert, GN_KEYWORDS_1800_2005, K_assert assign, GN_KEYWORDS_1364_1995, K_assign +assume, GN_KEYWORDS_1800_2005, K_assume atan, GN_KEYWORDS_VAMS_2_3, K_atan atan2, GN_KEYWORDS_VAMS_2_3, K_atan2 atanh, GN_KEYWORDS_VAMS_2_3, K_atanh automatic, GN_KEYWORDS_1364_2001, K_automatic +before, GN_KEYWORDS_1800_2005, K_before begin, GN_KEYWORDS_1364_1995, K_begin +bind, GN_KEYWORDS_1800_2005, K_bind +bins, GN_KEYWORDS_1800_2005, K_bins +binsof, GN_KEYWORDS_1800_2005, K_binsof +bit, GN_KEYWORDS_1800_2005, K_bit +break, GN_KEYWORDS_1800_2005, K_break bool, GN_KEYWORDS_ICARUS, K_bool buf, GN_KEYWORDS_1364_1995, K_buf bufif0, GN_KEYWORDS_1364_1995, K_bufif0 bufif1, GN_KEYWORDS_1364_1995, K_bufif1 +byte, GN_KEYWORDS_1800_2005, K_byte case, GN_KEYWORDS_1364_1995, K_case casex, GN_KEYWORDS_1364_1995, K_casex casez, GN_KEYWORDS_1364_1995, K_casez ceil, GN_KEYWORDS_VAMS_2_3, K_ceil cell, GN_KEYWORDS_1364_2001_CONFIG, K_cell +chandle, GN_KEYWORDS_1800_2005, K_chandle +class, GN_KEYWORDS_1800_2005, K_class +clocking, GN_KEYWORDS_1800_2005, K_clocking cmos, GN_KEYWORDS_1364_1995, K_cmos config, GN_KEYWORDS_1364_2001_CONFIG, K_config +const, GN_KEYWORDS_1800_2005, K_const +constraint, GN_KEYWORDS_1800_2005, K_constraint +context, GN_KEYWORDS_1800_2005, K_context +continue, GN_KEYWORDS_1800_2005, K_continue continuous, GN_KEYWORDS_VAMS_2_3, K_continuous cos, GN_KEYWORDS_VAMS_2_3, K_cos cosh, GN_KEYWORDS_VAMS_2_3, K_cosh +cover, GN_KEYWORDS_1800_2005, K_cover +covergroup, GN_KEYWORDS_1800_2005, K_covergroup +coverpoint, GN_KEYWORDS_1800_2005, K_coverpoint +cross, GN_KEYWORDS_1800_2005, K_cross ddt_nature, GN_KEYWORDS_VAMS_2_3, K_ddt_nature deassign, GN_KEYWORDS_1364_1995, K_deassign default, GN_KEYWORDS_1364_1995, K_default @@ -53,30 +73,49 @@ design, GN_KEYWORDS_1364_2001_CONFIG, K_design disable, GN_KEYWORDS_1364_1995, K_disable discipline, GN_KEYWORDS_VAMS_2_3, K_discipline discrete, GN_KEYWORDS_VAMS_2_3, K_discrete +dist, GN_KEYWORDS_1800_2005, K_dist +do, GN_KEYWORDS_1800_2005, K_do domain, GN_KEYWORDS_VAMS_2_3, K_domain edge, GN_KEYWORDS_1364_1995, K_edge else, GN_KEYWORDS_1364_1995, K_else end, GN_KEYWORDS_1364_1995, K_end endcase, GN_KEYWORDS_1364_1995, K_endcase endconfig, GN_KEYWORDS_1364_2001_CONFIG, K_endconfig +endclass, GN_KEYWORDS_1800_2005, K_endclass +endclocking, GN_KEYWORDS_1800_2005, K_endclocking enddiscipline, GN_KEYWORDS_VAMS_2_3, K_enddiscipline endfunction, GN_KEYWORDS_1364_1995, K_endfunction endgenerate, GN_KEYWORDS_1364_2001, K_endgenerate +endgroup, GN_KEYWORDS_1800_2005, K_endgroup +endinterface, GN_KEYWORDS_1800_2005, K_endinterface endmodule, GN_KEYWORDS_1364_1995, K_endmodule endnature, GN_KEYWORDS_VAMS_2_3, K_endnature +endpackage, GN_KEYWORDS_1800_2005, K_endpackage endprimitive, GN_KEYWORDS_1364_1995, K_endprimitive +endprogram, GN_KEYWORDS_1800_2005, K_endprogram +endproperty, GN_KEYWORDS_1800_2005, K_endproperty endspecify, GN_KEYWORDS_1364_1995, K_endspecify +endsequence, GN_KEYWORDS_1800_2005, K_endsequence endtable, GN_KEYWORDS_1364_1995, K_endtable endtask, GN_KEYWORDS_1364_1995, K_endtask +enum, GN_KEYWORDS_1800_2005, K_enum event, GN_KEYWORDS_1364_1995, K_event exclude, GN_KEYWORDS_VAMS_2_3, K_exclude exp, GN_KEYWORDS_VAMS_2_3, K_exp +expect, GN_KEYWORDS_1800_2005, K_expect +export, GN_KEYWORDS_1800_2005, K_export +extends, GN_KEYWORDS_1800_2005, K_extends +extern, GN_KEYWORDS_1800_2005, K_extern +final, GN_KEYWORDS_1800_2005, K_final +first_match, GN_KEYWORDS_1800_2005, K_first_match floor, GN_KEYWORDS_VAMS_2_3, K_floor flow, GN_KEYWORDS_VAMS_2_3, K_flow for, GN_KEYWORDS_1364_1995, K_for +foreach, GN_KEYWORDS_1800_2005, K_foreach force, GN_KEYWORDS_1364_1995, K_force forever, GN_KEYWORDS_1364_1995, K_forever fork, GN_KEYWORDS_1364_1995, K_fork +forkjoin, GN_KEYWORDS_1800_2005, K_forkjoin from, GN_KEYWORDS_VAMS_2_3, K_from function, GN_KEYWORDS_1364_1995, K_function generate, GN_KEYWORDS_1364_2001, K_generate @@ -87,83 +126,124 @@ highz1, GN_KEYWORDS_1364_1995, K_highz1 hypot, GN_KEYWORDS_VAMS_2_3, K_hypot idt_nature, GN_KEYWORDS_VAMS_2_3, K_idt_nature if, GN_KEYWORDS_1364_1995, K_if +iff, GN_KEYWORDS_1800_2005, K_iff ifnone, GN_KEYWORDS_1364_1995, K_ifnone +ignore_bins, GN_KEYWORDS_1800_2005, K_ignore_bins +illegal_bins, GN_KEYWORDS_1800_2005, K_illegal_bins +import, GN_KEYWORDS_1800_2005, K_import incdir, GN_KEYWORDS_1364_2001_CONFIG, K_incdir include, GN_KEYWORDS_1364_2001_CONFIG, K_include inf, GN_KEYWORDS_VAMS_2_3, K_inf initial, GN_KEYWORDS_1364_1995, K_initial inout, GN_KEYWORDS_1364_1995, K_inout input, GN_KEYWORDS_1364_1995, K_input +inside, GN_KEYWORDS_1800_2005, K_inside instance, GN_KEYWORDS_1364_2001_CONFIG, K_instance +int, GN_KEYWORDS_1800_2005, K_int integer, GN_KEYWORDS_1364_1995, K_integer +interface, GN_KEYWORDS_1800_2005, K_interface +intersect, GN_KEYWORDS_1800_2005, K_intersect join, GN_KEYWORDS_1364_1995, K_join +join_any, GN_KEYWORDS_1800_2005, K_join_any +join_none, GN_KEYWORDS_1800_2005, K_join_none large, GN_KEYWORDS_1364_1995, K_large liblist, GN_KEYWORDS_1364_2001_CONFIG, K_liblist library, GN_KEYWORDS_1364_2001_CONFIG, K_library ln, GN_KEYWORDS_VAMS_2_3, K_ln +local, GN_KEYWORDS_1800_2005, K_local localparam, GN_KEYWORDS_1364_2001, K_localparam log, GN_KEYWORDS_VAMS_2_3, K_log -logic, GN_KEYWORDS_ICARUS, K_logic +# This is defined by SystemVerilog 1800-2005 and as an Icarus extension. +logic, GN_KEYWORDS_1800_2005|GN_KEYWORDS_ICARUS, K_logic +longint, GN_KEYWORDS_1800_2005, K_longint macromodule, GN_KEYWORDS_1364_1995, K_macromodule +matches, GN_KEYWORDS_1800_2005, K_matches max, GN_KEYWORDS_VAMS_2_3, K_max medium, GN_KEYWORDS_1364_1995, K_medium min, GN_KEYWORDS_VAMS_2_3, K_min +modport, GN_KEYWORDS_1800_2005, K_modport module, GN_KEYWORDS_1364_1995, K_module nand, GN_KEYWORDS_1364_1995, K_nand nature, GN_KEYWORDS_VAMS_2_3, K_nature negedge, GN_KEYWORDS_1364_1995, K_negedge +new, GN_KEYWORDS_1800_2005, K_new nmos, GN_KEYWORDS_1364_1995, K_nmos nor, GN_KEYWORDS_1364_1995, K_nor noshowcancelled, GN_KEYWORDS_1364_2001, K_noshowcancelled not, GN_KEYWORDS_1364_1995, K_not notif0, GN_KEYWORDS_1364_1995, K_notif0 notif1, GN_KEYWORDS_1364_1995, K_notif1 +null, GN_KEYWORDS_1800_2005, K_null or, GN_KEYWORDS_1364_1995, K_or output, GN_KEYWORDS_1364_1995, K_output +package, GN_KEYWORDS_1800_2005, K_package +packed, GN_KEYWORDS_1800_2005, K_packed parameter, GN_KEYWORDS_1364_1995, K_parameter pmos, GN_KEYWORDS_1364_1995, K_pmos posedge, GN_KEYWORDS_1364_1995, K_posedge potential, GN_KEYWORDS_VAMS_2_3, K_potential pow, GN_KEYWORDS_VAMS_2_3, K_pow primitive, GN_KEYWORDS_1364_1995, K_primitive +priority, GN_KEYWORDS_1800_2005, K_priority +program, GN_KEYWORDS_1800_2005, K_program +property, GN_KEYWORDS_1800_2005, K_property +protected, GN_KEYWORDS_1800_2005, K_protected pull0, GN_KEYWORDS_1364_1995, K_pull0 pull1, GN_KEYWORDS_1364_1995, K_pull1 pulldown, GN_KEYWORDS_1364_1995, K_pulldown pullup, GN_KEYWORDS_1364_1995, K_pullup pulsestyle_onevent, GN_KEYWORDS_1364_2001, K_pulsestyle_onevent pulsestyle_ondetect, GN_KEYWORDS_1364_2001, K_pulsestyle_ondetect +pure, GN_KEYWORDS_1800_2005, K_pure +rand, GN_KEYWORDS_1800_2005, K_rand +randc, GN_KEYWORDS_1800_2005, K_randc +randcase, GN_KEYWORDS_1800_2005, K_randcase +randsequence, GN_KEYWORDS_1800_2005, K_randsequence rcmos, GN_KEYWORDS_1364_1995, K_rcmos real, GN_KEYWORDS_1364_1995, K_real realtime, GN_KEYWORDS_1364_1995, K_realtime +ref, GN_KEYWORDS_1800_2005, K_ref reg, GN_KEYWORDS_1364_1995, K_reg release, GN_KEYWORDS_1364_1995, K_release repeat, GN_KEYWORDS_1364_1995, K_repeat +return, GN_KEYWORDS_1800_2005, K_return rnmos, GN_KEYWORDS_1364_1995, K_rnmos rpmos, GN_KEYWORDS_1364_1995, K_rpmos rtran, GN_KEYWORDS_1364_1995, K_rtran rtranif0, GN_KEYWORDS_1364_1995, K_rtranif0 rtranif1, GN_KEYWORDS_1364_1995, K_rtranif1 scalared, GN_KEYWORDS_1364_1995, K_scalared +sequence, GN_KEYWORDS_1800_2005, K_sequence +shortint, GN_KEYWORDS_1800_2005, K_shortint +shortreal, GN_KEYWORDS_1800_2005, K_shortreal showcancelled, GN_KEYWORDS_1364_2001, K_showcancelled signed, GN_KEYWORDS_1364_2001, K_signed sin, GN_KEYWORDS_VAMS_2_3, K_sin sinh, GN_KEYWORDS_VAMS_2_3, K_sinh small, GN_KEYWORDS_1364_1995, K_small +solve, GN_KEYWORDS_1800_2005, K_solve specify, GN_KEYWORDS_1364_1995, K_specify specparam, GN_KEYWORDS_1364_1995, K_specparam sqrt, GN_KEYWORDS_VAMS_2_3, K_sqrt -string, GN_KEYWORDS_VAMS_2_3, K_string +static, GN_KEYWORDS_1800_2005, K_static +# This is defined by both SystemVerilog 1800-2005 and Verilog-AMS 2.3 +string, GN_KEYWORDS_1800_2005|GN_KEYWORDS_VAMS_2_3, K_string strong0, GN_KEYWORDS_1364_1995, K_strong0 strong1, GN_KEYWORDS_1364_1995, K_strong1 +struct, GN_KEYWORDS_1800_2005, K_struct +super, GN_KEYWORDS_1800_2005, K_super supply0, GN_KEYWORDS_1364_1995, K_supply0 supply1, GN_KEYWORDS_1364_1995, K_supply1 table, GN_KEYWORDS_1364_1995, K_table +tagged, GN_KEYWORDS_1800_2005, K_tagged tan, GN_KEYWORDS_VAMS_2_3, K_tan tanh, GN_KEYWORDS_VAMS_2_3, K_tanh task, GN_KEYWORDS_1364_1995, K_task +this, GN_KEYWORDS_1800_2005, K_this +throughout, GN_KEYWORDS_1800_2005, K_throughout time, GN_KEYWORDS_1364_1995, K_time -timeprecision, GN_KEYWORDS_1364_1995, K_timeprecision -timeunit, GN_KEYWORDS_1364_1995, K_timeunit +timeprecision, GN_KEYWORDS_1800_2005, K_timeprecision +timeunit, GN_KEYWORDS_1800_2005, K_timeunit tran, GN_KEYWORDS_1364_1995, K_tran tranif0, GN_KEYWORDS_1364_1995, K_tranif0 tranif1, GN_KEYWORDS_1364_1995, K_tranif1 @@ -173,18 +253,29 @@ tri1, GN_KEYWORDS_1364_1995, K_tri1 triand, GN_KEYWORDS_1364_1995, K_triand trior, GN_KEYWORDS_1364_1995, K_trior trireg, GN_KEYWORDS_1364_1995, K_trireg +type, GN_KEYWORDS_1800_2005, K_type +typedef, GN_KEYWORDS_1800_2005, K_typedef +union, GN_KEYWORDS_1800_2005, K_union +unique, GN_KEYWORDS_1800_2005, K_unique units, GN_KEYWORDS_VAMS_2_3, K_units # Reserved for future use! unsigned, GN_KEYWORDS_1364_2001, K_unsigned use, GN_KEYWORDS_1364_2001_CONFIG, K_use uwire, GN_KEYWORDS_1364_2005, K_uwire +var, GN_KEYWORDS_1800_2005, K_var vectored, GN_KEYWORDS_1364_1995, K_vectored +virtual, GN_KEYWORDS_1800_2005, K_virtual +void, GN_KEYWORDS_1800_2005, K_void wait, GN_KEYWORDS_1364_1995, K_wait +wait_order, GN_KEYWORDS_1800_2005, K_wait_order wand, GN_KEYWORDS_1364_1995, K_wand weak0, GN_KEYWORDS_1364_1995, K_weak0 weak1, GN_KEYWORDS_1364_1995, K_weak1 while, GN_KEYWORDS_1364_1995, K_while +wildcard, GN_KEYWORDS_1800_2005, K_wildcard wire, GN_KEYWORDS_1364_1995, K_wire +with, GN_KEYWORDS_1800_2005, K_with +within, GN_KEYWORDS_1800_2005, K_within # This is the name originally proposed for uwire and is deprecated! wone, GN_KEYWORDS_1364_2005, K_wone wor, GN_KEYWORDS_1364_1995, K_wor diff --git a/parse.y b/parse.y index 05200d6f3..d742b4344 100644 --- a/parse.y +++ b/parse.y @@ -1,7 +1,7 @@ %{ /* - * Copyright (c) 1998-2009 Stephen Williams (steve@icarus.com) + * Copyright (c) 1998-2010 Stephen Williams (steve@icarus.com) * * This source code is free software; you can redistribute it * and/or modify it in source code form under the terms of the GNU @@ -279,8 +279,24 @@ static PECallFunction*make_call_function(perm_string tn, PExpr*arg1, PExpr*arg2) %token K_wone K_uwire /* The new tokens from 1800-2005. */ -%token K_always_comb K_always_ff K_always_latch K_assert -%token K_timeprecision K_timeunit +%token K_alias K_always_comb K_always_ff K_always_latch K_assert +%token K_assume K_before K_bind K_bins K_binsof K_bit K_break K_byte +%token K_chandle K_class K_clocking K_const K_constraint K_context +%token K_continue K_cover K_covergroup K_coverpoint K_cross K_dist K_do +%token K_endclass K_endclocking K_endgroup K_endinterface K_endpackage +%token K_endprogram K_endproperty K_endsequence K_enum K_expect K_export +%token K_extends K_extern K_final K_first_match K_foreach K_forkjoin +%token K_iff K_ignore_bins K_illegal_bins K_import K_inside K_int + /* Icarus already has defined "logic" above! */ +%token K_interface K_intersect K_join_any K_join_none K_local +%token K_longint K_matches K_modport K_new K_null K_package K_packed +%token K_priority K_program K_property K_protected K_pure K_rand K_randc +%token K_randcase K_randsequence K_ref K_return K_sequence K_shortint + /* Verilog-AMS 2.3 has defined "string" below! */ +%token K_shortreal K_solve K_static K_struct K_super +%token K_tagged K_this K_throughout K_timeprecision K_timeunit K_type +%token K_typedef K_union K_unique K_var K_virtual K_void K_wait_order +%token K_wildcard K_with K_within /* Fake tokens that are passed once we have an initial token. */ %token K_timeprecision_check K_timeunit_check