BBS: Inland Empire Archive Date: 03-19-93 (21:00) Number: 373 From: QUINN TYLER JACKSON Refer#: NONE To: ALL Recvd: NO Subj: Formula Solver 1.4 6/ Conf: (2) Quik_Bas
>>> Continued from previous message
SELECT CASE Phase%
CASE 1
' See if something of a higher precedence should be done first.
CALL sqjDesParse(2, x)
Op$ = TOKEN$(LvlPtr)
' The lowest level of precedence is handled by this Level.
DO WHILE fqjInList(LOGICAL, Op$)
CALL sqjGetToken
CALL sqjDesParse(2, y)
CALL sqjApplyOp(Op$, x, y)
Op$ = TOKEN$(LvlPtr)
LOOP
CASE 2
' See if something of a higher precedence should be done first.
CALL sqjDesParse(3, x)
Op$ = TOKEN$(LvlPtr)
DO WHILE fqjInList(ADDSUB, Op$)
CALL sqjGetToken
CALL sqjDesParse(3, y)
CALL sqjApplyOp(Op$, x, y)
Op$ = TOKEN$(LvlPtr)
LOOP
CASE 3
' See if something of a higher precedence should be done first.
CALL sqjDesParse(4, x)
Op$ = TOKEN$(LvlPtr)
DO WHILE fqjInList(MULTDIV, Op$)
CALL sqjGetToken
CALL sqjDesParse(4, y)
CALL sqjApplyOp(Op$, x, y)
Op$ = TOKEN$(LvlPtr)
LOOP
CASE 4
' See if something of a higher precedence should be done first.
CALL sqjDesParse(5, x)
Op$ = TOKEN$(LvlPtr)
IF fqjInList(POWER, Op$) THEN
CALL sqjGetToken
CALL sqjDesParse(5, y)
CALL sqjApplyOp(Op$, x, y)
END IF
CASE 5
Op$ = ""
IF TypeToken(LvlPtr) = OperatorClass AND (fqjInList(ADDSUB,_
TOKEN$(LvlPtr))) THEN
Op$ = TOKEN$(LvlPtr)
CALL sqjGetToken
END IF
CALL sqjDesParse(6, x)
' This handles negative prefixes
SELECT CASE Op$
CASE "-"
x = -x
END SELECT
CASE 6
' This level handles parentheses
IF TOKEN$(LvlPtr) = "(" AND TypeToken(LvlPtr) = OperatorClass_
THEN
CALL sqjGetToken
CALL sqjDesParse(1, x)
IF TOKEN$(LvlPtr) <> ")" THEN
ErrorCode = eqjMismatchedParenthesis
END IF
CALL sqjGetToken
ELSE
SELECT CASE TypeToken(LvlPtr)
CASE DigitClass
x = VAL(TOKEN$(LvlPtr))
CALL sqjGetToken
CASE FunctionClass
x = fqjSolveFormula(TOKEN$(LvlPtr))
TypeToken(LvlPtr) = DigitClass
CALL sqjGetToken
END SELECT
END IF
END SELECT
END SUB
SUB sqjGetToken ()
TOKEN$(LvlPtr) = ""
DO WHILE fqjInList(WHITESPACE, MID$(EXPR$(LvlPtr), PTR(LvlPtr), 1))
PTR(LvlPtr) = PTR(LvlPtr) + 1
LOOP
Temp$ = MID$(EXPR$(LvlPtr), PTR(LvlPtr), 1)
IF Temp$ >= "0" AND Temp$ <= "9" THEN
' Build up a number from its digits
DO WHILE INSTR(" ()" + OPERATOR$, MID$(EXPR$(LvlPtr), PTR(LvlPtr),_
1)) = 0
TOKEN$(LvlPtr) = TOKEN$(LvlPtr) + MID$(EXPR$(LvlPtr),_
PTR(LvlPtr), 1)
PTR(LvlPtr) = PTR(LvlPtr) + 1
LOOP
TypeToken(LvlPtr) = DigitClass
EXIT SUB
END IF
IF INSTR("()" + OPERATOR$, MID$(EXPR$(LvlPtr), PTR(LvlPtr), 1)) THEN
TypeToken(LvlPtr) = OperatorClass
TOKEN$(LvlPtr) = MID$(EXPR$(LvlPtr), PTR(LvlPtr), 1)
PTR(LvlPtr) = PTR(LvlPtr) + 1
IF INSTR("()", TOKEN$(LvlPtr)) THEN
EXIT SUB
ELSE
' see if it's a compound operator
IF INSTR(OPERATOR$, MID$(EXPR$(LvlPtr), PTR(LvlPtr), 1)) THEN
Temp$ = MID$(EXPR$(LvlPtr), PTR(LvlPtr), 1)
IF Temp$ <> "-" THEN
TOKEN$(LvlPtr) = TOKEN$(LvlPtr) + Temp$
PTR(LvlPtr) = PTR(LvlPtr) + 1
END IF
END IF
END IF
EXIT SUB
END IF
Temp$ = MID$(EXPR$(LvlPtr), PTR(LvlPtr), 1)
IF Temp$ >= "@" AND Temp$ <= "Z" THEN
>>> Continued to next message
* OLX 2.1 TD * A program is just a big bug that happened to work....

Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET