On 22 Jul 2014, at 9:32 pm, Nicole Fontenot <robwob...@gmail.com> wrote:

> Give me some time to look over the Exuberant Ctags code-base and I'll see 
> what I can do.
> Can there be some general discussion with, exactly what are the shortcomings 
> of the current parser:
> Is there a problem with ctags not understanding that entity blocks and 
> architecture blocks are connected in a fundamental way?
> Are there library functions and constructs that are just too much for the 
> current implementation? What do those look like?
> Is ctags recognition outdated?
> Is it ctags job to recognize things like flipflops, muxers or 
> non-synthesizable  constructs?
> I know the topic was on a project of larger scope but, for an IDE ctags is an 
> important part of what people expect from one.
> Without good parsing support, the market for the up-and-coming IDE will be 
> blasé at best. With this and that I work a full time job in mind, 
> don't expect sudden results; If there is a wanting for new features I will do 
> my best.
> 



I think it would be useful to be able to reference every named object 
explicitly or implicitly declared:

(This from VHDL93)
     entity_class ::=                                       [§ 5.1]
            entity      | architecture   | configuration
         | procedure    | function       | package
         | type         | subtype        | constant
         | signal       | variable       | component
         | label        | literal        | units
         | group        | file
(VHDL 2008 adds property and sequence both found in PSL).  Notice alias is 
missing.
Something like the implicitly declared parameters from a for generation scheme 
or loop statement iteration scheme would be clearly out of reach of a 
non-thorough parser.  I'd suspect labels are too, being context sensitive used 
in object declaration as well (constants, signals, variables and files).

There's issue both with ctags and any editor understanding scope, visibility 
and declarative regions (which would give you the generation or iteration 
scheme variables). Even an architecture name exists in a separate declarative 
region for component instantiation.  Primary units declarative regions can 
extend to their secondary units (or a configuration specification).

Note there are places where object class defining reserved words (e.g. signal, 
variable) are optional (interface lists for entities and functions ).

Functions and procedures should be distinct, the former an expression the 
latter a statement.

And how do you distinguish between something in a package declaration and 
package body when they can be in two different design files? (e.g. 
std_logic_1164.vhdl std_logic_1164_body.vhdl).  It looks like name by name file 
and line number attributes.

I don't know about you but I'd love to have an editor that can filter by entity 
class for those times you know what something is but don't remember the exact 
name.  It's faster (for some of us) then coming up with a meta match value to 
search with.  The existing VHDL tags implementations tend to pour things into 
two few a number of cups, IIRC.

GTKWave has a new dump file format FST, which I've seen in one VHDL 
implementation (nvc) and has the ability to point at declarations from the  
signals pane, and allows opening an external editor on the declared line in the 
declared file.  nvc currently only points to declarative regions and by 
definition this only covers signals.  What's of interest is where the 
information comes from - nvc creates a structure containing all the  signals 
being queued for waveform dump  and looks up the location declarations, it's 
essentially done from the 'distributed' symbol table the same way you'd 
traverse and elaborated model looking for things to 'tag'.

This also points out you need an elaborated model to get an accurate set of 
tags or the ability to superimpose configuration on your results.  There's two 
few a number of cups in object files too, to distinguish even object classes 
(without a naming convention which would be implementation limited and likely 
platform limited).

And the moral here is not meant as discouragement but to encourage working 
toward a known goal.  Understand how big the problem is. Try for improvement 
over the 'state of the art'.

The last ctags source I have is 5.8 which shows a 29 June 2009 dated for 
vhdl.c. It supports limited VhdlKinds:

static kindOption VhdlKinds[] = {
        {TRUE, 'c', "constant", "constant declarations"},
        {TRUE, 't', "type", "type definitions"},
        {TRUE, 'T', "subtype", "subtype definitions"},
        {TRUE, 'r', "record", "record names"},
        {TRUE, 'e', "entity", "entity declarations"},
        {FALSE, 'C', "component", "component declarations"},
        {FALSE, 'd', "prototype", "prototypes"},
        {TRUE, 'f', "function", "function prototypes and declarations"},
        {TRUE, 'p', "procedure", "procedure prototypes and declarations"},
        {TRUE, 'P', "package", "package definitions"},
        {FALSE, 'l', "local", "local definitions"}
};

signal is only mentioned as a KEYWORD and recognized.  (Ouch!)

What good are the concepts 'prototype' or 'local' or even distinct 'record' to 
someone thoroughly VHDL inculcated?  Taking short cuts leads to substandard 
editor/IDE support.

Something free standing can enforce it's will on an editor (GTKWave is an 
example). It can coexist with other tools (a plugin in gedit, truly stand 
alone, etc., you'd get less usage defining which editor to use). That thing 
needs to be thoroughly GHDL aware to be really useful. ctags aren't useful 
unless something can take advantage of them and  the missing signal is a good 
indication of what ctags for VHDL hasn't caught on. (That and for our own works 
of VHDL authorship we tend not to need them - we tend to be less altruistic 
when there isn't an immediate need).

Try a gander at OpenGrok's Comparison with Similar Tools for features. (This 
link was found on the GNU GLOBAL web page. GLOBAL achieves ctag compatibility 
by translation.  The big selling point is editor independence.)









_______________________________________________
Ghdl-discuss mailing list
Ghdl-discuss@gna.org
https://mail.gna.org/listinfo/ghdl-discuss

Reply via email to