Skip to content

Instantly share code, notes, and snippets.

@survivorm
Created January 25, 2018 13:44
Show Gist options
  • Save survivorm/a37b4048ebd9d1b02673036ca8097034 to your computer and use it in GitHub Desktop.
Save survivorm/a37b4048ebd9d1b02673036ca8097034 to your computer and use it in GitHub Desktop.
*** STATES ***
State 0:S'
0: S' = . E STOP {}
1: E = . E + E {), -, +, *, STOP, /, ^}
2: E = . E - E {), -, +, *, STOP, /, ^}
3: E = . E * E {), -, +, *, STOP, /, ^}
4: E = . E / E {), -, +, *, STOP, /, ^}
5: E = . E ^ E {), -, +, *, STOP, /, ^}
6: E = . ( E ) {), -, +, *, STOP, /, ^}
7: E = . number {), -, +, *, STOP, /, ^}
GOTO:
E->1
ACTIONS:
(->SHIFT:2, number->SHIFT:3
State 1:E
0: S' = E . STOP {}
1: E = E . + E {), -, +, *, STOP, /, ^}
2: E = E . - E {), -, +, *, STOP, /, ^}
3: E = E . * E {), -, +, *, STOP, /, ^}
4: E = E . / E {), -, +, *, STOP, /, ^}
5: E = E . ^ E {), -, +, *, STOP, /, ^}
ACTIONS:
+->SHIFT:5, -->SHIFT:6, *->SHIFT:7, /->SHIFT:8, ^->SHIFT:9, STOP->ACCEPT
State 2:(
6: E = ( . E ) {), -, +, *, STOP, /, ^}
1: E = . E + E {), +, *, -, /, ^}
2: E = . E - E {), +, *, -, /, ^}
3: E = . E * E {), +, *, -, /, ^}
4: E = . E / E {), +, *, -, /, ^}
5: E = . E ^ E {), +, *, -, /, ^}
6: E = . ( E ) {), +, *, -, /, ^}
7: E = . number {), +, *, -, /, ^}
GOTO:
E->10
ACTIONS:
(->SHIFT:2, number->SHIFT:3
State 3:number
7: E = number . {), -, +, *, STOP, /, ^}
ACTIONS:
)->REDUCE:7, -->REDUCE:7, +->REDUCE:7, *->REDUCE:7, /->REDUCE:7, ^->REDUCE:7, STOP->REDUCE:7
State 4:STOP
0: S' = E STOP . {}
ACTIONS:
State 5:+
1: E = E + . E {), -, +, *, STOP, /, ^}
1: E = . E + E {), STOP, +, *, -, /, ^}
2: E = . E - E {), STOP, +, *, -, /, ^}
3: E = . E * E {), STOP, +, *, -, /, ^}
4: E = . E / E {), STOP, +, *, -, /, ^}
5: E = . E ^ E {), STOP, +, *, -, /, ^}
6: E = . ( E ) {), STOP, +, *, -, /, ^}
7: E = . number {), STOP, +, *, -, /, ^}
GOTO:
E->11
ACTIONS:
(->SHIFT:2, number->SHIFT:3
State 6:-
2: E = E - . E {), -, +, *, STOP, /, ^}
1: E = . E + E {), STOP, +, *, -, /, ^}
2: E = . E - E {), STOP, +, *, -, /, ^}
3: E = . E * E {), STOP, +, *, -, /, ^}
4: E = . E / E {), STOP, +, *, -, /, ^}
5: E = . E ^ E {), STOP, +, *, -, /, ^}
6: E = . ( E ) {), STOP, +, *, -, /, ^}
7: E = . number {), STOP, +, *, -, /, ^}
GOTO:
E->12
ACTIONS:
(->SHIFT:2, number->SHIFT:3
State 7:*
3: E = E * . E {), -, +, *, STOP, /, ^}
1: E = . E + E {), STOP, +, *, -, /, ^}
2: E = . E - E {), STOP, +, *, -, /, ^}
3: E = . E * E {), STOP, +, *, -, /, ^}
4: E = . E / E {), STOP, +, *, -, /, ^}
5: E = . E ^ E {), STOP, +, *, -, /, ^}
6: E = . ( E ) {), STOP, +, *, -, /, ^}
7: E = . number {), STOP, +, *, -, /, ^}
GOTO:
E->13
ACTIONS:
(->SHIFT:2, number->SHIFT:3
State 8:/
4: E = E / . E {), -, +, *, STOP, /, ^}
1: E = . E + E {), STOP, +, *, -, /, ^}
2: E = . E - E {), STOP, +, *, -, /, ^}
3: E = . E * E {), STOP, +, *, -, /, ^}
4: E = . E / E {), STOP, +, *, -, /, ^}
5: E = . E ^ E {), STOP, +, *, -, /, ^}
6: E = . ( E ) {), STOP, +, *, -, /, ^}
7: E = . number {), STOP, +, *, -, /, ^}
GOTO:
E->14
ACTIONS:
(->SHIFT:2, number->SHIFT:3
State 9:^
5: E = E ^ . E {), -, +, *, STOP, /, ^}
1: E = . E + E {), STOP, +, *, -, /, ^}
2: E = . E - E {), STOP, +, *, -, /, ^}
3: E = . E * E {), STOP, +, *, -, /, ^}
4: E = . E / E {), STOP, +, *, -, /, ^}
5: E = . E ^ E {), STOP, +, *, -, /, ^}
6: E = . ( E ) {), STOP, +, *, -, /, ^}
7: E = . number {), STOP, +, *, -, /, ^}
GOTO:
E->15
ACTIONS:
(->SHIFT:2, number->SHIFT:3
State 10:E
6: E = ( E . ) {), -, +, *, STOP, /, ^}
1: E = E . + E {), +, *, -, /, ^}
2: E = E . - E {), +, *, -, /, ^}
3: E = E . * E {), +, *, -, /, ^}
4: E = E . / E {), +, *, -, /, ^}
5: E = E . ^ E {), +, *, -, /, ^}
ACTIONS:
)->SHIFT:16, +->SHIFT:5, -->SHIFT:6, *->SHIFT:7, /->SHIFT:8, ^->SHIFT:9
State 11:E
1: E = E + E . {), -, +, *, STOP, /, ^}
1: E = E . + E {), STOP, +, *, -, /, ^}
2: E = E . - E {), STOP, +, *, -, /, ^}
3: E = E . * E {), STOP, +, *, -, /, ^}
4: E = E . / E {), STOP, +, *, -, /, ^}
5: E = E . ^ E {), STOP, +, *, -, /, ^}
ACTIONS:
+->REDUCE:1, -->REDUCE:1, *->SHIFT:7, /->SHIFT:8, ^->SHIFT:9, )->REDUCE:1, STOP->REDUCE:1
State 12:E
2: E = E - E . {), -, +, *, STOP, /, ^}
1: E = E . + E {), STOP, +, *, -, /, ^}
2: E = E . - E {), STOP, +, *, -, /, ^}
3: E = E . * E {), STOP, +, *, -, /, ^}
4: E = E . / E {), STOP, +, *, -, /, ^}
5: E = E . ^ E {), STOP, +, *, -, /, ^}
ACTIONS:
+->REDUCE:2, -->REDUCE:2, *->SHIFT:7, /->SHIFT:8, ^->SHIFT:9, )->REDUCE:2, STOP->REDUCE:2
State 13:E
3: E = E * E . {), -, +, *, STOP, /, ^}
1: E = E . + E {), STOP, +, *, -, /, ^}
2: E = E . - E {), STOP, +, *, -, /, ^}
3: E = E . * E {), STOP, +, *, -, /, ^}
4: E = E . / E {), STOP, +, *, -, /, ^}
5: E = E . ^ E {), STOP, +, *, -, /, ^}
ACTIONS:
+->REDUCE:3, -->REDUCE:3, *->REDUCE:3, /->REDUCE:3, ^->SHIFT:9, )->REDUCE:3, STOP->REDUCE:3
State 14:E
4: E = E / E . {), -, +, *, STOP, /, ^}
1: E = E . + E {), STOP, +, *, -, /, ^}
2: E = E . - E {), STOP, +, *, -, /, ^}
3: E = E . * E {), STOP, +, *, -, /, ^}
4: E = E . / E {), STOP, +, *, -, /, ^}
5: E = E . ^ E {), STOP, +, *, -, /, ^}
ACTIONS:
+->REDUCE:4, -->REDUCE:4, *->REDUCE:4, /->REDUCE:4, ^->SHIFT:9, )->REDUCE:4, STOP->REDUCE:4
State 15:E
5: E = E ^ E . {), -, +, *, STOP, /, ^}
1: E = E . + E {), STOP, +, *, -, /, ^}
2: E = E . - E {), STOP, +, *, -, /, ^}
3: E = E . * E {), STOP, +, *, -, /, ^}
4: E = E . / E {), STOP, +, *, -, /, ^}
5: E = E . ^ E {), STOP, +, *, -, /, ^}
ACTIONS:
+->REDUCE:5, -->REDUCE:5, *->REDUCE:5, /->REDUCE:5, ^->SHIFT:9, )->REDUCE:5, STOP->REDUCE:5
State 16:)
6: E = ( E ) . {), -, +, *, STOP, /, ^}
ACTIONS:
)->REDUCE:6, -->REDUCE:6, +->REDUCE:6, *->REDUCE:6, /->REDUCE:6, ^->REDUCE:6, STOP->REDUCE:6
*** PARSING STARTED
Current state:
Skipping whitespaces: ''
New position: (1, 0)
Layout content: ''
Context: *34 + 4.6 /
Tokens expected: ( or number
Token ahead: <number(34)>
Shift: 3 "34" at position (1, 0)
Action result = type:<type 'float'> value:34.0
Current state: 3
Skipping whitespaces: ' '
New position: (1, 3)
Layout content: ' '
Context: 34 *+ 4.6 / 2
Tokens expected: ) or - or + or * or / or ^ or STOP
Token ahead: <+(+)>
Reducing by prod '%s'.
Action result = type:<type 'float'> value:34.0
Current state: 1
Context: 34 *+ 4.6 / 2
Tokens expected: + or - or * or / or ^ or STOP
Token ahead: <+(+)>
Shift: 5 "+" at position (1, 3)
No action defined for '+'. Result is matched string.
Action result = type:<type 'unicode'> value:u'+'
Current state: 5
Skipping whitespaces: ' '
New position: (1, 5)
Layout content: ' '
Context: 34 + *4.6 / 2 *
Tokens expected: ( or number
Token ahead: <number(4.6)>
Shift: 3 "4.6" at position (1, 5)
Action result = type:<type 'float'> value:4.6
Current state: 3
Skipping whitespaces: ' '
New position: (1, 9)
Layout content: ' '
Context: 34 + 4.6 */ 2 * 4^2^
Tokens expected: ) or - or + or * or / or ^ or STOP
Token ahead: </(/)>
Reducing by prod '%s'.
Action result = type:<type 'float'> value:4.6
Current state: 11
Context: 34 + 4.6 */ 2 * 4^2^
Tokens expected: + or - or * or / or ^ or ) or STOP
Token ahead: </(/)>
Shift: 8 "/" at position (1, 9)
No action defined for '/'. Result is matched string.
Action result = type:<type 'unicode'> value:u'/'
Current state: 8
Skipping whitespaces: ' '
New position: (1, 11)
Layout content: ' '
Context: 4 + 4.6 / *2 * 4^2^2
Tokens expected: ( or number
Token ahead: <number(2)>
Shift: 3 "2" at position (1, 11)
Action result = type:<type 'float'> value:2.0
Current state: 3
Skipping whitespaces: ' '
New position: (1, 13)
Layout content: ' '
Context: + 4.6 / 2 ** 4^2^2 +
Tokens expected: ) or - or + or * or / or ^ or STOP
Token ahead: <*(*)>
Reducing by prod '%s'.
Action result = type:<type 'float'> value:2.0
Current state: 14
Context: + 4.6 / 2 ** 4^2^2 +
Tokens expected: + or - or * or / or ^ or ) or STOP
Token ahead: <*(*)>
Reducing by prod '%s'.
Action result = type:<type 'float'> value:2.3
Current state: 11
Context: + 4.6 / 2 ** 4^2^2 +
Tokens expected: + or - or * or / or ^ or ) or STOP
Token ahead: <*(*)>
Shift: 7 "*" at position (1, 13)
No action defined for '*'. Result is matched string.
Action result = type:<type 'unicode'> value:u'*'
Current state: 7
Skipping whitespaces: ' '
New position: (1, 15)
Layout content: ' '
Context: 4.6 / 2 * *4^2^2 + 78
Tokens expected: ( or number
Token ahead: <number(4)>
Shift: 3 "4" at position (1, 15)
Action result = type:<type 'float'> value:4.0
Current state: 3
Skipping whitespaces: ''
New position: (1, 16)
Layout content: ''
Context: .6 / 2 * 4*^2^2 + 78
Tokens expected: ) or - or + or * or / or ^ or STOP
Token ahead: <^(^)>
Reducing by prod '%s'.
Action result = type:<type 'float'> value:4.0
Current state: 13
Context: .6 / 2 * 4*^2^2 + 78
Tokens expected: + or - or * or / or ^ or ) or STOP
Token ahead: <^(^)>
Shift: 9 "^" at position (1, 16)
No action defined for '^'. Result is matched string.
Action result = type:<type 'unicode'> value:u'^'
Current state: 9
Skipping whitespaces: ''
New position: (1, 17)
Layout content: ''
Context: 6 / 2 * 4^*2^2 + 78
Tokens expected: ( or number
Token ahead: <number(2)>
Shift: 3 "2" at position (1, 17)
Action result = type:<type 'float'> value:2.0
Current state: 3
Skipping whitespaces: ''
New position: (1, 18)
Layout content: ''
Context: / 2 * 4^2*^2 + 78
Tokens expected: ) or - or + or * or / or ^ or STOP
Token ahead: <^(^)>
Reducing by prod '%s'.
Action result = type:<type 'float'> value:2.0
Current state: 15
Context: / 2 * 4^2*^2 + 78
Tokens expected: + or - or * or / or ^ or ) or STOP
Token ahead: <^(^)>
Shift: 9 "^" at position (1, 18)
No action defined for '^'. Result is matched string.
Action result = type:<type 'unicode'> value:u'^'
Current state: 9
Skipping whitespaces: ''
New position: (1, 19)
Layout content: ''
Context: / 2 * 4^2^*2 + 78
Tokens expected: ( or number
Token ahead: <number(2)>
Shift: 3 "2" at position (1, 19)
Action result = type:<type 'float'> value:2.0
Current state: 3
Skipping whitespaces: ' '
New position: (1, 21)
Layout content: ' '
Context: 2 * 4^2^2 *+ 78
Tokens expected: ) or - or + or * or / or ^ or STOP
Token ahead: <+(+)>
Reducing by prod '%s'.
Action result = type:<type 'float'> value:2.0
Current state: 15
Context: 2 * 4^2^2 *+ 78
Tokens expected: + or - or * or / or ^ or ) or STOP
Token ahead: <+(+)>
Reducing by prod '%s'.
Action result = type:<type 'float'> value:4.0
Current state: 15
Context: 2 * 4^2^2 *+ 78
Tokens expected: + or - or * or / or ^ or ) or STOP
Token ahead: <+(+)>
Reducing by prod '%s'.
Action result = type:<type 'float'> value:256.0
Current state: 13
Context: 2 * 4^2^2 *+ 78
Tokens expected: + or - or * or / or ^ or ) or STOP
Token ahead: <+(+)>
Reducing by prod '%s'.
Action result = type:<type 'float'> value:588.8
Current state: 11
Context: 2 * 4^2^2 *+ 78
Tokens expected: + or - or * or / or ^ or ) or STOP
Token ahead: <+(+)>
Reducing by prod '%s'.
Action result = type:<type 'float'> value:622.8
Current state: 1
Context: 2 * 4^2^2 *+ 78
Tokens expected: + or - or * or / or ^ or STOP
Token ahead: <+(+)>
Shift: 5 "+" at position (1, 21)
No action defined for '+'. Result is matched string.
Action result = type:<type 'unicode'> value:u'+'
Current state: 5
Skipping whitespaces: ' '
New position: (1, 23)
Layout content: ' '
Context: * 4^2^2 + *78
Tokens expected: ( or number
Token ahead: <number(78)>
Shift: 3 "78" at position (1, 23)
Action result = type:<type 'float'> value:78.0
Current state: 3
Skipping whitespaces: ''
New position: (1, 25)
Layout content: ''
Context: 4^2^2 + 78*
Tokens expected: ) or - or + or * or / or ^ or STOP
Token ahead:
Reducing by prod '%s'.
Action result = type:<type 'float'> value:78.0
Current state: 11
Context: 4^2^2 + 78*
Tokens expected: + or - or * or / or ^ or ) or STOP
Token ahead:
Reducing by prod '%s'.
Action result = type:<type 'float'> value:700.8
Current state: 1
Context: 4^2^2 + 78*
Tokens expected: + or - or * or / or ^ or STOP
Token ahead:
SUCCESS!!!
('Result = ', 700.8)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment