help-jel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Help-jel] Locate token in expression?


From: Mark Taylor
Subject: Re: [Help-jel] Locate token in expression?
Date: Wed, 28 Nov 2018 14:28:25 +0000

Kontantin,

for my particular purposes I don't think I'll need to do anything
more than trivial graph analysis, but the trick of intercepting calls
to DVmap.getTypeName was what I was after and hadn't thought of. 

Thanks!

Mark

On Tue, 27 Nov 2018, Konstantin L. Metlov wrote:

> Dear Mark,
> 
> if you consider your variable names as nodes, then every expression adds a
> certain number of directed links (from the nodes, corresponding to all
> used variables, to the target node, which is assigned the value of the
> expression). The directed graph, formed by these nodes and links, must be
> acyclic (have no loops in it).
> 
> The question you are facing is whether adding another edge (newly compiled
> expression will add a number of edges, equal to the number of variables it
> references) to the DAG (directed acyclic graph) will produce a cycle in
> it.
> 
> This is quite an interesting problem, which is efficiently addressed by a
> number of well known algorithms. See e.g.
> 
> https://cs.stackexchange.com/questions/65633/check-if-adding-an-edge-to-a-dag-results-in-a-cycle
> 
> JEL can help you to obtain a list of the referenced variables. You can
> catch amd collect them in the gnu.jel.DVMap.getTypeName(String name)
> method of your dynamic variable resolver, which is called for every
> potential variable name JEL encounters in the expression.
> 
> With the best regards,
>                           Konstantin.
> 
> > Dear Konstantin,
> >
> > in my application, the user can define a named value at run time
> > by supplying a JEL expression, and this name can be used in
> > subsequent definitions.  As a convenience, they can also
> > redefine an existing name by editing the expression.
> >
> > So for instance one can define a name "A" as "B + C",
> > assuming that B and C are already known to JEL.
> > Later, one can redefine "A" as, e.g., "2*B + C".  So far so good.
> > However, if C has already been defined in terms of A, there's trouble:
> > the definition is recursive, and evaluation never terminates.
> >
> > So, I want some way to catch this condition.  If I can analyse
> > the expression "2*B + C" to see whether it contains any
> > (explicit or implicit) reference to the name "A",
> > then I can issue an error message and prevent the user from
> > assigning the new expression as the value of "A".
> >
> > I've had a look at the JEL API (though not the source code) and
> > I have some ideas of what might work ... but I'm not sure.
> > Is this possible with the existing API?  If so, could you give me
> > an outline of how to go about it?
> >
> > Many thanks,
> >
> > Mark
> >
> > --
> > Mark Taylor   Astronomical Programmer   Physics, Bristol University, UK
> > address@hidden +44-117-9288776  http://www.star.bris.ac.uk/~mbt/
> >
> > _______________________________________________
> > Help-jel mailing list
> > address@hidden
> > https://lists.gnu.org/mailman/listinfo/help-jel
> >
> 
> 
> 

--
Mark Taylor   Astronomical Programmer   Physics, Bristol University, UK
address@hidden +44-117-9288776  http://www.star.bris.ac.uk/~mbt/



reply via email to

[Prev in Thread] Current Thread [Next in Thread]