'Rational' token in Javacc
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.
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..
精彩评论