Re: AST view of E program

Kevin Reid <[email protected]>
Newsgroups gmane.comp.lang.e.general
Message-ID <[email protected]>
On Oct 8, 2008, at 8:58, Marcelo D. Ré wrote:

>     I have problem to print the AST. I couldn't find the way to do  
> this. Where is the class or method makeEParse?

All Java classes are presented in E named as "makeX". The actual class  
name is org.erights.e.elang.syntax.EParser.

> I didn't find it in the JavaDoc (http://www.erights.org/javadoc/index.html 
> )

This is the method you want, for basic usage:

<http://www.erights.org/javadoc/org/erights/e/elang/syntax/EParser.html#run(org.erights.e.elib.tables.Twine) 
 >

> I need a program that print the on console AST view of a source.

There is no one true syntax for the AST besides normal Kernel-E  
syntax, but you can get a TermL form using a converter that's available:


? def convert := <elang:visitors.makeConvertENode2Term>()
# value: <convert>

? convert(e`def x4k3 := (x10 * 4).keep(3)`)
# value: term`def(finalP("x4k3"),
#                 call(call(noun("x10"),
#                           "multiply",
#                           [quote(4)]),
#                      "keep",
#                      [quote(3)]))`


If you must have this from Java, then provided that an E vat is  
already set up you can do this:


import org.erights.e.elib.tables.Twine;
import org.erights.e.elib.prim.E;
import org.erights.e.elang.syntax.EParser;
import org.erights.e.elang.evm.ENode;
import org.erights.e.elib.serial.Loader;

Object converter =
   E.call((Loader)(safeScope.get("import__uriGetter"))
            .get("org.erights.e.elang.visitors.makeConvertENode2Term"),
          "run");

ENode node = EParser.run(Twine.fromString(source_text, source_url));
System.out.print(E.call(converter, "run", node));


But really, I expect that a reasonably efficient IDE-support module  
would want to walk the ENode tree directly, not print it in any syntax.

-- 
Kevin Reid                            <http://homepage.mac.com/kpreid/>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.