ThomasH
ThomasH

Reputation: 23506

Rascal: Grammar Stack Trace

When parsing a file with a specific grammar and the parse fails, I get a corresponding error message with the location in the source file that offended the grammar.

What I would like to look at in these situations would be the list of grammar rules that were active at this moment, something like a grammar rule "stack trace", or the rules that have matched so far. Is this possible in Rascal?

So, for a very simple example, in the EXP language from the documentation, if I tried to parse "2 + foo" I could get something like

Exp
=> left Exp "+" Exp
=> left IntegerLiteral "+" Exp
=> left IntegerLiteral "+" <?>
No derivation of "foo" from rule 'Exp'

Another way of saying this is looking at an incomplete parse tree, as it was the moment the parse error occurred. Does that make sense?

Upvotes: 1

Views: 76

Answers (1)

Jurgen Vinju
Jurgen Vinju

Reputation: 6696

It makes total sense, but I'm afraid this "incomplete parse tree" feature is on our TODO list.

Note that with the non-deterministic parsing algorithm it would probably return a set of current parse contexts, so a "parse forest" rather than a single stack trace. Still I think that would be a very useful debugging feature.

The only suggestion right now I can do right now is "delta-debugging", so removing half the input and checking if the parse error is still there, then the other half, rinse/lather/repeat.

Upvotes: 1

Related Questions