B
This commit is contained in:
parent
e5e8880e41
commit
518da4a923
1019 changed files with 15877 additions and 0 deletions
|
|
@ -0,0 +1,58 @@
|
|||
Expr$ = "1 + 2 * (3 + (4 * 5 + 6 * 7 * 8) - 9) / 10"
|
||||
PRINT "Input = " Expr$
|
||||
AST$ = FNast(Expr$)
|
||||
PRINT "AST = " AST$
|
||||
PRINT "Value = " ;EVAL(AST$)
|
||||
END
|
||||
|
||||
DEF FNast(RETURN in$)
|
||||
LOCAL ast$, oper$
|
||||
REPEAT
|
||||
ast$ += FNast1(in$)
|
||||
WHILE ASC(in$)=32 in$ = MID$(in$,2) : ENDWHILE
|
||||
oper$ = LEFT$(in$,1)
|
||||
IF oper$="+" OR oper$="-" THEN
|
||||
ast$ += oper$
|
||||
in$ = MID$(in$,2)
|
||||
ELSE
|
||||
EXIT REPEAT
|
||||
ENDIF
|
||||
UNTIL FALSE
|
||||
= "(" + ast$ + ")"
|
||||
|
||||
DEF FNast1(RETURN in$)
|
||||
LOCAL ast$, oper$
|
||||
REPEAT
|
||||
ast$ += FNast2(in$)
|
||||
WHILE ASC(in$)=32 in$ = MID$(in$,2) : ENDWHILE
|
||||
oper$ = LEFT$(in$,1)
|
||||
IF oper$="*" OR oper$="/" THEN
|
||||
ast$ += oper$
|
||||
in$ = MID$(in$,2)
|
||||
ELSE
|
||||
EXIT REPEAT
|
||||
ENDIF
|
||||
UNTIL FALSE
|
||||
= "(" + ast$ + ")"
|
||||
|
||||
DEF FNast2(RETURN in$)
|
||||
LOCAL ast$
|
||||
WHILE ASC(in$)=32 in$ = MID$(in$,2) : ENDWHILE
|
||||
IF ASC(in$)<>40 THEN = FNnumber(in$)
|
||||
in$ = MID$(in$,2)
|
||||
ast$ = FNast(in$)
|
||||
in$ = MID$(in$,2)
|
||||
= ast$
|
||||
|
||||
DEF FNnumber(RETURN in$)
|
||||
LOCAL ch$, num$
|
||||
REPEAT
|
||||
ch$ = LEFT$(in$,1)
|
||||
IF INSTR("0123456789.", ch$) THEN
|
||||
num$ += ch$
|
||||
in$ = MID$(in$,2)
|
||||
ELSE
|
||||
EXIT REPEAT
|
||||
ENDIF
|
||||
UNTIL FALSE
|
||||
= num$
|
||||
Loading…
Add table
Add a link
Reference in a new issue