'Рациональный' токен в Javacc

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

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

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


person E Shindler    schedule 20.02.2010    source источник


Ответы (1)


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

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 } это нехорошо.

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

person Jack    schedule 20.02.2010