C++ rules require a virtual destructor when there are virtual functions. You need to define one as a tracing aid. It can be an empty function.
~LANG_VERILOG() {itested();}
Return the name to use as a key to enable this language.
std::string name()const {return "verilog";}
Return false if the language is case sensitive, true if case insensitive.
bool case_insensitive()const {return false;}
This function determines how numeric strings with multiplier suffixes such as “10m” are parsed. It should return uSI
for standard SI units. (M = meg = 10^6, m = milli = 10^-3) or uSPICE
for SPICE syntax (M = milli = 10^-3, Meg = meg = 10^6).
UNITS units()const {return uSI;}
These functions describe the syntax for parameter assignment statements.
For example, the most common syntax is x=value
, but Verilog uses .x(value)
.
You need to specify the front, mid, and back strings.
For x=value
the code is:
std::string arg_front()const {return " ";} std::string arg_mid()const {return "=";} std::string arg_back()const {return "";}
For .x(value)
the code is:
std::string arg_front()const {return ".";} std::string arg_mid()const {return "(";} std::string arg_back()const {return ")";}