JavaCC: сопоставляется с подстановочным знаком, но не использует для переключения состояния - PullRequest
0 голосов
/ 09 августа 2011

В JavaCC, например, в состоянии DEFAULT, я хочу выполнить переключение состояния, если следующий токен <A>, я хочу переключиться в состояние STATE_A, в противном случае я хочу переключиться в состояние STATE_B.

Я пытался использовать что-то вроде следующего кода с "" в качестве подстановочного знака:

TOKEN:
{
  <A: "aa"> : STATE_A
| <NOT_A: ""> : STATE_B
}

Но это не работает, когда символ, который не может быть уменьшен доA выполнено, функция немедленно возвращается и не переключается на STATE_B, поэтому "", похоже, не в состоянии выполнить эту работу.

У вас есть какие-либо предложения?Спасибо.

1 Ответ

0 голосов
/ 10 августа 2011

Ну, я считаю, что на самом деле работает .Пустая строка будет сопоставлена, когда A не может быть сопоставлено, однако нам нужно явно обратиться к NOT_A в определениях нетерминалов.Поэтому выражения как

[ <A> ]

должны быть переписаны как

( <A> | <NOT_A> )

для обеспечения переключения состояния.

...