2010-02-20 1 views
0

Как создать маркер «Rational» в javacc, который принимает рациональное число и вычисляет его значение. Пример Foe '2/5' = 0.4. Я знаю, как писать регулярное выражение для этого, но не знаю и никогда не был должным образом преподан, как и где включать java-методы в код javacc. Мне сообщили, что:«Рациональный» токен в Javacc

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

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

ответ

0

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

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

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