«Рациональный» токен в Javacc - PullRequest
0 голосов
/ 21 февраля 2010

Как создать токен 'Rational' в javacc, который принимает рациональное число и вычисляет его значение. Для примера «2/5» значение = 0,4. Я знаю, как написать регулярное выражение для этого, но не знаю, и никогда меня не учили должным образом, как / где включать методы Java в код javacc. Мне сообщили, что:

Обратите внимание, что рациональные числа с 0 знаменателем не определены. Вместо того, чтобы генерировать ошибку, печатать бесконечность, как показано выше. Совет: Вы можете использовать методы indexOf и substring из класса Java String по порядку чтобы извлечь числитель и знаменатель частей вашего рационального числа. Это хорошая идея определите вторую переменную (например, val2), чтобы сохранить значение вашего знаменателя. Кроме того, бросили результат деления на удвоение, т.е. (double) val / val2.

Имейте в виду, что я новичок в javacc, но имею базовые знания о java. Любые советы по этому вопросу будут с благодарностью. Большое спасибо.

1 Ответ

0 голосов
/ 21 февраля 2010

Если в вашей грамматике нет проблем, связанных с точками выбора, вы можете использовать следующий синтаксис:

JAVACODE
void parse_rational() {
  Token num, den;
  num = getToken(1); // first value
  getNextToken(); // trash fract symbol
  den = getToken(1); // second value

  /* do whatever you want */   
}

Но этот подход заставляет JavaCC думать о "токене" parse_rational как о чёрном ящике, поэтому использовать его в выборе (например: S(): { parse_rational() | SomethingElse } это нехорошо.

Я не знаю, нужно ли вам писать полный компилятор или просто анализатор дроби, если ответ второй, эта штука может работать довольно хорошо ...

...