codesimian
Class Compile.ParseObjectsByPriority
java.lang.Object
codesimian.CS
codesimian.DefaultCS
codesimian.Compile
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 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 |
| Fields inherited from class codesimian.CS |
DESCRIPTION, END, EXECPROXY, FUEL, HEAP, JAVACODE, NEWINSTANCE, NULL, PARENT, PARSEPRIORITY, PREV, TESTER |
|
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.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 |
Compile.ParseObjectsByPriority
public Compile.ParseObjectsByPriority()
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.