tasks a-s
This commit is contained in:
parent
47bf37c096
commit
b83f433714
12433 changed files with 156208 additions and 123 deletions
|
|
@ -0,0 +1,41 @@
|
|||
(de operator (Op)
|
||||
(member Op '("\^" "*" "/" "+" "-")) )
|
||||
|
||||
(de leftAssoc (Op)
|
||||
(member Op '("*" "/" "+" "-")) )
|
||||
|
||||
(de precedence (Op)
|
||||
(case Op
|
||||
("\^" 4)
|
||||
(("*" "/") 3)
|
||||
(("+" "-") 2) ) )
|
||||
|
||||
(de shuntingYard (Str)
|
||||
(make
|
||||
(let (Fmt (-7 -30 -4) Stack)
|
||||
(tab Fmt "Token" "Output" "Stack")
|
||||
(for Token (str Str "_")
|
||||
(cond
|
||||
((num? Token) (link @))
|
||||
((= "(" Token) (push 'Stack Token))
|
||||
((= ")" Token)
|
||||
(until (= "(" (car Stack))
|
||||
(unless Stack
|
||||
(quit "Unbalanced Stack") )
|
||||
(link (pop 'Stack)) )
|
||||
(pop 'Stack) )
|
||||
(T
|
||||
(while
|
||||
(and
|
||||
(operator (car Stack))
|
||||
((if (leftAssoc (car Stack)) <= <)
|
||||
(precedence Token)
|
||||
(precedence (car Stack)) ) )
|
||||
(link (pop 'Stack)) )
|
||||
(push 'Stack Token) ) )
|
||||
(tab Fmt Token (glue " " (made)) Stack) )
|
||||
(while Stack
|
||||
(when (= "(" (car Stack))
|
||||
(quit "Unbalanced Stack") )
|
||||
(link (pop 'Stack))
|
||||
(tab Fmt NIL (glue " " (made)) Stack) ) ) ) )
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
: (shuntingYard "3 + 4 * 2 / (1 - 5) \^ 2 \^ 3")
|
||||
Token Output Stack
|
||||
3 3
|
||||
+ 3 +
|
||||
4 3 4 +
|
||||
* 3 4 *+
|
||||
2 3 4 2 *+
|
||||
/ 3 4 2 * /+
|
||||
( 3 4 2 * (/+
|
||||
1 3 4 2 * 1 (/+
|
||||
- 3 4 2 * 1 -(/+
|
||||
5 3 4 2 * 1 5 -(/+
|
||||
) 3 4 2 * 1 5 - /+
|
||||
^ 3 4 2 * 1 5 - ^/+
|
||||
2 3 4 2 * 1 5 - 2 ^/+
|
||||
^ 3 4 2 * 1 5 - 2 ^^/+
|
||||
3 3 4 2 * 1 5 - 2 3 ^^/+
|
||||
3 4 2 * 1 5 - 2 3 ^ ^/+
|
||||
3 4 2 * 1 5 - 2 3 ^ ^ /+
|
||||
3 4 2 * 1 5 - 2 3 ^ ^ / +
|
||||
3 4 2 * 1 5 - 2 3 ^ ^ / +
|
||||
-> (3 4 2 "*" 1 5 "-" 2 3 "\^" "\^" "/" "+")
|
||||
Loading…
Add table
Add a link
Reference in a new issue