=================================================================== RCS file: /home/cvs/OpenXM/src/OpenMath/OM2OXM.java,v retrieving revision 1.10 retrieving revision 1.15 diff -u -p -r1.10 -r1.15 --- OpenXM/src/OpenMath/OM2OXM.java 1999/11/17 07:04:25 1.10 +++ OpenXM/src/OpenMath/OM2OXM.java 2000/01/20 13:58:48 1.15 @@ -1,5 +1,5 @@ /** - * $OpenXM: OpenXM/src/OpenMath/OM2OXM.java,v 1.9 1999/11/16 13:16:22 tam Exp $ + * $OpenXM: OpenXM/src/OpenMath/OM2OXM.java,v 1.14 2000/01/19 15:32:50 tam Exp $ * * このクラスでは以下の BNF で表される構文解析を実装している * expr -> stag [expr | immediate]* etag @@ -39,7 +39,7 @@ final class OM2OXM implements Runnable{ private int token = TT_NULL; private boolean lexPushbackFlag = false; private OpenXM asir; // for debug - private boolean debug = false; + protected boolean debug = false; // for debug message // Token Type for lexical analyzer final static int TT_NULL = 0; @@ -88,8 +88,18 @@ final class OM2OXM implements Runnable{ case CMO.CMO_STRING: return ""+ ((CMO_STRING)cmo).getString() +""; - // case CMO.CMO_LIST: + case CMO.CMO_LIST: + ret += ""; + { + CMO ob[] = ((CMO_LIST)cmo).getElements(); + for(int i=0;i"; ret += CMO2OM_sub(((CMO_MONOMIAL32)cmo).getCoefficient()); @@ -118,6 +128,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()); @@ -129,6 +142,8 @@ 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()); @@ -142,10 +157,10 @@ final class OM2OXM implements Runnable{ 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]); + for(int i=0;i<((CMO_TREE)cmo).getLeaves().getElements().length;i++){ + ret += CMO2OM_sub(((CMO_TREE)cmo).getLeaves().getElements()[i]); } ret += ""; return ret; @@ -158,6 +173,36 @@ final class OM2OXM implements Runnable{ 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.getElements()[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'); } @@ -318,6 +363,8 @@ final class OM2OXM implements Runnable{ if(name.equals("DMP")){ ret = parse_symb_DMP(); debug("poly: "+ret); + }else if(name.equals("list")){ + ret = parse_objects(); }else{ ret = new CMO_TREE(name,"Basic",parse_objects()); } @@ -572,6 +619,7 @@ final class OM2OXM implements Runnable{ parse_error("We expect integer."); } + debug("ZZ: "+ str); return new CMO_ZZ(str); }