\ infix 00.11.26 8:00 pm NAB \ Based on Brad Rodriguez' BNF code. .( Loading infix module...) cr needs toolkit needs bnf variable debug 0 debug ! : string>buffer ( c-addr u -- ) bp @ swap dup ballot move ; : ," ( <..."> -- ) ( Runtime: -- ) [char] " parse postpone sliteral postpone string>buffer ; immediate : between ( n low high -- bool ) 1+ within ; : ^ ( n1 n2 -- n1^n2 ) over swap 1 ?do over * loop nip ; char + token '+' char - token '-' char * token '*' char / token '/' char ( token '(' char ) token ')' char ^ token '^' char = token '=' char , token ',' bl token 'bl' bnf: 'bl' recurse | 'bl' | ;bnf : @token dup b, [char] 0 [char] 9 between update-pointer ; : @token >lower dup b, [char] a [char] z between update-pointer ; bnf: (number) recurse | ;bnf bnf: (number) ;bnf bnf: (var) recurse | ;bnf bnf: (var) (number) | (var) ;bnf 0 value exprvec bnf: '(' exprvec execute ')' | bl b, | ," @ " ;bnf bnf: '-' recurse ," negate " | ;bnf bnf: '^' recurse ," ^ " | ;bnf bnf: '*' ," * " recurse | '/' ," / " recurse | ;bnf bnf: ;bnf bnf: '+' ," + " recurse | '-' ," - " recurse | ;bnf bnf: ;bnf ' to exprvec : start-parsing ( -- startaddr ) true success ! bl skip bp @ ; : evaluate-code ( startaddr -- ) bp @ over - dup >r debug @ if cr 2dup type cr then evaluate r> negate ballot ; bnf: bl b, '=' ," swap !" | ;bnf bnf: ',' recurse | ;bnf : let ( "var=expr" -- ) start-parsing evaluate-code ; immediate