tags:

views:

39

answers:

2

Hello,

How does one create a 'Rational' token in javacc that takes a rational number and calculates its value. Foe example '2/5' value =0.4. I know how to write a regex for this, but don't know, and have never been properly taught, how to/where to incorporate java methods in javacc code. I have been advised that:

Note that rational numbers with 0 denominator are undefined. Instead of generating an error, print infinity, as shown above. Advice: You can use the indexOf and substring methods from the Java String class in order to extract the numerator and denominator parts of your rational number. It’s a good idea to define a second variable (e.g. val2) in order store the value of your denominator. Also, cast the result of the division to double i.e. (double) val / val2.

Bear in mind that I'm new to javacc, but have a basic knowledge of java. Any advice on this matter will be greatly appreciated. Many thanks.

A: 

If there aren't problems related to choice points inside your grammar you can use the following syntax:

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 */   
}

But this approach makes JavaCC think about the "token" parse_rational as a black box, that's why using it in a choice (eg: S(): { parse_rational() | SomethingElse } it's not good.

I don't know if you need to write a full compiler or just a fraction parser, if the answer is the second this thing can work quite well..

Jack
A: 

Thanks very much. I've solved the problem now.