Reputation: 495
I've a problem in my lexer and in my parser.
First, in my lexer I've a line like that:
"if" beginScope(stOTHER); return IF;
And in my parser:
stmt: IF '(' exp ')' stmts
...
stmts: stmt
| '{' stmt_list '}'
| '{' '}'
In a code like that:
if(sth) {
dosth;
}
if(other) {
doothersth;
}
beginScope will be called two times, because ( I think ) Bison don't know where is the end of the if
statement, so when it found the IF
token, he takes that as the end of the if
statement, and read it a second time to start the other if
statement...
Please help me...
Upvotes: 5
Views: 339
Reputation: 55524
As Zack mentioned in the comments, you should call beginScope
from a parser action:
stmt: IF { beginScope(stOTHER); } '(' exp ')' stmts
Upvotes: 1