2015-06-08 7 views
0

Я хочу реализовать кодировку правил в своем парсере, сгенерированном javaCC: Не меняйте переменную цикла внутри блока for-loop.Не меняйте переменную цикла внутри блока for-loop

Правило производства JavaCC из для цикла блока:

void MyMethod() : {} 
{ 
"(" Argument() ")" {} 
(Statement()) * 

} 

void Statement() : {} 
{ 
expressionFOR() 
} 

void expressionFOR() :{} 
{ 
<For> <id> "= " 1 <to> 100 
int J 
int kk =SUM(, J) 
...... 

} 

спасибо заранее

ответ

0

Предполагая, что вы используете JJTree с MULTI = ложь и ГОСТе = верно, то вы могли бы написать посетитель по этой линии

public void visit(SimpleNode node, Object data) { 
    if(this is a for loop node) { 
     push the for loop variable onto a stack of variables 
     node.childrenAccept(this, null) ; 
     pop the stack } 
    else { 
     if(this is an assignment statement node 
      and the target variable is on the stack) 
      report rule violated 
     node.childrenAccept(this, null) ; 
    } 
}