2015-03-04 3 views
0

Я довольно новичок в javaCC, и я пытаюсь создать парсер miniJava, но я не знаю, как пропустить семантическое действие.Как совместить 0 токенов в JavCC

SKIP : /* Definition of white-space and comments here */ 
    { 
     " " 
     | "\t" 
     | "\n" 
     | "\r" 
     | "\f" 
    | < "//" (~["\n","\r"])* ("\n"|"\r"|"\r\n") > 
} 

TOKEN : /* Definition of the MiniJava tokens here. */ 
{ 
    < NUM: (["0"-"9"])+ > 
| < LPAREN: "(" > 
| < RPAREN: ")" > 
| < COMMA: "," > 
| < IDENTIFIER: ["a"-"z","A"-"Z"](["a"-"z","A"-"Z","0"-"9","_"])* > 

...

Это метод, который им пытаются использовать пропустить дальше.

public void nt_FormalList() : 
{} 
{ 
    nt_Type() <IDENTIFIER> (nt_FormalRest())* 
    | SKIP 
} 

public void nt_FormalRest() : 
{} 
{ 
    <COMMA> nt_Type() <IDENTIFIER> 
} 

public void nt_Type() : 
{} 
{ 
    <INT> 
    | <BOOLEAN> 
    | <INT> <LSQBR> <RSQBR> 
    | <IDENTIFIER> 
} 
+0

Можете ли вы пояснить, что вы подразумеваете под «включать пробел». –

ответ

0

Я предполагаю, что вы не хотите «пространства» вообще, а скорее, что вам не нужны токены. В Java "" и "" являются действительными формальными списками параметров; пространство не требуется. Поэтому я думаю, что вы хотите

public void nt_FormalList() : 
{} 
{ 
    [ nt_Type() <IDENTIFIER> (nt_FormalRest())* ] 
} 

Квадратные скобки указывают, что материал между ними не является обязательным.

+0

Итак, ваш ответ - именно то, что я имел в виду благодаря! – Mustafa

+0

Добро пожаловать в stackoverflow. Когда ответ отвечает на ваш вопрос, принято указывать его, нажав на галочку. –

 Смежные вопросы

  • Нет связанных вопросов^_^