codesimian
Class Compile.ParseObjectsByPriority

java.lang.Object
  extended by codesimian.CS
      extended by codesimian.DefaultCS
          extended by codesimian.Compile
              extended by codesimian.Compile.ParseObjectsByPriority
All Implemented Interfaces:
CodeSimian, java.io.Serializable
Enclosing class:
Compile

public static class Compile.ParseObjectsByPriority
extends Compile

Infix-syntax for CodeSimian language. Example: 2 + 3 * sin x
but there must be at least 1 space between each thing. 2+3 is not valid but 2 + 3 is.

There is no ( or ) when parsing by CS.parsePriority(). There are only names of things and the symbol # to define names. Later I want to merge this language with the original CodeSimian language (which includes ( and )) so you can type code like: sound( .2 * sine(.563 + count#c * sine c) )

There are 3 types of CSs that can be parsed this way, depending on if their minP() is 0, 1, or 2. If 3 or higher, they cant be parsed by infix syntax.

Should it parse by minP() always? or should it sometimes choose to put more Ps in than minP() but still lessEq than maxP()?

CSs whose minP()==0 should be parsed first, ==1 parsed next, ==2 parsed last.

                start: a * b + c * - d //nothing parsed yet. dot (.) is parse position
                a . * b + c * - d //a is leaf
                a * . b + c * - d //* has minP()==2
                a * b . + c * - d //shift/reduce conflict. Could reduce a*b to *(a b), but + could have higher priority.
                (a*b) + . c * - d //+ has less parse priority than *, so reduce a*b. 
                (a*b) + c . * - d //dont know what c will become... shift. Leafs (like c) should have high priority.
                (a*b) + c * . - d
                (a*b) + c * - . d //- higher than *
                (a*b) + c * - d . //end of string should have less priority than d, so reduce
                (a*b) + c * (- d) //reduce again
                (a*b) + (c * (- d)) //reduce again
                end: ( (a*b) + (c * (- d)) )
        

See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class codesimian.Compile
Compile.CompilerPipeline, Compile.LParenSymbol, Compile.MyFuelSymbol, Compile.NameSymbol, Compile.ParseObjects, Compile.ParseObjectsByPriority, Compile.RParenSymbol, Compile.SimpleCompiler, Compile.SmallSymbol, Compile.Symbol, Compile.TokenizeCode, Compile.TokensToObjects, Compile.WhitespaceSymbol
 
Field Summary
 
Fields inherited from class codesimian.Compile
LPAREN, MYFUEL, NAME, RPAREN, TEMPORARY_PARAM, WHITESPACE
 
Fields inherited from class codesimian.CS
DESCRIPTION, END, EXECPROXY, FUEL, HEAP, JAVACODE, NEWINSTANCE, NULL, PARENT, PARSEPRIORITY, PREV, TESTER
 
Constructor Summary
Compile.ParseObjectsByPriority()
           
 
Method Summary
 java.lang.String description()
          a short description of this CS, shorter than the javadoc, but long enough to tell what the params are for.
 double DForProxy()
          D() and DForProxy() are the 2 most important functions in CS.
 int highestPri(CS list, java.util.Set<CS> exclude)
          returns the CS with highest parsePriority(), but it cant be in the Set.
 java.lang.String keyword()
          For the CodeSimian language as a String.
CodeSimian language keyword, like "+" "*" "max" ">" etc.

Override this function if you want to specify a keyword other than how I derive them from the class name, like + for Add.

Some CSs might never be intended to be used in the language by their keyword.
The best example (4/05) is Num, because it is used in the language like "3.4" instead of "num()".
 
Methods inherited from class codesimian.Compile
cost, javaCompile, javaCompile, minP
 
Methods inherited from class codesimian.DefaultCS
B, C, countP, decrementMyFuel, deleteP, F, fuel, getExec, getObject, heap, I, indexP, indexPName, insertB, insertC, insertD, insertF, insertI, insertJ, insertL, insertL, insertL1, insertP, insertS, insertZ, J, javaCode, LForProxy, LForProxy, myFuel, name, newInstance, objectToCS, objectToCSArray, objectToCSArray, P, prevD, prevL, PType, S, setB, setC, setCountP, setD, setD, setExec, setF, setFuel, setI, setJ, setL, setL, setL, setL1, setMyFuel, setName, setObject, setP, setPrevExec, setS, setZ, start, toString, V, Z
 
Methods inherited from class codesimian.CS
addP, addP, addP, addP, addP, BForProxy, CForProxy, clone, D, deleteP, FForProxy, IForProxy, isIllusion, javaCode, JForProxy, L, L, L, L, L, maxD, maxP, minD, overwrites, parent, parsePriority, PB, PC, PD, PF, PI, PJ, PL, prevB, prevC, prevF, prevI, prevJ, prevS, prevZ, proxyOf, PS, PZ, reflect, reflect, setB, setC, setCost, setDescription, setF, setHeap, setI, setJ, setL, setL, setParent, setParsePriority, setProxyOf, setPType, setS, setTester, setZ, SForProxy, tester, VForProxy, voidReflect, ZForProxy
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

Compile.ParseObjectsByPriority

public Compile.ParseObjectsByPriority()
Method Detail

DForProxy

public double DForProxy()
Description copied from class: CS
D() and DForProxy() are the 2 most important functions in CS. They execute this CS. All other execute functions, by default, use DForProxy instead of reinventing-the-wheel for their own type.

For example, J() calls JForProxy() which calls DForProxy(). D() calls DForProxy() directly.

Execute this CS and cast to double. D() is the main EXECUTE function. D() uses DForProxy(). DForProxy() is the main action of every CS, the most important function. By default, all other primitive EXECUTE functions defer to D.
Functions that EXECUTE this CS: L(Class) L(int,Class,int) Z() B() C() S() I() J() F() D() V()

Specified by:
DForProxy in class DefaultCS

keyword

public java.lang.String keyword()
Description copied from class: DefaultCS
For the CodeSimian language as a String.
CodeSimian language keyword, like "+" "*" "max" ">" etc.

Override this function if you want to specify a keyword other than how I derive them from the class name, like + for Add.

Some CSs might never be intended to be used in the language by their keyword.
The best example (4/05) is Num, because it is used in the language like "3.4" instead of "num()".
Default: Returns class name, minus package name (and its dots), and change the first letter to lowercase.

For example, CS.MaxParams does not override keyword(), which returns "maxP".

Overrides:
keyword in class DefaultCS
See Also:
CS.parent(), CS.newInstance(), CS.name()

description

public java.lang.String description()
Description copied from class: CS
a short description of this CS, shorter than the javadoc, but long enough to tell what the params are for. Example use: in automatically generated webpages for CodeSimian. Example: "returns sum of all params" for Add.

Overrides:
description in class DefaultCS

highestPri

public int highestPri(CS list,
                      java.util.Set<CS> exclude)
returns the CS with highest parsePriority(), but it cant be in the Set. Returns -1 if none exists.