<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="et">
	<id>http://www.lambda.ee/w/index.php?action=history&amp;feed=atom&amp;title=Parse1.java</id>
	<title>Parse1.java - Redigeerimiste ajalugu</title>
	<link rel="self" type="application/atom+xml" href="http://www.lambda.ee/w/index.php?action=history&amp;feed=atom&amp;title=Parse1.java"/>
	<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Parse1.java&amp;action=history"/>
	<updated>2026-11-07T00:37:53Z</updated>
	<subtitle>Selle lehekülje redigeerimiste ajalugu</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Parse1.java&amp;diff=7819&amp;oldid=prev</id>
		<title>Tammet – 28. november 2005, kell 13:17</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Parse1.java&amp;diff=7819&amp;oldid=prev"/>
		<updated>2005-11-28T13:17:05Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Uus lehekülg&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
import java.io.*;&lt;br /&gt;
&lt;br /&gt;
class pdata {&lt;br /&gt;
  int ival;   &lt;br /&gt;
  ExpNode expval;  &lt;br /&gt;
  int strpt;&lt;br /&gt;
  boolean success=true;&lt;br /&gt;
  /*  &lt;br /&gt;
  pdata () {&lt;br /&gt;
   success=true;&lt;br /&gt;
  } &lt;br /&gt;
  */    &lt;br /&gt;
}    &lt;br /&gt;
&lt;br /&gt;
abstract class ExpNode {              &lt;br /&gt;
  abstract double value();  // Return the value of this node.           &lt;br /&gt;
} // end class ExpNode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class VarNode extends ExpNode {  // Represents a node that holds a number &lt;br /&gt;
  String var;  &lt;br /&gt;
    &lt;br /&gt;
  VarNode( String str ) {       // Constructor.  Create a node to hold val.&lt;br /&gt;
     var = str;&lt;br /&gt;
  }&lt;br /&gt;
  double value() {      // The value is just the number that the node holds.&lt;br /&gt;
    return 10;&lt;br /&gt;
  }&lt;br /&gt;
} // end class ConstNode&lt;br /&gt;
&lt;br /&gt;
class ConstNode extends ExpNode {  // Represents a node that holds a number &lt;br /&gt;
  double number;  // The number in the node. &lt;br /&gt;
    &lt;br /&gt;
  ConstNode( double val ) {       // Constructor.  Create a node to hold val.&lt;br /&gt;
     number = val;&lt;br /&gt;
  }&lt;br /&gt;
  double value() {      // The value is just the number that the node holds.&lt;br /&gt;
    return number;&lt;br /&gt;
  }&lt;br /&gt;
} // end class ConstNode&lt;br /&gt;
&lt;br /&gt;
class BinOpNode extends ExpNode {   // Represents a node that holds an operator.&lt;br /&gt;
  char op;        // The operator.&lt;br /&gt;
  ExpNode left;   // The left operand.&lt;br /&gt;
  ExpNode right;  // The right operand.&lt;br /&gt;
  BinOpNode( char op, ExpNode left, ExpNode right ) {           // Constructor.  &lt;br /&gt;
    this.op = op;&lt;br /&gt;
    this.left = left; &lt;br /&gt;
    this.right = right;&lt;br /&gt;
  }&lt;br /&gt;
  double value() {&lt;br /&gt;
     double leftVal = left.value();&lt;br /&gt;
     double rightVal = right.value();&lt;br /&gt;
     switch ( op ) {&lt;br /&gt;
         case &amp;#039;+&amp;#039;:  return leftVal + rightVal;&lt;br /&gt;
         case &amp;#039;-&amp;#039;:  return leftVal - rightVal;&lt;br /&gt;
         case &amp;#039;*&amp;#039;:  return leftVal * rightVal;&lt;br /&gt;
         case &amp;#039;/&amp;#039;:  return leftVal / rightVal;&lt;br /&gt;
         default:   return Double.NaN;  // Bad operator.&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
} // end class BinOpNode&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class parse1 {      &lt;br /&gt;
      public static void main(String[] args) {                          &lt;br /&gt;
         pdata res;          &lt;br /&gt;
         System.out.println(&amp;quot;Parse: &amp;quot;+args[0]);          &lt;br /&gt;
         res=parseexp(args[0],0); &lt;br /&gt;
         System.out.println(&amp;quot;res ival: &amp;quot;+res.ival); &lt;br /&gt;
         System.out.println(&amp;quot;res expval: &amp;quot;+&lt;br /&gt;
           res.expval.value());  &lt;br /&gt;
          &lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
  static pdata parseexp(String str, int pt) {&lt;br /&gt;
    int i1;&lt;br /&gt;
    int i2;&lt;br /&gt;
    ExpNode exp; &lt;br /&gt;
    char s;  &lt;br /&gt;
    pdata el1;   &lt;br /&gt;
    pdata el2;  &lt;br /&gt;
    pdata res;  &lt;br /&gt;
    int len;&lt;br /&gt;
      &lt;br /&gt;
    len=str.length();  &lt;br /&gt;
      &lt;br /&gt;
    if (Character.isDigit(str.charAt(pt))) {&lt;br /&gt;
      return parseint(str,pt);&lt;br /&gt;
    }    &lt;br /&gt;
    &lt;br /&gt;
    if (str.charAt(pt)!=&amp;#039;(&amp;#039;) {&lt;br /&gt;
      return parsevar(str,pt);                     &lt;br /&gt;
    }   &lt;br /&gt;
    &lt;br /&gt;
    pt++;&lt;br /&gt;
    el1=parseexp(str,pt);&lt;br /&gt;
    if ((el1.strpt)&amp;gt;=len) {&lt;br /&gt;
      return parseerr(&amp;quot;cannot find operator&amp;quot;);&lt;br /&gt;
    }     &lt;br /&gt;
    s=str.charAt(el1.strpt);  &lt;br /&gt;
    if ((el1.strpt+1)&amp;gt;=len) {&lt;br /&gt;
      return parseerr(&amp;quot;cannot find second arg&amp;quot;);&lt;br /&gt;
    }    &lt;br /&gt;
    el2=parseexp(str,el1.strpt+1);  &lt;br /&gt;
    if (str.charAt(el2.strpt)!=&amp;#039;)&amp;#039;) {&lt;br /&gt;
      return parseerr(&amp;quot;cannot find )&amp;quot;);&lt;br /&gt;
    }  &lt;br /&gt;
    /*  &lt;br /&gt;
    System.out.println(&lt;br /&gt;
        &amp;quot;el1 ival: &amp;quot;+  &lt;br /&gt;
        el1.ival+&lt;br /&gt;
        &amp;quot; el1 strpt: &amp;quot;+&lt;br /&gt;
        el1.strpt+&lt;br /&gt;
       &amp;quot;s: &amp;quot;+s+&lt;br /&gt;
       &amp;quot;el2 ival: &amp;quot;+  &lt;br /&gt;
        el2.ival+&lt;br /&gt;
        &amp;quot; el2 strpt: &amp;quot;+&lt;br /&gt;
        el2.strpt);      &lt;br /&gt;
    */&lt;br /&gt;
    res=new pdata();&lt;br /&gt;
    res.strpt=el2.strpt+1;&lt;br /&gt;
    /*&lt;br /&gt;
    if (s==&amp;#039;+&amp;#039;) res.ival=el1.ival+el2.ival;&lt;br /&gt;
    else if (s==&amp;#039;*&amp;#039;) res.ival=el1.ival*el2.ival;        &lt;br /&gt;
    else if (s==&amp;#039;-&amp;#039;) res.ival=el1.ival-el2.ival;    &lt;br /&gt;
    else if (s==&amp;#039;/&amp;#039;) res.ival=el1.ival/el2.ival;                 &lt;br /&gt;
    else return parseerr(&amp;quot;unknown operator&amp;quot;);&lt;br /&gt;
    */&lt;br /&gt;
    exp = new BinOpNode(s,el1.expval,el2.expval);&lt;br /&gt;
    res.expval=exp;&lt;br /&gt;
    return res;        &lt;br /&gt;
  }      &lt;br /&gt;
       &lt;br /&gt;
    &lt;br /&gt;
  static pdata parseint(String str, int pt) {&lt;br /&gt;
      int ires=0;   &lt;br /&gt;
      int i;     &lt;br /&gt;
      ExpNode exp;      &lt;br /&gt;
      int len;&lt;br /&gt;
      String tmp;&lt;br /&gt;
      pdata res; &lt;br /&gt;
      len=str.length();      &lt;br /&gt;
      for(i=pt; i&amp;lt;len; i++) {&lt;br /&gt;
        if (!Character.isDigit(str.charAt(i))) {&lt;br /&gt;
          break;&lt;br /&gt;
        }    &lt;br /&gt;
      }          &lt;br /&gt;
      //System.out.println(&amp;quot;str: &amp;quot;+str);&lt;br /&gt;
      //System.out.println(&amp;quot;i: &amp;quot;+i);&lt;br /&gt;
      tmp=str.substring(pt,i);            &lt;br /&gt;
      //System.out.println(&amp;quot; tmp: &amp;quot;+tmp);&lt;br /&gt;
      ires = Integer.parseInt(tmp);        &lt;br /&gt;
      res=new pdata();&lt;br /&gt;
      //res.ival=ires;&lt;br /&gt;
      exp= new ConstNode(ires);&lt;br /&gt;
      res.expval=exp;&lt;br /&gt;
      res.strpt=i;&lt;br /&gt;
      return res;               &lt;br /&gt;
    }&lt;br /&gt;
  &lt;br /&gt;
  static pdata parsevar(String str, int pt) {    &lt;br /&gt;
      pdata res;&lt;br /&gt;
      ExpNode exp;      &lt;br /&gt;
      res = new pdata(); &lt;br /&gt;
      exp= new VarNode(str.substring(pt,pt+1));&lt;br /&gt;
      res.expval=exp;&lt;br /&gt;
      res.strpt=pt+1;&lt;br /&gt;
      return res;               &lt;br /&gt;
    }  &lt;br /&gt;
    &lt;br /&gt;
  static pdata parseerr(String errstr) {&lt;br /&gt;
    pdata res;&lt;br /&gt;
    res = new pdata();  &lt;br /&gt;
    res.success=false;&lt;br /&gt;
    System.out.println(&amp;quot;ERROR : &amp;quot;+errstr);      &lt;br /&gt;
    return res;&lt;br /&gt;
  }      &lt;br /&gt;
}    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tammet</name></author>
	</entry>
</feed>