I am using CUP to generate a parser, and I want an empty file to be an acceptable program. I have tried add the empty case to my start symbol, based off the response to a similar question <a href="https://stackoverflow.com/questions/15064980/in-cup-how-to-make-something-optional-to-parse" rel="nofollow">here</a>.
start with prog; /* The grammar rules */ prog ::= class_block:cb | class_block:cb stmts:sb | stmts:sb | // desired empty case ;
Including the desired empty case gives me the following error:
parser.java:516: error: incompatible types: Object cannot be converted to Symbol CUP$parser$result = parser.getSymbolFactory().newSymbol("prog",0, ((java_cup.runtime.Symbol)CUP$parser$stack.peek()), RESULT);
How can I modify my grammar so that the parser accepts an empty file? I am using Jflex as my lexer, and ComplexSymbolFactory as the type of the symbols.
EDIT: I've confirmed that the grammar above is the correct way to include empty. However, ComplexSymbolFactory is having problems converting the empty object to a symbol. I get this error even when running <a href="http://www2.in.tum.de/repos/cup/develop/testgrammars/minijava2/" rel="nofollow">this example</a> from the official CUP website.Answer1:
I downloaded the .jars from a friend github project and problem solved.
You can see it's a BUG here: <a href="https://github.com/jflex-de/jflex/issues/384" rel="nofollow">https://github.com/jflex-de/jflex/issues/384</a>
Try to downgrade the version.