📄 rate.java
字号:
package semantic;
import java.util.Hashtable;
public class Rate {
protected int type;
private static Hashtable ratedef;
public static boolean iseval;
public static void initialize()
{
ratedef=new Hashtable();
}
public static Double def(String s)
{
return (Double)ratedef.get((Object)s);
}
public static void adddef(String s,Double d)
{
ratedef.put((Object)s,(Object)d);
}
public static void rem(String s)
{
ratedef.remove((Object)s);
}
public static Rate Spec(String rate)
{
return new Spec(rate);
}
public static Rate Unspec(Double elem)
{
return new Unspec(elem);
}
public static Rate Strung(String elem)
{
return new Strung(elem);
}
public static Rate Number(Double elem)
{
return new Number(elem);
}
public static Rate Sub(Rate r1, Rate r2)
{
return new Sub(r1, r2);
}
public static Rate Div(Rate r1, Rate r2)
{
return new Div(r1, r2);
}
public static Rate Mult(Rate r1, Rate r2)
{
return new Mult(r1, r2);
}
public static Rate Plus(Rate r1, Rate r2)
{
return new Plus(r1, r2);
}
public static Rate Min(Rate r1, Rate r2)
{
return new Min(r1, r2);
}
public Rate min(Rate r)
{
switch(this.type)
{
case RateType.Spec_tag:
{
Double d1=((Spec)this).getRate();
switch(r.type)
{
case RateType.Spec_tag:
{
Double d2=((Spec)r).getRate();
if(d1.doubleValue()<d2.doubleValue()) return this;
else return r;
}
case RateType.Unspec_tag:
{
return this;
}
case RateType.Number_tag:
{
Double d2=((Number)r).getRate();
if(d1.doubleValue()<d2.doubleValue()) return this;
else return r;
}
}
return Min(this,r);
}
case RateType.Unspec_tag:
{
Double d1=((Unspec)this).item;
switch(r.type)
{
case RateType.Spec_tag:
{
return r;
}
case RateType.Unspec_tag:
{
Double d2=((Unspec)r).item;
if(d1.doubleValue()<d2.doubleValue()) return this;
else return r;
}
case RateType.Strung_tag:
{
return r;
}
}
return Min(this,r);
}
case RateType.Strung_tag:
{
switch(r.type)
{
case RateType.Unspec_tag:
{
return this;
}
}
return Min(this,r);
}
case RateType.Number_tag:
{
Double d1=((Number)this).getRate();
switch(r.type)
{
case RateType.Spec_tag:
{
Double d2=((Spec)r).getRate();
if(d1.doubleValue()<d2.doubleValue()) return this;
else return r;
}
case RateType.Unspec_tag:
{
return this;
}
case RateType.Number_tag:
{
Double d2=((Number)r).getRate();
if(d1.doubleValue()<d2.doubleValue()) return this;
else return r;
}
}
return Min(this,r);
}
}
return Min(this,r);
}
public Rate div(Rate r) throws RateException
{
switch(this.type)
{
case RateType.Spec_tag:
{
Double d1=((Spec)this).getRate();
switch(r.type)
{
case RateType.Spec_tag:
{
Double d2=((Spec)r).getRate();
return Rate.Number(new Double(d1.doubleValue()/d2.doubleValue()));
}
case RateType.Number_tag:
{
Double d2=((Number)r).getRate();
return Rate.Number(new Double(d1.doubleValue()/d2.doubleValue()));
}
case RateType.Unspec_tag:
{
throw new RateException("Tried to divide Spec & Unspec");
}
}
return Rate.Div(this,r);
}
case RateType.Unspec_tag:
{
Double d1=((Unspec)this).item;
switch(r.type)
{
case RateType.Spec_tag:
{
Double d2=((Spec)r).getRate();
return Rate.Unspec(new Double(d1.doubleValue()/d2.doubleValue()));
}
case RateType.Unspec_tag:
{
Double d2=((Unspec)r).item;
return Rate.Number(new Double(d1.doubleValue()/d2.doubleValue()));
}
case RateType.Strung_tag:
{
return Rate.Div(Rate.Number(d1),r);
}
}
return Rate.Div(this,r);
}
case RateType.Strung_tag:
{
String s1=((Strung)this).item;
switch(r.type)
{
case RateType.Strung_tag:
{
String s2=((Strung)r).item;
if(s1.equals(s2)) return Rate.Number(new Double(1.0));
return Rate.Div(this,r);
}
case RateType.Unspec_tag:
{
throw new RateException("Tried to divide Strung & Unspec");
}
}
return Rate.Div(this,r);
}
case RateType.Number_tag:
{
Double d1=((Number)this).getRate();
switch(r.type)
{
case RateType.Spec_tag:
{
Double d2=((Spec)r).getRate();
return Rate.Number(new Double(d1.doubleValue()/d2.doubleValue()));
}
case RateType.Number_tag:
{
Double d2=((Number)r).getRate();
return Rate.Number(new Double(d1.doubleValue()/d2.doubleValue()));
}
case RateType.Unspec_tag:
{
throw new RateException("Tried to divide Number & Unspec");
}
}
return Rate.Div(this,r);
}
}
return Rate.Div(this,r);
}
public Rate mult(Rate r) throws RateException
{
switch(this.type)
{
case RateType.Spec_tag:
{
Double d1=((Spec)this).getRate();
switch(r.type)
{
case RateType.Spec_tag:
{
Double d2=((Spec)r).getRate();
return Rate.Number(new Double(d1.doubleValue()*d2.doubleValue()));
}
case RateType.Number_tag:
{
Double d2=((Number)r).getRate();
return Rate.Number(new Double(d1.doubleValue()*d2.doubleValue()));
}
case RateType.Unspec_tag:
{
Double d2=((Unspec)r).item;
return Rate.Unspec(new Double(d1.doubleValue()*d2.doubleValue()));
}
}
return Rate.Mult(this,r);
}
case RateType.Unspec_tag:
{
Double d1=((Unspec)this).item;
switch(r.type)
{
case RateType.Spec_tag:
{
Double d2=((Spec)r).getRate();
return Rate.Unspec(new Double(d1.doubleValue()*d2.doubleValue()));
}
case RateType.Number_tag:
{
Double d2=((Number)r).getRate();
return Rate.Unspec(new Double(d1.doubleValue()*d2.doubleValue()));
}
case RateType.Unspec_tag:
{
throw new RateException("Tried to multiply two unspecified rates");
}
}
return Rate.Mult(this,r);
}
case RateType.Number_tag:
{
Double d1=((Number)this).getRate();
switch(r.type)
{
case RateType.Spec_tag:
{
Double d2=((Spec)r).getRate();
return Rate.Number(new Double(d1.doubleValue()*d2.doubleValue()));
}
case RateType.Number_tag:
{
Double d2=((Number)r).getRate();
return Rate.Number(new Double(d1.doubleValue()*d2.doubleValue()));
}
case RateType.Unspec_tag:
{
Double d2=((Unspec)r).item;
return Rate.Unspec(new Double(d1.doubleValue()*d2.doubleValue()));
}
}
return Rate.Mult(this,r);
}
}
return Rate.Mult(this,r);
}
public Rate minus(Rate r) throws RateException
{
switch(this.type)
{
case RateType.Spec_tag:
{
Double d1=((Spec)this).getRate();
switch(r.type)
{
case RateType.Spec_tag:
{
Double d2=((Spec)r).getRate();
return Rate.Number(new Double(d1.doubleValue()-d2.doubleValue()));
}
case RateType.Number_tag:
{
Double d2=((Number)r).getRate();
return Rate.Number(new Double(d1.doubleValue()-d2.doubleValue()));
}
case RateType.Unspec_tag:
{
throw new RateException("Tried to subtract Spec - Unspec");
}
}
return Rate.Sub(this,r);
}
case RateType.Unspec_tag:
{
Double d1=((Unspec)this).item;
switch(r.type)
{
case RateType.Spec_tag:
{
throw new RateException("Tried to subtract Specified rate from a String");
}
case RateType.Unspec_tag:
{
Double d2=((Unspec)r).item;
return Rate.Unspec(new Double(d1.doubleValue()-d2.doubleValue()));
}
case RateType.Strung_tag:
{
throw new RateException("Tried to subtract Specified rate from a String");
}
}
return Rate.Sub(this,r);
}
case RateType.Strung_tag:
{
String s1=((Strung)this).item;
switch(r.type)
{
case RateType.Strung_tag:
{
String s2=((Strung)r).item;
if(s1.equals(s2)) return Rate.Number(new Double(1.0));
return Rate.Sub(this,r);
}
case RateType.Unspec_tag:
{
throw new RateException("Tried to subtract String and Unspec");
}
}
return Rate.Sub(this,r);
}
}
return Rate.Sub(this,r);
}
public Rate plus(Rate r) throws RateException
{
switch(this.type)
{
case RateType.Spec_tag:
{
Double d1=((Spec)this).getRate();
switch(r.type)
{
case RateType.Spec_tag:
{
Double d2=((Spec)r).getRate();
return Rate.Number(new Double(d1.doubleValue()+d2.doubleValue()));
}
case RateType.Number_tag:
{
Double d2=((Number)r).getRate();
return Rate.Number(new Double(d1.doubleValue()+d2.doubleValue()));
}
case RateType.Unspec_tag:
{
throw new RateException("Attempting to add specified and unspecified rates");
}
}
return Rate.Plus(this,r);
}
case RateType.Unspec_tag:
{
Double d1=((Unspec)this).item;
switch(r.type)
{
case RateType.Spec_tag:
{
throw new RateException("Tried to add Unspec & Spec bingle 2");
}
case RateType.Unspec_tag:
{
Double d2=((Unspec)r).item;
return Rate.Unspec(new Double(d1.doubleValue()+d2.doubleValue()));
}
}
return Rate.Plus(this,r);
}
case RateType.Number_tag:
{
Double d1=((Number)this).getRate();
switch(r.type)
{
case RateType.Spec_tag:
{
Double d2=((Spec)r).getRate();
return Rate.Number(new Double(d1.doubleValue()+d2.doubleValue()));
}
case RateType.Number_tag:
{
Double d2=((Number)r).getRate();
return Rate.Number(new Double(d1.doubleValue()+d2.doubleValue()));
}
case RateType.Unspec_tag:
{
throw new RateException("Tried to add Spec & Unspec bingle 3");
}
}
return Rate.Plus(this,r);
}
}
return Rate.Plus(this,r);
}
public int compare(Rate r)
{
switch (this.type) {
case RateType.Spec_tag:
{
Double w = ((Spec)this).getRate();
{
switch (r.type)
{
case RateType.Spec_tag:
{
Double ra = ((Spec)r).getRate();
if (ra.doubleValue() > w.doubleValue()) return 1;
if (w.doubleValue() > ra.doubleValue()) return - 1;
return 0;
}
case RateType.Number_tag:
{
Double ra = ((Rate.Number)r).getRate();
if (ra.doubleValue() > w.doubleValue()) return 1;
if (w.doubleValue() > ra.doubleValue()) return - 1;
return 0;
}
}
return - 1;
}
}
case RateType.Unspec_tag:
{
Double w = ((Rate.Unspec)this).item;
{
switch (r.type)
{
case RateType.Unspec_tag:
{
Double ra = ((Rate.Unspec)r).item;
if (ra.doubleValue() > w.doubleValue()) return 1;
if (w.doubleValue() > ra.doubleValue()) return - 1;
return 0;
}
case RateType.Spec_tag:
{
return 1;
}
}
return - 1;
}
}
case RateType.Strung_tag:
{
String alpha = ((Strung)this).item;
{
switch (r.type)
{
case RateType.Strung_tag:
{
String beta = ((Rate.Strung)r).item;
return beta.compareTo(alpha);
}
case RateType.Spec_tag:
{
return 1;
}
case RateType.Unspec_tag:
{
return 1;
}
}
return - 1;
}
}
case RateType.Number_tag:
{
Double w = ((Rate.Number)this).getRate();
{
switch (r.type)
{
case RateType.Spec_tag:
{
Double ra = ((Rate.Spec)r).getRate();
if (ra.doubleValue() > w.doubleValue()) return 1;
if (w.doubleValue() > ra.doubleValue()) return - 1;
return 0;
}
case RateType.Number_tag:
{
Double ra = ((Rate.Number)r).getRate();
if (ra.doubleValue() > w.doubleValue()) return 1;
if (w.doubleValue() > ra.doubleValue()) return - 1;
return 0;
}
}
return - 1;
}
}
case RateType.Plus_tag:
{
Rate.Plus case11 = (Rate.Plus)this;
Rate out2 = case11.r2;
Rate out1 = case11.r1;
{
switch (r.type)
{
case RateType.Plus_tag:
{
Rate.Plus case21 = (Rate.Plus)r;
Rate in2 = case21.r2;
Rate in1 = case21.r1;
int temp = out1.compare(in1);
if (temp != 0) return temp;
return out2.compare(in2);
}
case RateType.Spec_tag:
{
return 1;
}
case RateType.Unspec_tag:
{
return 1;
}
case RateType.Strung_tag:
{
return 1;
}
}
return - 1;
}
}
case RateType.Sub_tag:
{
Rate.Sub case11 = (Rate.Sub)this;
Rate out2 = case11.r2;
Rate out1 = case11.r1;
{
switch (r.type)
{
case RateType.Sub_tag:
{
Rate.Sub case21 = (Rate.Sub)r;
Rate in2 = case21.r2;
Rate in1 = case21.r1;
int temp = out1.compare(in1);
if (temp != 0) return temp;
return out2.compare(in2);
}
case RateType.Spec_tag:
{
return 1;
}
case RateType.Unspec_tag:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -