What is the normal approach to perform custom disambiguation in Spoofax, in case that’s needed?

(I don’t really need it at this moment, but if it’s easy, it might come in handy sometime :-))

The ‘natural’ way to me, disambiguating in editor-analyze and returning a disambiguated tree to the Spoofax runtime, does not work (ambiguity markers remain visible). This is what I tried as a quick test:

    signature
      constructors
        amb: List(x) -> x

    rules
      editor-analyze:
        (ast, path, project-path) -> (ast', [], [], [])
        with
          editor-init;
          ast' := <topdown(try(disambiguate)); debug(!"final: ")> ast

      disambiguate:
        amb([x | xs]) -> x
        with
          debug(!"disambiguating: ")
Submitted by Tobi Vollebregt on 13 January 2011 at 16:24

The easy fix here would be to add a setting to disable the warnings. But then things like the outliner would still work on the ambiguous tree. So there should be some kind of postprocessor that runs just after the parser finishes. If you want to dig into it, https://svn.strategoxt.org/repos/StrategoXT/spoofax-imp/trunk/README offers some advice ;)

Submitted on 13 January 2011 at 19:15 by Lennart Kats

On 13 January 2011 at 19:15 Lennart Kats tagged feature
On 13 January 2011 at 19:15 Lennart Kats removed tag feature
On 13 January 2011 at 19:15 Lennart Kats removed tag question
On 13 January 2011 at 19:16 Lennart Kats tagged feature
On 13 January 2011 at 19:16 Lennart Kats tagged parser
On 22 January 2011 at 16:21 Lennart Kats closed this issue.

Actually, this is now possible using the LANGUAGEParseController class, which can be used to override the parser or do pre/post-processing. Maybe also be something to look into for parsing XML? :)

(For a pure Stratego approach, open a new issue if needed ;)

Submitted on 22 January 2011 at 16:21 by Lennart Kats

On 22 January 2011 at 16:21 Lennart Kats tagged 0.6.0
On 22 January 2011 at 16:21 Lennart Kats removed tag parser
On 22 January 2011 at 16:22 Lennart Kats tagged parser
On 9 February 2011 at 10:40 Lennart Kats tagged 1.0
On 22 December 2011 at 16:46 Lennart Kats removed tag 0.6.0
On 28 December 2011 at 13:17 Lennart Kats tagged @lennartkats

Log in to post comments