version 1.1.1.1, 1999/11/02 11:52:34 |
version 1.9, 1999/11/16 13:16:22 |
|
|
/** |
/** |
* OM2OXM.java |
* $OpenXM: OpenXM/src/OpenMath/OM2OXM.java,v 1.8 1999/11/15 23:13:21 tam Exp $ |
* |
* |
* $B$3$N%/%i%9$G$O0J2<$N(B BNF $B$GI=$5$l$k9=J82r@O$r<BAu$7$F$$$k(B |
* $B$3$N%/%i%9$G$O0J2<$N(B BNF $B$GI=$5$l$k9=J82r@O$r<BAu$7$F$$$k(B |
* expr -> stag [expr | immediate]* etag |
* expr -> stag [expr | immediate]* etag |
Line 39 final class OM2OXM implements Runnable{ |
|
Line 39 final class OM2OXM implements Runnable{ |
|
private int token = TT_NULL; |
private int token = TT_NULL; |
private boolean lexPushbackFlag = false; |
private boolean lexPushbackFlag = false; |
private OpenXM asir; // for debug |
private OpenXM asir; // for debug |
|
private boolean debug = false; |
|
|
// Token Type for lexical analyzer |
// Token Type for lexical analyzer |
final static int TT_NULL = 0; |
final static int TT_NULL = 0; |
Line 53 final class OM2OXM implements Runnable{ |
|
Line 54 final class OM2OXM implements Runnable{ |
|
while(true){ |
while(true){ |
CMO tmp; |
CMO tmp; |
|
|
Thread.yield(); |
|
|
|
switch(asir.receiveOXtag()){ |
switch(asir.receiveOXtag()){ |
case OpenXM.OX_COMMAND: |
case OpenXM.OX_COMMAND: |
asir.receiveSM(); |
asir.receiveSM(); |
Line 62 final class OM2OXM implements Runnable{ |
|
Line 61 final class OM2OXM implements Runnable{ |
|
|
|
case OpenXM.OX_DATA: |
case OpenXM.OX_DATA: |
tmp = asir.receiveCMO(); |
tmp = asir.receiveCMO(); |
System.out.println("=> <OMOBJ>"+ CMO2OM(tmp) +"</OMOBJ>"); |
System.out.println("=> "+ CMO2OM(tmp)); |
break; |
break; |
} |
} |
|
|
Line 71 final class OM2OXM implements Runnable{ |
|
Line 70 final class OM2OXM implements Runnable{ |
|
} |
} |
|
|
public static String CMO2OM(CMO cmo){ |
public static String CMO2OM(CMO cmo){ |
|
return "<OMOBJ>"+ CMO2OM_sub(cmo) +"</OMOBJ>"; |
|
} |
|
|
|
private static String CMO2OM_sub(CMO cmo) throws NumberFormatException{ |
String ret = ""; |
String ret = ""; |
|
|
switch(cmo.getDISCRIMINATOR()){ |
switch(cmo.getDISCRIMINATOR()){ |
Line 89 final class OM2OXM implements Runnable{ |
|
Line 92 final class OM2OXM implements Runnable{ |
|
|
|
case CMO.CMO_MONOMIAL32: |
case CMO.CMO_MONOMIAL32: |
ret += "<OMA><OMS name=\"Monom\" cd=\"poly\"/>"; |
ret += "<OMA><OMS name=\"Monom\" cd=\"poly\"/>"; |
ret += CMO2OM(((CMO_MONOMIAL32)cmo).getCoefficient()); |
ret += CMO2OM_sub(((CMO_MONOMIAL32)cmo).getCoefficient()); |
for(int i=0;i<((CMO_MONOMIAL32)cmo).getDegree().length;i++){ |
for(int i=0;i<((CMO_MONOMIAL32)cmo).getDegree().length;i++){ |
ret += "<OMI>"+ ((CMO_MONOMIAL32)cmo).getDegree()[i] +"</OMI>"; |
ret += "<OMI>"+ ((CMO_MONOMIAL32)cmo).getDegree()[i] +"</OMI>"; |
} |
} |
Line 101 final class OM2OXM implements Runnable{ |
|
Line 104 final class OM2OXM implements Runnable{ |
|
|
|
case CMO.CMO_QQ: |
case CMO.CMO_QQ: |
return "<OMA><OMS name=\"over\" cd=\"basic\"/>"+ |
return "<OMA><OMS name=\"over\" cd=\"basic\"/>"+ |
CMO2OM(((CMO_QQ)cmo).getBunshi()) + CMO2OM(((CMO_QQ)cmo).getBunbo()) |
CMO2OM_sub(((CMO_QQ)cmo).getBunshi())+ |
+"</OMA>"; |
CMO2OM_sub(((CMO_QQ)cmo).getBunbo())+ |
|
"</OMA>"; |
|
|
case CMO.CMO_ZERO: |
case CMO.CMO_ZERO: |
return "<OMI> 0 </OMI>"; |
return "<OMI> 0 </OMI>"; |
Line 111 final class OM2OXM implements Runnable{ |
|
Line 115 final class OM2OXM implements Runnable{ |
|
|
|
case CMO.CMO_DMS_GENERIC: |
case CMO.CMO_DMS_GENERIC: |
ret += "<OMA><OMS name=\"PolyRing\" cd=\"poly\"/>"; |
ret += "<OMA><OMS name=\"PolyRing\" cd=\"poly\"/>"; |
ret += "<OMI>2</OMI>"; |
ret += "<OMI>2</OMI></OMA>"; |
return ret; |
return ret; |
|
|
case CMO.CMO_DISTRIBUTED_POLYNOMIAL: |
case CMO.CMO_DISTRIBUTED_POLYNOMIAL: |
ret += "<OMA><OMS name=\"DMP\" cd=\"poly\"/>"; |
ret += "<OMA><OMS name=\"DMP\" cd=\"poly\"/>"; |
ret += CMO2OM(((CMO_DISTRIBUTED_POLYNOMIAL)cmo).getRing()); |
ret += CMO2OM_sub(((CMO_DISTRIBUTED_POLYNOMIAL)cmo).getRing()); |
ret += "<OMA><OMS name=\"SDMP\" cd=\"poly\"/>"; |
ret += "<OMA><OMS name=\"SDMP\" cd=\"poly\"/>"; |
for(int i=0;i<((CMO_DISTRIBUTED_POLYNOMIAL)cmo).getMonomials().length;i++){ |
for(int i=0;i<((CMO_DISTRIBUTED_POLYNOMIAL)cmo).getMonomials().length; |
ret += CMO2OM(((CMO_DISTRIBUTED_POLYNOMIAL)cmo).getMonomials()[i]); |
i++){ |
|
ret += CMO2OM_sub(((CMO_DISTRIBUTED_POLYNOMIAL)cmo).getMonomials()[i]); |
} |
} |
ret += "</OMA></OMA>"; |
ret += "</OMA></OMA>"; |
return ret; |
return ret; |
|
|
|
case CMO.CMO_BIGFLOAT: |
|
ret += "<OMA><OMS name=\"times\" cd=\"basic\"/>"; |
|
ret += CMO2OM_sub(((CMO_BIGFLOAT)cmo).getSyosubu()); |
|
ret += "<OMA><OMS name=\"power\" cd=\"basic\"/>"; |
|
ret += "<OMI>2</OMI>"; |
|
ret += CMO2OM_sub(((CMO_BIGFLOAT)cmo).getShisubu()); |
|
ret += "</OMA></OMA>"; |
|
return ret; |
|
|
case CMO.CMO_INDETERMINATE: |
case CMO.CMO_INDETERMINATE: |
return "<OMV name=\""+ ((CMO_INDETERMINATE)cmo).getString() +"\"/>"; |
return "<OMV name=\""+ ((CMO_INDETERMINATE)cmo).getString() +"\"/>"; |
|
|
/* |
/* |
case CMO.CMO_TREE: |
case CMO.CMO_TREE: |
return "<OMA><OMS name=\""+ "\"/>"+ |
return "<OMA><OMS name=\""+ ((CMO_TREE)cmo).getName() +"\" cdname=\""+ |
"</OMA>"; |
((CMO_TREE)cmo).getCDName() +"\"/>" + "</OMA>"; |
*/ |
*/ |
|
|
default: |
default: |
return "<OMSTR>"+ cmo.toCMOexpression() +"</OMSTR>"; |
//return "<OMSTR>"+ cmo.toCMOexpression() +"</OMSTR>"; |
} |
} |
|
|
|
throw new NumberFormatException(""+ cmo.toCMOexpression()); |
} |
} |
|
|
private boolean isSpace(int ch){ // use from lex |
private boolean isSpace(int ch){ // use from lex |
Line 214 final class OM2OXM implements Runnable{ |
|
Line 230 final class OM2OXM implements Runnable{ |
|
}else if(ch != -1){ |
}else if(ch != -1){ |
is.unread(ch); |
is.unread(ch); |
while((ch = is.read()) != '<' && ch != -1){ |
while((ch = is.read()) != '<' && ch != -1){ |
System.out.println("debug: "+ch); |
debug("debug: "+ch); |
if(isSpace(ch)){ |
if(isSpace(ch)){ |
String spaces = String.valueOf(ch); |
String spaces = String.valueOf((char)ch); |
|
|
while(isSpace(ch = is.read())){ |
while(isSpace(ch = is.read())){ |
spaces += (char)ch; |
spaces += (char)ch; |
Line 244 final class OM2OXM implements Runnable{ |
|
Line 260 final class OM2OXM implements Runnable{ |
|
parse_error("We expect type :'"+ type |
parse_error("We expect type :'"+ type |
+"', but we got type :'"+ token +"'("+ attribute +")."); |
+"', but we got type :'"+ token +"'("+ attribute +")."); |
} |
} |
//System.out.println(":"+token+":"+attribute+":"+type); |
//debug(":"+token+":"+attribute+":"+type); |
return true; |
return true; |
} |
} |
|
|
Line 260 final class OM2OXM implements Runnable{ |
|
Line 276 final class OM2OXM implements Runnable{ |
|
} |
} |
|
|
ret = parse_object(); |
ret = parse_object(); |
|
|
exceptTokenTypeInParse(TT_EndTag); |
exceptTokenTypeInParse(TT_EndTag); |
if(!attribute.equals("OMOBJ")){ |
if(!attribute.equals("OMOBJ")){ |
parse_error("We expect '</OMOBJ>'."); |
parse_error("We expect '</OMOBJ>'."); |
Line 272 final class OM2OXM implements Runnable{ |
|
Line 288 final class OM2OXM implements Runnable{ |
|
private CMO parse_object() throws IOException{ |
private CMO parse_object() throws IOException{ |
// object -> variable |
// object -> variable |
// | '<OMI>' S? integer S? '</OMI>' |
// | '<OMI>' S? integer S? '</OMI>' |
|
// | '<OMSTR>' S? utf7 S? '</OMSTR>' |
// | '<OMA>' S? symbol S? objects S? '</OMA>' |
// | '<OMA>' S? symbol S? objects S? '</OMA>' |
CMO ret; |
CMO ret; |
|
|
Line 285 final class OM2OXM implements Runnable{ |
|
Line 302 final class OM2OXM implements Runnable{ |
|
}else if(attribute.equals("OMI")){ |
}else if(attribute.equals("OMI")){ |
pushbackLex(); |
pushbackLex(); |
ret = parse_OMI(); |
ret = parse_OMI(); |
|
}else if(attribute.equals("OMSTR")){ |
|
pushbackLex(); |
|
ret = parse_OMSTR(); |
}else if(attribute.equals("OMA")){ |
}else if(attribute.equals("OMA")){ |
String name,cdname; |
String name,cdname; |
int argnum = 0; |
int argnum = 0; |
Line 293 final class OM2OXM implements Runnable{ |
|
Line 313 final class OM2OXM implements Runnable{ |
|
|
|
if(name.equals("DMP")){ |
if(name.equals("DMP")){ |
ret = parse_symb_DMP(); |
ret = parse_symb_DMP(); |
|
debug("poly: "+ret); |
}else{ |
}else{ |
ret = new CMO_TREE(name,"Basic",parse_objects()); |
ret = new CMO_TREE(name,"Basic",parse_objects()); |
} |
} |
Line 327 final class OM2OXM implements Runnable{ |
|
Line 348 final class OM2OXM implements Runnable{ |
|
return ret; |
return ret; |
} |
} |
|
|
|
private CMO_STRING parse_OMSTR() throws IOException{ |
|
CMO_STRING ret; |
|
|
|
exceptTokenTypeInParse(TT_StartTag); |
|
if(!attribute.equals("OMSTR")){ |
|
parse_error("We expect '<OMSTR>'."); |
|
} |
|
|
|
if(readNextToken() == TT_String){ |
|
//ret = (CMO_STRING)parse_utf7(); |
|
ret = new CMO_STRING(attribute); |
|
}else{ |
|
ret = new CMO_STRING(""); |
|
pushbackLex(); |
|
} |
|
|
|
exceptTokenTypeInParse(TT_EndTag); |
|
if(!attribute.equals("OMSTR")){ |
|
parse_error("We expect '</OMSTR>'."); |
|
} |
|
|
|
return ret; |
|
} |
|
|
private CMO parse_symb_DMP() throws IOException{ |
private CMO parse_symb_DMP() throws IOException{ |
parse_object(); |
parse_object(); |
return new CMO_DISTRIBUTED_POLYNOMIAL(new CMO_DMS_GENERIC(), |
return new CMO_DISTRIBUTED_POLYNOMIAL(new CMO_DMS_GENERIC(), |
Line 388 final class OM2OXM implements Runnable{ |
|
Line 433 final class OM2OXM implements Runnable{ |
|
array[i] = ((CMO_ZZ)degree.elementAt(i+1)).intValue(); |
array[i] = ((CMO_ZZ)degree.elementAt(i+1)).intValue(); |
} |
} |
|
|
|
//debug("monom: "+ new CMO_MONOMIAL32(array,(CMO_ZZ)degree.elementAt(0))); |
return new CMO_MONOMIAL32(array,(CMO_ZZ)degree.elementAt(0)); |
return new CMO_MONOMIAL32(array,(CMO_ZZ)degree.elementAt(0)); |
} |
} |
|
|
private CMO parse_objects() throws IOException{ |
private CMO_LIST parse_objects() throws IOException{ |
// $B2r@O$5$l$?(B object $B$r(B LIST $B$GJV$9(B |
// $B2r@O$5$l$?(B object $B$r(B LIST $B$GJV$9(B |
Vector objects = new Vector(); |
Vector objects = new Vector(); |
CMO[] array; |
CMO[] array; |
Line 406 final class OM2OXM implements Runnable{ |
|
Line 452 final class OM2OXM implements Runnable{ |
|
array = new CMO[objects.size()]; |
array = new CMO[objects.size()]; |
objects.copyInto((Object[])array); |
objects.copyInto((Object[])array); |
|
|
System.out.println("debug :"+ new CMO_LIST(array)); |
debug("debug :"+ new CMO_LIST(array)); |
return new CMO_LIST(array); |
return new CMO_LIST(array); |
} |
} |
|
|
Line 614 final class OM2OXM implements Runnable{ |
|
Line 660 final class OM2OXM implements Runnable{ |
|
return str; |
return str; |
} |
} |
|
|
private void parse_error(String mesg){ |
private void parse_error(String mesg) throws NumberFormatException{ |
System.err.println(mesg); |
String ret; |
System.err.print("error occuered near :"); |
|
|
ret = mesg +"\n"; |
|
ret += "error occuered near :"; |
try{ |
try{ |
for(int i=0;i<10;i++){ |
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){} |
}catch(IOException e){} |
System.exit(1); |
ret += "\n"; |
|
|
|
throw new NumberFormatException(ret); |
} |
} |
|
|
|
private void debug(String str){ |
|
if(debug){ |
|
System.err.println(str); |
|
} |
|
} |
|
|
public static void main(String[] argv) throws IOException{ |
public static void main(String[] argv) throws IOException{ |
OM2OXM P = new OM2OXM(); |
OM2OXM P = new OM2OXM(); |
OpenXM asir; |
OpenXM asir; |
Line 671 final class OM2OXM implements Runnable{ |
|
Line 726 final class OM2OXM implements Runnable{ |
|
|
|
//$B%5!<%PB&$+$iAw?.$5$l$?J8;zNs$r<u?.$7$^$9!#(B |
//$B%5!<%PB&$+$iAw?.$5$l$?J8;zNs$r<u?.$7$^$9!#(B |
while(true){ |
while(true){ |
CMO obj = P.parse(System.in); |
try{ |
asir.send(obj); |
CMO obj = P.parse(System.in); |
asir.sendSM(new SM(SM.SM_popCMO)); |
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){ |
}catch(IOException e){ |
e.printStackTrace(); |
e.printStackTrace(); |
|
}finally{ |
|
System.out.println("breaking..."); |
} |
} |
} |
} |
} |
} |