JavaCCパッケージに付属する「インタープリター」の例を見てきました。並列関係式の構文を許可しますが、正しい答えが得られませんでした。
boolean a;
a = 1<2<3;
write a;
インタープリターは「1<2」を処理し、ブール値をスタックに入れるため、これにより ClassCastException が発生しますが、3 番目の変数 3 は整数であるため、ブール値とは比較できません。
を含む ASTLTNode.java を変更してみます
public class ASTLTNode extends SimpleNode {
public ASTLTNode(int id) {
super(id);
}
public ASTLTNode(ShawaParser p, int id) {
super(p, id);
}
public void interpret()
{
jjtGetChild(0).interpret();
jjtGetChild(1).interpret();
stack[--top] = new Boolean(((Integer)stack[top]).intValue() <
((Integer)stack[top + 1]).intValue());
}
}
interpret() の最後に「top++」を追加すると、スタックは最後の値を保持しますが、プロセスが完了すると、ブール値ではなく最後の桁が表示されます。
これを行うアイデアはありますか?どうもありがとう。