===================================================================
RCS file: /home/cvs/OpenXM/src/OpenMath/OM2OXM.java,v
retrieving revision 1.6
retrieving revision 1.13
diff -u -p -r1.6 -r1.13
--- OpenXM/src/OpenMath/OM2OXM.java 1999/11/14 22:57:44 1.6
+++ OpenXM/src/OpenMath/OM2OXM.java 1999/12/09 00:32:36 1.13
@@ -1,5 +1,5 @@
/**
- * $OpenXM: OpenXM/src/OpenMath/OM2OXM.java,v 1.5 1999/11/12 11:36:09 tam Exp $
+ * $OpenXM: OpenXM/src/OpenMath/OM2OXM.java,v 1.12 1999/11/18 15:13:01 tam Exp $
*
* このクラスでは以下の BNF で表される構文解析を実装している
* expr -> stag [expr | immediate]* etag
@@ -54,8 +54,6 @@ final class OM2OXM implements Runnable{
while(true){
CMO tmp;
- Thread.yield();
-
switch(asir.receiveOXtag()){
case OpenXM.OX_COMMAND:
asir.receiveSM();
@@ -75,7 +73,7 @@ final class OM2OXM implements Runnable{
return ""+ CMO2OM_sub(cmo) +"";
}
- private static String CMO2OM_sub(CMO cmo){
+ private static String CMO2OM_sub(CMO cmo) throws NumberFormatException{
String ret = "";
switch(cmo.getDISCRIMINATOR()){
@@ -120,6 +118,9 @@ final class OM2OXM implements Runnable{
ret += "2";
return ret;
+ case CMO.CMO_RECURSIVE_POLYNOMIAL:
+ return CMO2OM_CoefficientOfRecursivePOLYNOMIAL(((CMO_RECURSIVE_POLYNOMIAL)cmo).getPolynomial(),((CMO_RECURSIVE_POLYNOMIAL)cmo).getVariables());
+
case CMO.CMO_DISTRIBUTED_POLYNOMIAL:
ret += "";
ret += CMO2OM_sub(((CMO_DISTRIBUTED_POLYNOMIAL)cmo).getRing());
@@ -131,20 +132,67 @@ final class OM2OXM implements Runnable{
ret += "";
return ret;
+ //case CMO.CMO_POLYNOMIAL_IN_ONE_VARIABLE:
+
+ case CMO.CMO_BIGFLOAT:
+ ret += "";
+ ret += CMO2OM_sub(((CMO_BIGFLOAT)cmo).getSyosubu());
+ ret += "";
+ ret += "2";
+ ret += CMO2OM_sub(((CMO_BIGFLOAT)cmo).getShisubu());
+ ret += "";
+ return ret;
+
case CMO.CMO_INDETERMINATE:
return "";
- /*
- case CMO.CMO_TREE:
- return ""+
- "";
- */
+ case CMO.CMO_TREE:
+ ret += "";
+ for(int i=0;i<((CMO_TREE)cmo).getLeaves().getElement().length;i++){
+ ret += CMO2OM_sub(((CMO_TREE)cmo).getLeaves().getElement()[i]);
+ }
+ ret += "";
+ return ret;
default:
- return ""+ cmo.toCMOexpression() +"";
+ //return ""+ cmo.toCMOexpression() +"";
}
+
+ throw new NumberFormatException("unknown convert way:"+
+ cmo.toCMOexpression());
}
+ private static String CMO2OM_CoefficientOfRecursivePOLYNOMIAL(CMO cmo,CMO_LIST variables){
+ CMO_POLYNOMIAL_IN_ONE_VARIABLE poly;
+ String ret = "",variable;
+
+ if(!(cmo instanceof CMO_POLYNOMIAL_IN_ONE_VARIABLE)){
+ return CMO2OM_sub(cmo);
+ }
+
+ poly = (CMO_POLYNOMIAL_IN_ONE_VARIABLE)cmo;
+ variable = CMO2OM_sub(variables.getElement()[poly.getVariable()]);
+
+ for(int i=0;i"+
+ ""+
+ variable +""+ poly.getDegrees()[i] +""+
+ CMO2OM_CoefficientOfRecursivePOLYNOMIAL(poly.getCoefficients()[i],
+ variables)
+ +"";
+ if(i==0){
+ ret = mono;
+ }else{
+ ret = ""+ ret + mono +"";
+ }
+ }
+
+ return ret;
+ }
+
private boolean isSpace(int ch){ // use from lex
return (ch==' ' || ch=='\t' || ch=='\n' || ch=='\r');
}
@@ -428,7 +476,7 @@ final class OM2OXM implements Runnable{
return new CMO_MONOMIAL32(array,(CMO_ZZ)degree.elementAt(0));
}
- private CMO parse_objects() throws IOException{
+ private CMO_LIST parse_objects() throws IOException{
// 解析された object を LIST で返す
Vector objects = new Vector();
CMO[] array;
@@ -443,7 +491,7 @@ final class OM2OXM implements Runnable{
array = new CMO[objects.size()];
objects.copyInto((Object[])array);
- System.out.println("debug :"+ new CMO_LIST(array));
+ debug("debug :"+ new CMO_LIST(array));
return new CMO_LIST(array);
}
@@ -559,6 +607,7 @@ final class OM2OXM implements Runnable{
parse_error("We expect integer.");
}
+ debug("ZZ: "+ str);
return new CMO_ZZ(str);
}
@@ -651,16 +700,19 @@ final class OM2OXM implements Runnable{
return str;
}
- private void parse_error(String mesg){
- System.err.println(mesg);
- System.err.print("error occuered near :");
+ private void parse_error(String mesg) throws NumberFormatException{
+ String ret;
+
+ ret = mesg +"\n";
+ ret += "error occuered near :";
try{
for(int i=0;i<10;i++){
- System.err.print((char)is.read());
+ ret += (char)is.read();
}
- System.err.println((char)is.read());
}catch(IOException e){}
- System.exit(1);
+ ret += "\n";
+
+ throw new NumberFormatException(ret);
}
private void debug(String str){
@@ -714,15 +766,19 @@ final class OM2OXM implements Runnable{
//サーバ側から送信された文字列を受信します。
while(true){
- CMO obj = P.parse(System.in);
- asir.send(obj);
- asir.sendSM(new SM(SM.SM_popCMO));
+ try{
+ CMO obj = P.parse(System.in);
+ asir.send(obj);
+ asir.sendSM(new SM(SM.SM_popCMO));
+ }catch(NumberFormatException e){
+ System.err.println(e.getMessage());
+ }
}
- //System.out.println("breaking...");
-
}catch(IOException e){
e.printStackTrace();
+ }finally{
+ System.out.println("breaking...");
}
}
}