SmalltalkParser recovery improved...
...to handle following cases
x := 3
y := 4
x := 3 between: 10 and: 30
y := 4
x := 3 between: 10 and: self limit
y := 4
--- a/SmallSense__ParserTests.st Mon Sep 16 18:13:00 2013 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,878 +0,0 @@
-"{ Package: 'jv:smallsense' }"
-
-"{ NameSpace: SmallSense }"
-
-TestCase subclass:#ParserTests
- instanceVariableNames:''
- classVariableNames:''
- poolDictionaries:''
- category:'SmallSense-Tests'
-!
-
-
-!ParserTests methodsFor:'parseTests'!
-
-test1
- |collector|
- collector := self
- doForSource:'
- |u w b c d tokenValue val uu bb cc dd |
- u := 3.
- b:=u.
- c:=u floor.
- d floor:u.
- d floor:3 b:u.
- self rememberSymbolUsed:tokenValue.
- array:=#( 3 4 5 6 ).
- val := ConstantNode type:tokenType value:tokenValue.
- [u== #Symbol or:[u=3]]ifTrue:[
- uu := 4.
- bb:=uu.
- cc:=uu floor.
- dd floor:uu.
- dd floor:3 b:uu.
- ].
- dd do:[:w|w seduce.
- ].
- ^self.
- '.
-self assert:collector notNil.
-self assert:collector tree notNil.
-
- "Created: / 21-12-2010 / 23:07:13 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 22-02-2011 / 12:35:19 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test10
- |collector|
-
- collector := self
- doForSource:'
- | b|
- u := 3.
- b:=u.
- '.
- self assert:collector notNil.
- self assert:collector tree notNil.
- self assert:(collector tree nextStatement nextStatement) isNil.
- self assert:(collector tree expression) isAssignment.
- self assert:(collector tree expression variable) isVariable.
- self assert:(collector tree expression expression) isConstant.
- self assert:(collector tree nextStatement expression) isAssignment.
- self assert:(collector tree nextStatement expression variable) isVariable.
- self
- assert:(collector tree nextStatement expression expression) isVariable.
-
- "Created: / 15-02-2011 / 15:23:50 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 16:49:19 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test11
- |collector|
- collector := self
- doForSource:'
- | b|
- u := 3
- b:=u.
- '.
- self assert:collector notNil.
- self assert:collector tree notNil.
- self assert:(collector tree nextStatement nextStatement nextStatement) isNil.
- self assert:(collector tree expression) isAssignment.
- self assert:(collector tree expression variable) isVariable.
- self assert:(collector tree expression variable name= 'u').
- self assert:(collector tree expression expression) isUnaryMessage.
- self assert:(collector tree expression expression receiver) isConstant.
- self assert:(collector tree expression expression receiver value=3) .
- self assert:(collector tree expression expression selector asString)='b'.
- self assert:(collector tree expression expression args isNil ).
- self assert:(collector tree nextStatement expression) isErrorNode.
- self assert:(collector tree nextStatement expression errorToken)= ':='.
- self assert:(collector tree nextStatement nextStatement expression) isVariable.
- self assert:(collector tree nextStatement nextStatement expression name)='u'.
-
- "Created: / 15-02-2011 / 15:24:01 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 16:58:56 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test12
- |collector|
- collector := self
- doForSource:'
- | b|
- : 3
- '.
-self assert:collector notNil.
- self assert:collector tree notNil.
- self assert:(collector tree nextStatement nextStatement) isNil.
- self assert:(collector tree expression) isErrorNode.
- self assert:(collector tree expression errorToken =':').
- self assert:(collector tree nextStatement expression) isConstant.
- self assert:(collector tree nextStatement expression value=3).
-
- "Created: / 15-02-2011 / 15:25:36 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 17:08:54 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test13
- |collector|
-
- collector := self
- doForSource:'
- | b|
- u := 3
- :=u.
- '.
- self assert:collector notNil.
- self assert:collector tree notNil.
- self
- assert:(collector tree nextStatement nextStatement nextStatement) isNil.
- self assert:(collector tree expression) isAssignment.
- self assert:(collector tree expression variable) isVariable.
- self assert:(collector tree expression variable name = 'u').
- self assert:(collector tree expression expression) isConstant.
- self assert:(collector tree expression expression value =3).
- self assert:(collector tree nextStatement expression) isErrorNode.
- self assert:(collector tree nextStatement expression errorToken) = ':='.
- self
- assert:(collector tree nextStatement nextStatement expression) isVariable.
- self
- assert:(collector tree nextStatement nextStatement expression name) = 'u'.
-
- "Created: / 15-02-2011 / 16:48:11 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 17-03-2011 / 17:21:48 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test14
- |collector|
- collector := self
- doForSource:'
- | b|
- u := 3
- :u.
- '.
- self assert:collector notNil.
- self assert:collector tree notNil.
- self
- assert:(collector tree nextStatement nextStatement nextStatement) isNil.
- self assert:(collector tree expression) isAssignment.
- self assert:(collector tree expression variable) isVariable.
- self assert:(collector tree expression variable name = 'u').
- self assert:(collector tree expression expression) isConstant.
- self assert:(collector tree expression expression value =3).
- self assert:(collector tree nextStatement expression) isErrorNode.
- self assert:(collector tree nextStatement expression errorToken) = ':'.
- self
- assert:(collector tree nextStatement nextStatement expression) isVariable.
- self
- assert:(collector tree nextStatement nextStatement expression name) = 'u'.
-
- "Created: / 15-02-2011 / 17:03:42 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 19:52:39 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test15
- |collector|
- collector := self
- doForSource:'
- | b|
- u := 3
- =u.
- '.
- self assert:collector notNil.
- self assert:collector tree notNil.
- self
- assert:(collector tree nextStatement ) isNil.
- self assert:(collector tree expression) isAssignment.
- self assert:(collector tree expression variable) isVariable.
- self assert:(collector tree expression variable name = 'u').
- self assert:(collector tree expression expression) isBinaryMessage.
- self assert:(collector tree expression expression receiver value =3).
- self assert:(collector tree expression expression receiver ) isConstant.
- self assert:(collector tree expression expression selector )= #=.
- self assert:(collector tree expression expression args size=1 ).
- self assert:(collector tree expression expression arg ) isVariable.
- self assert:(collector tree expression expression arg name='u' ).
-
- "Created: / 15-02-2011 / 17:04:33 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 19:56:28 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test19
- |collector|
- collector := self
- doForSource:'
- |b c|
- u := 3 u:=
- c u floor.
- '.
-self assert:collector notNil.
-self assert:collector tree notNil.
-self assert:collector tree expression isAssignment.
-self assert:collector tree nextStatement expression isErrorNode.
-self assert:collector tree nextStatement expression errorToken=':='.
-self assert:collector tree nextStatement nextStatement expression isUnaryMessage.
-
- "Created: / 15-02-2011 / 18:15:51 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 20:00:13 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test2
-
- |collector|
- collector := self
- doForSource:'
- u :'.
-self assert:collector notNil.
-self assert:collector tree notNil.
-self assert:(collector tree expression name ='u').
-self assert:(collector tree expression) isVariable.
-self assert:(collector tree nextStatement expression isErrorNode).
-self assert: collector tree nextStatement expression errorToken=':'.
-
- "Created: / 09-02-2011 / 20:54:42 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 15:04:33 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test24
- |collector|
- collector := self
- doForSource:'
- |u w|
- self : '.
-self assert:collector notNil.
-self assert:collector tree notNil.
-self assert:collector tree expression isSelf.
-self assert:collector tree nextStatement expression isErrorNode.
-self assert:collector tree nextStatement expression errorToken=':'.
-
- "Created: / 15-02-2011 / 18:37:23 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 20:02:46 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test25
- |collector|
-" collector := self
- doForSource:'
- |u w|
- self :=5 '.
-self assert:collector notNil.
-self assert:collector tree notNil.
-self assert:collector tree expression isSelf.
-self assert:collector tree nextStatement expression isErrorNode.
-self assert:collector tree nextStatement expression errorToken=':='.
-self assert:collector tree nextStatement nextStatement expression isConstant."
-
- "Created: / 15-02-2011 / 18:37:56 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 28-02-2011 / 17:28:20 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test26
- |collector|
- collector := self
- doForSource:'
- |u w|
- false :=5 '.
-self assert:collector notNil.
-self assert:collector tree notNil.
-self assert:collector tree expression isConstant.
-self assert:collector tree nextStatement expression isErrorNode.
-self assert:collector tree nextStatement expression errorToken=':='.
-self assert:collector tree nextStatement nextStatement expression isConstant.
-
- "Created: / 15-02-2011 / 19:50:17 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 20:05:19 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test27
- |collector|
- collector := self
- doForSource:'
- |u w|
- nil :=5 '.
-self assert:collector notNil.
-self assert:collector tree notNil.
-self assert:collector tree expression isConstant.
-self assert:collector tree nextStatement expression isErrorNode.
-self assert:collector tree nextStatement expression errorToken=':='.
-self assert:collector tree nextStatement nextStatement expression isConstant.
-
- "Created: / 15-02-2011 / 19:51:02 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 20:05:32 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test28
- |collector|
- collector := self
- doForSource:'
- |d w tokenValue|
- d floor:3 b:u
- self rememberSymbolUsed:tokenValue. '.
-self assert:collector notNil.
-self assert:collector tree notNil.
-
- "Created: / 15-02-2011 / 19:52:23 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 20:06:33 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test29
- |collector|
- collector := self
- doForSource:'
- |d u w|
- d floor:3 b:u
- self '.
-self assert:collector notNil.
-self assert:collector tree notNil.
-
- "Created: / 15-02-2011 / 19:53:15 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 20:06:46 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test3
- |collector|
-
- collector := self doForSource:'
- u ='.
- self assert:collector notNil.
- self assert:collector tree notNil.
- self assert:(collector tree expression) isBinaryMessage.
- self assert:(collector tree expression receiver name = 'u').
- self assert:(collector tree expression receiver) isVariable.
- self assert:(collector tree expression selector) == #=.
- self assert:(collector tree expression args size) = 1.
- self assert:(collector tree expression arg) isErrorNode.
- self assert:(collector tree expression arg errorToken = 'EOF').
-
- "Created: / 11-02-2011 / 15:32:58 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 15:20:22 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test30
- |collector|
- collector := self
- doForSource:'
- |array |
- self rememberSymbolUsed:tokenValue
- array:=#( 3 4 5 6 ). '.
-self assert:collector notNil.
-self assert:collector tree notNil.
-
- "Created: / 15-02-2011 / 19:54:10 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test31
- |collector|
- collector := self
- doForSource:'
- |array tokenValue|
- self rememberSymbolUsed:tokenValue
- array:=( 3 4 5 6 ). '.
-self assert:collector notNil.
-self assert:collector tree notNil.
-self assert:collector tree expression isMessage.
-self assert:collector tree nextStatement expression isErrorNode.
-self assert:collector tree nextStatement expression errorToken=':='.
-self assert:collector tree nextStatement nextStatement expression isUnaryMessage.
-
- "Created: / 16-02-2011 / 15:51:47 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 20:15:19 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test32
- |collector|
- collector := self
- doForSource:'
- |uu w|
- [u== #Symbol or:[u=3]]ifTrue:[
- uu := 4.
-
- ].
-
- '.
-self assert:collector notNil.
-self assert:collector tree notNil.
-
- "Created: / 16-02-2011 / 15:54:07 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test33
- |collector|
-
- collector := self
- doForSource:'
- |uu w|
- u== #Symbol or:[u=3]]ifTrue:[
- uu := 4.
-
- ].
-
- '.
- self assert:collector notNil.
- self assert:collector tree notNil.
- self assert:collector tree expression isMessage.
- self assert:collector tree expression receiver isBinaryMessage.
- self assert:collector tree expression receiver receiver isVariable.
- self assert:collector tree expression receiver receiver name = 'u'.
- self assert:collector tree expression receiver selector = #'=='.
- self assert:collector tree expression receiver args size = 1.
- self assert:collector tree expression receiver arg isConstant.
- self assert:collector tree expression receiver arg value = #Symbol.
- self assert:collector tree expression selector = #or:.
- self assert:collector tree expression args size = 1.
- self assert:collector tree expression arg1 isBlock.
- self assert:collector tree expression arg1 statements expression
- isBinaryMessage.
- self assert:collector tree nextStatement expression isErrorNode.
- self assert:collector tree nextStatement expression errorToken = ']'.
- self
- assert:collector tree nextStatement nextStatement expression isMessage.
- self
- assert:collector tree nextStatement nextStatement expression receiver
- isErrorNode.
- self
- assert:collector tree nextStatement nextStatement expression receiver
- errorToken = 'Keyword'.
- self
- assert:collector tree nextStatement nextStatement expression selector
- = #ifTrue:.
- self
- assert:collector tree nextStatement nextStatement expression args size = 1.
- self
- assert:collector tree nextStatement nextStatement expression arg1
- statements expression
- isAssignment.
-
- "Created: / 16-02-2011 / 15:55:49 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 20:52:03 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test34
- |collector|
- collector := self
- doForSource:'
- |array |
- self rememberSymbolUsed:tokenValue
- array:=#( 3 4 5 6 . '.
-self assert:collector notNil.
-self assert:collector tree notNil.
-self assert:collector tree expression isMessage.
-self assert:collector tree nextStatement expression isErrorNode.
-self assert:collector tree nextStatement expression errorToken=':='.
-self assert:collector tree nextStatement nextStatement expression isConstant.
-
- "Created: / 16-02-2011 / 16:09:35 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 20:16:54 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test35
- |collector|
- collector := self
- doForSource:'
- |uu w|
- [u== #Symbol or:u=3]]ifTrue:[
- uu := 4.
-
- ].
-
- '.
- self assert:collector notNil.
- self assert:collector tree notNil.
- self assert:collector tree expression isBlock.
- self assert:collector tree expression statements expression isMessage.
- self assert:collector tree expression statements expression receiver isBinaryMessage.
- self assert:collector tree expression statements expression receiver receiver isVariable.
- self assert:collector tree expression statements expression receiver receiver name = 'u'.
- self assert:collector tree expression statements expression receiver selector = #'=='.
- self assert:collector tree expression statements expression receiver args size = 1.
- self assert:collector tree expression statements expression receiver arg isConstant.
- self assert:collector tree expression statements expression receiver arg value = #Symbol.
- self assert:collector tree expression statements expression selector = #or:.
- self assert:collector tree expression statements expression args size = 1.
- self assert:collector tree expression statements expression arg1 isBinaryMessage.
- self assert:collector tree nextStatement expression isErrorNode.
- self assert:collector tree nextStatement expression errorToken = ']'.
- self
- assert:collector tree nextStatement nextStatement expression isMessage.
- self
- assert:collector tree nextStatement nextStatement expression receiver
- isErrorNode.
- self
- assert:collector tree nextStatement nextStatement expression receiver
- errorToken = 'Keyword'.
- self
- assert:collector tree nextStatement nextStatement expression selector
- = #ifTrue:.
- self
- assert:collector tree nextStatement nextStatement expression args size = 1.
- self
- assert:collector tree nextStatement nextStatement expression arg1
- statements expression
- isAssignment.
-
- "Created: / 16-02-2011 / 16:47:18 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 20:56:11 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test36
- |collector|
- collector := self
- doForSource:'
- |uu w|
- [u== #Symbol ifTrue:[
- uu := 4.
-
- ].
-
- '.
- self assert:collector notNil.
- self assert:collector tree notNil.
- self assert:collector tree expression isBlock.
- self assert:collector tree expression statements expression isMessage.
- self assert:collector tree expression statements expression receiver isBinaryMessage.
- self assert:collector tree expression statements expression receiver receiver isVariable.
- self assert:collector tree expression statements expression receiver receiver name = 'u'.
- self assert:collector tree expression statements expression receiver selector = #'=='.
- self assert:collector tree expression statements expression receiver args size = 1.
- self assert:collector tree expression statements expression receiver arg isConstant.
- self assert:collector tree expression statements expression receiver arg value = #Symbol.
- self assert:collector tree expression statements expression selector = #ifTrue: .
- self assert:collector tree expression statements expression args size = 1.
- self assert:collector tree expression statements expression arg1 isBlock.
- self assert:collector tree expression statements expression arg1 statements expression
- isAssignment.
-
- "Created: / 16-02-2011 / 16:48:07 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 21:13:22 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test37
- |collector|
-
- collector := self
- doForSource:'
- |uu w|
- [u== #Symbol) ifTrue:[
- uu := 4.
-
- ].
-
- '.
- self assert:collector notNil.
- self assert:collector tree notNil.
- self assert:collector tree expression isBlock.
- self
- assert:collector tree expression statements expression isBinaryMessage.
- self
- assert:collector tree expression statements expression receiver name = 'u'.
- self
- assert:collector tree expression statements expression selector = #'=='.
- self assert:collector tree expression statements expression args size = 1.
- self
- assert:collector tree expression statements expression arg1 value = #Symbol.
- self
- assert:collector tree expression statements nextStatement expression
- isErrorNode.
- self
- assert:collector tree expression statements nextStatement expression
- errorToken = ')'.
- self
- assert:collector tree expression statements nextStatement nextStatement
- expression isMessage.
- self
- assert:collector tree expression statements nextStatement nextStatement expression
- receiver isErrorNode.
- self
- assert:collector tree expression statements nextStatement nextStatement expression
- receiver errorToken
- = 'Keyword'.
- self
- assert:collector tree expression statements nextStatement nextStatement expression
- selector = #ifTrue:.
- self
- assert:collector tree expression statements nextStatement nextStatement expression args
- size = 1.
- self
- assert:collector tree expression statements nextStatement nextStatement expression arg1
- isBlock.
- self
- assert:collector tree expression statements nextStatement nextStatement expression arg1
- statements expression
- isAssignment.
-
- "Created: / 16-02-2011 / 17:21:06 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 21:25:27 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test38
- |collector|
- collector := self
- doForSource:'
- |uu w|
- [:=
-
- ].
-
- '.
-self assert:collector notNil.
-self assert:collector tree notNil.
-self assert:collector tree expression isBlock.
-self assert:collector tree expression statements expression isErrorNode.
-self assert:collector tree expression statements expression errorToken=':='.
-
- "Created: / 18-02-2011 / 11:55:35 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 21:40:40 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test39
- |collector|
- collector := self
- doForSource:'
- |uu w|
- :=3
-
- '.
-self assert:collector notNil.
-self assert:collector tree notNil.
-self assert:collector tree expression isErrorNode.
-self assert:collector tree expression errorToken=':='.
-self assert:collector tree nextStatement expression isConstant.
-self assert:collector tree nextStatement expression value=3.
-
- "Created: / 18-02-2011 / 17:11:24 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test4
- |collector|
-
- collector := self doForSource:'
- u 3'.
- self assert:collector notNil.
- self assert:collector tree notNil.
- self assert:(collector tree expression) isUnaryMessage.
- self assert:(collector tree expression receiver name = 'u').
- self assert:(collector tree expression receiver) isVariable.
- self assert:(collector tree expression selector asString) = '3'.
-
- "Created: / 15-02-2011 / 14:13:48 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-03-2011 / 22:10:14 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test40
- |collector|
- collector := self
- doForSource:'
- |array tokenValue|
- self rememberSymbolUsed:tokenValue
- array:=( 3 4 5 6. '.
-self assert:collector notNil.
-self assert:collector tree notNil.
-self assert:collector tree expression isMessage.
-self assert:collector tree nextStatement expression isErrorNode.
-self assert:collector tree nextStatement expression errorToken=':='.
-self assert:collector tree nextStatement nextStatement expression isUnaryMessage.
-
- "Created: / 18-02-2011 / 20:17:31 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test41
- |collector|
- collector := self
- doForSource:'
- |array tokenValue|
- self rememberSymbolUsed:tokenValue
- array:=( 3 4 5 6 :=u '.
-self assert:collector notNil.
-self assert:collector tree notNil.
-self assert:collector tree expression isMessage.
-self assert:collector tree nextStatement expression isErrorNode.
-self assert:collector tree nextStatement expression errorToken=':='.
-self assert:collector tree nextStatement nextStatement expression isUnaryMessage.
-self assert:collector tree nextStatement nextStatement nextStatement expression isErrorNode.
-self assert:collector tree nextStatement nextStatement nextStatement expression errorToken=':='.
-self assert:collector tree nextStatement nextStatement nextStatement nextStatement expression isVariable.
-
- "Created: / 18-02-2011 / 20:35:35 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test42
- |collector|
- collector := self
- doForSource:'
- |array tokenValue|
- self rememberSymbolUsed:tokenValue
- array:= 3 4 5 6 :=u) '.
-self assert:collector notNil.
-self assert:collector tree notNil.
-self assert:collector tree expression isMessage.
-self assert:collector tree nextStatement expression isErrorNode.
-self assert:collector tree nextStatement expression errorToken=':='.
-self assert:collector tree nextStatement nextStatement expression isUnaryMessage.
-self assert:collector tree nextStatement nextStatement nextStatement expression isErrorNode.
-self assert:collector tree nextStatement nextStatement nextStatement expression errorToken=':='.
-self assert:collector tree nextStatement nextStatement nextStatement nextStatement expression isVariable.
-self assert:collector tree nextStatement nextStatement nextStatement nextStatement nextStatement expression isErrorNode.
-self assert:collector tree nextStatement nextStatement nextStatement nextStatement nextStatement expression errorToken=')'.
-
- "Created: / 18-02-2011 / 20:37:17 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test43
- |collector|
- collector := self
- doForSource:'
- |uu w b|
- [u== #Symbol ifTrue:[
- uu := 4.
-
- ].
- b:=3
- '.
- self assert:collector notNil.
- self assert:collector tree notNil.
- self assert:collector tree expression isBlock.
- self assert:collector tree expression statements expression isMessage.
- self assert:collector tree expression statements expression receiver isBinaryMessage.
- self assert:collector tree expression statements expression receiver receiver isVariable.
- self assert:collector tree expression statements expression receiver receiver name = 'u'.
- self assert:collector tree expression statements expression receiver selector = #'=='.
- self assert:collector tree expression statements expression receiver args size = 1.
- self assert:collector tree expression statements expression receiver arg isConstant.
- self assert:collector tree expression statements expression receiver arg value = #Symbol.
- self assert:collector tree expression statements expression selector = #ifTrue: .
- self assert:collector tree expression statements expression args size = 1.
- self assert:collector tree expression statements expression arg1 isBlock.
- self assert:collector tree expression statements expression arg1 statements expression
- isAssignment.
-
- "Created: / 18-02-2011 / 21:16:10 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test44
- |collector|
- collector := self
- doForSource:'
- |b c|
- u :=b b: u:c
- '.
-self assert:collector notNil.
-self assert:collector tree notNil.
-self assert:collector tree expression isAssignment.
-
- "Created: / 20-02-2011 / 18:54:11 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test5
- |collector|
-
- collector := self doForSource:'
- u +'.
- self assert:collector notNil.
- self assert:collector tree notNil.
- self assert:(collector tree expression) isBinaryMessage.
- self assert:(collector tree expression receiver name = 'u').
- self assert:(collector tree expression receiver) isVariable.
- self assert:(collector tree expression selector) isSymbol.
- self assert:(collector tree expression selector asString) = '+'.
- self assert:(collector tree expression args size) = 1.
- self assert:(collector tree expression arg) isErrorNode.
- self assert:(collector tree expression arg errorToken = 'EOF').
-
- "Created: / 15-02-2011 / 15:18:25 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 15:31:37 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test6
- |collector|
-
- collector := self doForSource:'
- u +.'.
- self assert:collector notNil.
- self assert:collector tree notNil.
- self assert:(collector tree expression) isBinaryMessage.
- self assert:(collector tree expression receiver name = 'u').
- self assert:(collector tree expression receiver) isVariable.
- self assert:(collector tree expression selector) isSymbol.
- self assert:(collector tree expression selector asString) = '+'.
- self assert:(collector tree expression args size) = 1.
- self assert:(collector tree expression arg) isErrorNode.
- self assert:(collector tree expression arg errorToken = '.').
-
- "Created: / 15-02-2011 / 15:19:08 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 15:32:56 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test7
- |collector|
-
- collector := self doForSource:'
- u 3.'.
- self assert:collector notNil.
- self assert:collector tree notNil.
- self assert:(collector tree expression) isUnaryMessage.
- self assert:(collector tree expression receiver name = 'u').
- self assert:(collector tree expression receiver) isVariable.
- self assert:(collector tree expression selector asString) = '3'.
-
- "Created: / 15-02-2011 / 15:19:22 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-03-2011 / 22:10:21 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test8
- |collector|
-
- collector := self doForSource:'
- u =.'.
- self assert:collector notNil.
- self assert:collector tree notNil.
- self assert:(collector tree expression) isBinaryMessage.
- self assert:(collector tree expression receiver name = 'u').
- self assert:(collector tree expression receiver) isVariable.
- self assert:(collector tree expression selector) == #'='.
- self assert:(collector tree expression args size) = 1.
- self assert:(collector tree expression arg) isErrorNode.
- self assert:(collector tree expression arg errorToken = '.').
-
- "Created: / 15-02-2011 / 15:19:38 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 15:34:13 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-test9
- |collector|
-
- collector := self doForSource:'
- u :.'.
- self assert:collector notNil.
- self assert:collector tree notNil.
- self assert:(collector tree expression name = 'u').
- self assert:(collector tree expression) isVariable.
- self assert:(collector tree nextStatement expression isErrorNode).
- self assert:collector tree nextStatement expression errorToken = ':'.
- self assert:collector tree nextStatement nextStatement isNil.
-
- "Created: / 15-02-2011 / 15:19:52 / Jakub <zelenja7@fel.cvut.cz>"
- "Modified: / 18-02-2011 / 15:35:42 / Jakub <zelenja7@fel.cvut.cz>"
-!
-
-testBadAssignment
- |collector|
-
- collector := self doForSource:'
- u := '.
- self assert:collector notNil.
- self assert:collector tree notNil.
- self assert:(collector tree expression) isAssignment.
- self assert:(collector tree expression variable name = 'u').
- self assert:(collector tree expression variable) isVariable.
- self assert:(collector tree expression expression) isErrorNode.
- self assert:(collector tree expression expression errorToken = 'EOF').
-
- "Modified: / 18-02-2011 / 15:39:33 / Jakub <zelenja7@fel.cvut.cz>"
-! !
-
-!ParserTests class methodsFor:'documentation'!
-
-version_SVN
- ^ '$Id: SmallSenseParserTests.st 7694 2011-04-04 19:53:25Z vranyj1 $'
-! !
-
--- a/SmallSense__SmalltalkParser.st Mon Sep 16 18:13:00 2013 +0100
+++ b/SmallSense__SmalltalkParser.st Mon Sep 16 23:20:08 2013 +0100
@@ -145,6 +145,67 @@
!SmalltalkParser methodsFor:'parsing-expressions'!
+keywordExpression
+ "parse a keyword-expression; return a node-tree, nil or #Error.
+
+ keywordExpression ::= binaryexpression
+ | { KEYWORD-PART binaryExpression }
+ "
+
+ |receiver expr|
+
+ receiver := self binaryExpression.
+ (receiver == #Error) ifTrue:[^ #Error].
+ (tokenType == #EOF) ifTrue:[^ receiver].
+ tokenType == $] ifTrue:[^ receiver].
+ tokenType == $) ifTrue:[^ receiver].
+ expr := self keywordExpressionFor:receiver.
+
+ "/ expr could be an assignment as well, here
+ (ignoreWarnings or:[ignoreErrors]) ifFalse:[
+ "/ for a better error message, in case of a missing period in the previous message,
+ "/ <expr> <missing period> foo := ...
+ "/ would be parsed as unary message foo; detect this here, instead of high up in the calling hierarchy,
+ "/ where it is difficult to provide a reasonable error message
+ tokenType == #':=' ifTrue:[
+ | positionOfPeriod exprLast |
+
+ "/ Find the very last unary send node, Consider:
+ "/ x := 2
+ "/ y := false
+ "/
+ "/ x := 2 between: 0 and: 10
+ "/ y := false
+ "/
+ "/ x := 2 between: 0 and: self max
+ "/ y := false
+
+ exprLast := expr.
+ [ exprLast isMessage and: [ exprLast isUnaryMessage not ] ] whileTrue:[
+ exprLast := exprLast args last.
+ ].
+ (exprLast isMessage and: [ exprLast isUnaryMessage ] ) ifTrue:[
+ positionOfPeriod := exprLast receiver positionToInsertPeriodForStatementSeparation
+ ].
+ positionOfPeriod notNil ifTrue:[
+ "/Try to recover
+ expr := ParseErrorNode new
+ startPosition:expr startPosition endPosition: positionOfPeriod - 1;
+ errorString: ('":=" unexpected. Probably missing "." in previous expression.');
+ children: (Array with: expr);
+ yourself.
+ source position: positionOfPeriod.
+ tokenType := $.
+ ]
+ ].
+ ].
+
+ ^ expr
+
+ "Created: / 16-09-2013 / 17:23:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 16-09-2013 / 23:18:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
primary
| nodeOrError |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/SmallSense__SmalltalkParserTests.st Mon Sep 16 23:20:08 2013 +0100
@@ -0,0 +1,959 @@
+"{ Package: 'jv:smallsense' }"
+
+"{ NameSpace: SmallSense }"
+
+TestCase subclass:#SmalltalkParserTests
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'SmallSense-Tests'
+!
+
+
+!SmalltalkParserTests methodsFor:'parseTests'!
+
+test1
+ |collector|
+ collector := self
+ doForSource:'
+ |u w b c d tokenValue val uu bb cc dd |
+ u := 3.
+ b:=u.
+ c:=u floor.
+ d floor:u.
+ d floor:3 b:u.
+ self rememberSymbolUsed:tokenValue.
+ array:=#( 3 4 5 6 ).
+ val := ConstantNode type:tokenType value:tokenValue.
+ [u== #Symbol or:[u=3]]ifTrue:[
+ uu := 4.
+ bb:=uu.
+ cc:=uu floor.
+ dd floor:uu.
+ dd floor:3 b:uu.
+ ].
+ dd do:[:w|w seduce.
+ ].
+ ^self.
+ '.
+self assert:collector notNil.
+self assert:collector tree notNil.
+
+ "Created: / 21-12-2010 / 23:07:13 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 22-02-2011 / 12:35:19 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test10
+ |collector|
+
+ collector := self
+ doForSource:'
+ | b|
+ u := 3.
+ b:=u.
+ '.
+ self assert:collector notNil.
+ self assert:collector tree notNil.
+ self assert:(collector tree nextStatement nextStatement) isNil.
+ self assert:(collector tree expression) isAssignment.
+ self assert:(collector tree expression variable) isVariable.
+ self assert:(collector tree expression expression) isConstant.
+ self assert:(collector tree nextStatement expression) isAssignment.
+ self assert:(collector tree nextStatement expression variable) isVariable.
+ self
+ assert:(collector tree nextStatement expression expression) isVariable.
+
+ "Created: / 15-02-2011 / 15:23:50 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 16:49:19 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test11
+ |collector|
+ collector := self
+ doForSource:'
+ | b|
+ u := 3
+ b:=u.
+ '.
+ self assert:collector notNil.
+ self assert:collector tree notNil.
+ self assert:(collector tree nextStatement nextStatement nextStatement) isNil.
+ self assert:(collector tree expression) isAssignment.
+ self assert:(collector tree expression variable) isVariable.
+ self assert:(collector tree expression variable name= 'u').
+ self assert:(collector tree expression expression) isUnaryMessage.
+ self assert:(collector tree expression expression receiver) isConstant.
+ self assert:(collector tree expression expression receiver value=3) .
+ self assert:(collector tree expression expression selector asString)='b'.
+ self assert:(collector tree expression expression args isNil ).
+ self assert:(collector tree nextStatement expression) isErrorNode.
+ self assert:(collector tree nextStatement expression errorToken)= ':='.
+ self assert:(collector tree nextStatement nextStatement expression) isVariable.
+ self assert:(collector tree nextStatement nextStatement expression name)='u'.
+
+ "Created: / 15-02-2011 / 15:24:01 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 16:58:56 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test11a
+ |collector|
+ collector := self
+ doForSource:'
+ | b|
+ u := 3
+ b:=u.
+ '.
+ self assert:collector notNil.
+ self assert:collector tree notNil.
+ self assert:(collector tree nextStatement nextStatement) isNil.
+ self assert:(collector tree expression) isAssignment.
+ self assert:(collector tree expression variable) isVariable.
+ self assert:(collector tree expression variable name= 'u').
+
+ self assert:(collector tree expression expression) isErrorNode.
+ self assert:(collector tree expression expression children first receiver) isConstant.
+ self assert:(collector tree expression expression children first receiver) value =3 .
+
+ self assert:(collector tree nextStatement expression) isAssignment.
+ self assert:(collector tree nextStatement expression) variable name = 'b'.
+ self assert:(collector tree nextStatement expression) expression isVariable.
+ self assert:(collector tree nextStatement expression) expression name = 'u'.
+
+ "Created: / 16-09-2013 / 23:16:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test11b
+ |collector|
+ collector := self
+ doForSource:'
+ | b|
+ u := 3 between: 1 and: 10
+ b:=u.
+ '.
+ self assert:collector notNil.
+ self assert:collector tree notNil.
+ self assert:(collector tree nextStatement nextStatement) isNil.
+ self assert:(collector tree expression) isAssignment.
+ self assert:(collector tree expression variable) isVariable.
+ self assert:(collector tree expression variable name= 'u').
+
+ self assert:(collector tree expression expression) isErrorNode.
+ self assert:(collector tree expression expression children first receiver) isConstant.
+ self assert:(collector tree expression expression children first receiver) value =3 .
+
+ self assert:(collector tree nextStatement expression) isAssignment.
+ self assert:(collector tree nextStatement expression) variable name = 'b'.
+ self assert:(collector tree nextStatement expression) expression isVariable.
+ self assert:(collector tree nextStatement expression) expression name = 'u'.
+
+ "Created: / 16-09-2013 / 23:16:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test11c
+ |collector|
+ collector := self
+ doForSource:'
+ | b|
+ u := 3 between: 1 and: 10 + 10
+ b:=u.
+ '.
+ self assert:collector notNil.
+ self assert:collector tree notNil.
+ self assert:(collector tree nextStatement nextStatement) isNil.
+ self assert:(collector tree expression) isAssignment.
+ self assert:(collector tree expression variable) isVariable.
+ self assert:(collector tree expression variable name= 'u').
+
+ self assert:(collector tree expression expression) isErrorNode.
+ self assert:(collector tree expression expression children first receiver) isConstant.
+ self assert:(collector tree expression expression children first receiver) value =3 .
+
+ self assert:(collector tree nextStatement expression) isAssignment.
+ self assert:(collector tree nextStatement expression) variable name = 'b'.
+ self assert:(collector tree nextStatement expression) expression isVariable.
+ self assert:(collector tree nextStatement expression) expression name = 'u'.
+
+ "Created: / 16-09-2013 / 23:16:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test12
+ |collector|
+ collector := self
+ doForSource:'
+ | b|
+ : 3
+ '.
+self assert:collector notNil.
+ self assert:collector tree notNil.
+ self assert:(collector tree nextStatement nextStatement) isNil.
+ self assert:(collector tree expression) isErrorNode.
+ self assert:(collector tree expression errorToken =':').
+ self assert:(collector tree nextStatement expression) isConstant.
+ self assert:(collector tree nextStatement expression value=3).
+
+ "Created: / 15-02-2011 / 15:25:36 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 17:08:54 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test13
+ |collector|
+
+ collector := self
+ doForSource:'
+ | b|
+ u := 3
+ :=u.
+ '.
+ self assert:collector notNil.
+ self assert:collector tree notNil.
+ self
+ assert:(collector tree nextStatement nextStatement nextStatement) isNil.
+ self assert:(collector tree expression) isAssignment.
+ self assert:(collector tree expression variable) isVariable.
+ self assert:(collector tree expression variable name = 'u').
+ self assert:(collector tree expression expression) isConstant.
+ self assert:(collector tree expression expression value =3).
+ self assert:(collector tree nextStatement expression) isErrorNode.
+ self assert:(collector tree nextStatement expression errorToken) = ':='.
+ self
+ assert:(collector tree nextStatement nextStatement expression) isVariable.
+ self
+ assert:(collector tree nextStatement nextStatement expression name) = 'u'.
+
+ "Created: / 15-02-2011 / 16:48:11 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 17-03-2011 / 17:21:48 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test14
+ |collector|
+ collector := self
+ doForSource:'
+ | b|
+ u := 3
+ :u.
+ '.
+ self assert:collector notNil.
+ self assert:collector tree notNil.
+ self
+ assert:(collector tree nextStatement nextStatement nextStatement) isNil.
+ self assert:(collector tree expression) isAssignment.
+ self assert:(collector tree expression variable) isVariable.
+ self assert:(collector tree expression variable name = 'u').
+ self assert:(collector tree expression expression) isConstant.
+ self assert:(collector tree expression expression value =3).
+ self assert:(collector tree nextStatement expression) isErrorNode.
+ self assert:(collector tree nextStatement expression errorToken) = ':'.
+ self
+ assert:(collector tree nextStatement nextStatement expression) isVariable.
+ self
+ assert:(collector tree nextStatement nextStatement expression name) = 'u'.
+
+ "Created: / 15-02-2011 / 17:03:42 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 19:52:39 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test15
+ |collector|
+ collector := self
+ doForSource:'
+ | b|
+ u := 3
+ =u.
+ '.
+ self assert:collector notNil.
+ self assert:collector tree notNil.
+ self
+ assert:(collector tree nextStatement ) isNil.
+ self assert:(collector tree expression) isAssignment.
+ self assert:(collector tree expression variable) isVariable.
+ self assert:(collector tree expression variable name = 'u').
+ self assert:(collector tree expression expression) isBinaryMessage.
+ self assert:(collector tree expression expression receiver value =3).
+ self assert:(collector tree expression expression receiver ) isConstant.
+ self assert:(collector tree expression expression selector )= #=.
+ self assert:(collector tree expression expression args size=1 ).
+ self assert:(collector tree expression expression arg ) isVariable.
+ self assert:(collector tree expression expression arg name='u' ).
+
+ "Created: / 15-02-2011 / 17:04:33 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 19:56:28 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test19
+ |collector|
+ collector := self
+ doForSource:'
+ |b c|
+ u := 3 u:=
+ c u floor.
+ '.
+self assert:collector notNil.
+self assert:collector tree notNil.
+self assert:collector tree expression isAssignment.
+self assert:collector tree nextStatement expression isErrorNode.
+self assert:collector tree nextStatement expression errorToken=':='.
+self assert:collector tree nextStatement nextStatement expression isUnaryMessage.
+
+ "Created: / 15-02-2011 / 18:15:51 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 20:00:13 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test2
+
+ |collector|
+ collector := self
+ doForSource:'
+ u :'.
+self assert:collector notNil.
+self assert:collector tree notNil.
+self assert:(collector tree expression name ='u').
+self assert:(collector tree expression) isVariable.
+self assert:(collector tree nextStatement expression isErrorNode).
+self assert: collector tree nextStatement expression errorToken=':'.
+
+ "Created: / 09-02-2011 / 20:54:42 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 15:04:33 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test24
+ |collector|
+ collector := self
+ doForSource:'
+ |u w|
+ self : '.
+self assert:collector notNil.
+self assert:collector tree notNil.
+self assert:collector tree expression isSelf.
+self assert:collector tree nextStatement expression isErrorNode.
+self assert:collector tree nextStatement expression errorToken=':'.
+
+ "Created: / 15-02-2011 / 18:37:23 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 20:02:46 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test25
+ |collector|
+" collector := self
+ doForSource:'
+ |u w|
+ self :=5 '.
+self assert:collector notNil.
+self assert:collector tree notNil.
+self assert:collector tree expression isSelf.
+self assert:collector tree nextStatement expression isErrorNode.
+self assert:collector tree nextStatement expression errorToken=':='.
+self assert:collector tree nextStatement nextStatement expression isConstant."
+
+ "Created: / 15-02-2011 / 18:37:56 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 28-02-2011 / 17:28:20 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test26
+ |collector|
+ collector := self
+ doForSource:'
+ |u w|
+ false :=5 '.
+self assert:collector notNil.
+self assert:collector tree notNil.
+self assert:collector tree expression isConstant.
+self assert:collector tree nextStatement expression isErrorNode.
+self assert:collector tree nextStatement expression errorToken=':='.
+self assert:collector tree nextStatement nextStatement expression isConstant.
+
+ "Created: / 15-02-2011 / 19:50:17 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 20:05:19 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test27
+ |collector|
+ collector := self
+ doForSource:'
+ |u w|
+ nil :=5 '.
+self assert:collector notNil.
+self assert:collector tree notNil.
+self assert:collector tree expression isConstant.
+self assert:collector tree nextStatement expression isErrorNode.
+self assert:collector tree nextStatement expression errorToken=':='.
+self assert:collector tree nextStatement nextStatement expression isConstant.
+
+ "Created: / 15-02-2011 / 19:51:02 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 20:05:32 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test28
+ |collector|
+ collector := self
+ doForSource:'
+ |d w tokenValue|
+ d floor:3 b:u
+ self rememberSymbolUsed:tokenValue. '.
+self assert:collector notNil.
+self assert:collector tree notNil.
+
+ "Created: / 15-02-2011 / 19:52:23 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 20:06:33 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test29
+ |collector|
+ collector := self
+ doForSource:'
+ |d u w|
+ d floor:3 b:u
+ self '.
+self assert:collector notNil.
+self assert:collector tree notNil.
+
+ "Created: / 15-02-2011 / 19:53:15 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 20:06:46 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test3
+ |collector|
+
+ collector := self doForSource:'
+ u ='.
+ self assert:collector notNil.
+ self assert:collector tree notNil.
+ self assert:(collector tree expression) isBinaryMessage.
+ self assert:(collector tree expression receiver name = 'u').
+ self assert:(collector tree expression receiver) isVariable.
+ self assert:(collector tree expression selector) == #=.
+ self assert:(collector tree expression args size) = 1.
+ self assert:(collector tree expression arg) isErrorNode.
+ self assert:(collector tree expression arg errorToken = 'EOF').
+
+ "Created: / 11-02-2011 / 15:32:58 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 15:20:22 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test30
+ |collector|
+ collector := self
+ doForSource:'
+ |array |
+ self rememberSymbolUsed:tokenValue
+ array:=#( 3 4 5 6 ). '.
+self assert:collector notNil.
+self assert:collector tree notNil.
+
+ "Created: / 15-02-2011 / 19:54:10 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test31
+ |collector|
+ collector := self
+ doForSource:'
+ |array tokenValue|
+ self rememberSymbolUsed:tokenValue
+ array:=( 3 4 5 6 ). '.
+self assert:collector notNil.
+self assert:collector tree notNil.
+self assert:collector tree expression isMessage.
+self assert:collector tree nextStatement expression isErrorNode.
+self assert:collector tree nextStatement expression errorToken=':='.
+self assert:collector tree nextStatement nextStatement expression isUnaryMessage.
+
+ "Created: / 16-02-2011 / 15:51:47 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 20:15:19 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test32
+ |collector|
+ collector := self
+ doForSource:'
+ |uu w|
+ [u== #Symbol or:[u=3]]ifTrue:[
+ uu := 4.
+
+ ].
+
+ '.
+self assert:collector notNil.
+self assert:collector tree notNil.
+
+ "Created: / 16-02-2011 / 15:54:07 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test33
+ |collector|
+
+ collector := self
+ doForSource:'
+ |uu w|
+ u== #Symbol or:[u=3]]ifTrue:[
+ uu := 4.
+
+ ].
+
+ '.
+ self assert:collector notNil.
+ self assert:collector tree notNil.
+ self assert:collector tree expression isMessage.
+ self assert:collector tree expression receiver isBinaryMessage.
+ self assert:collector tree expression receiver receiver isVariable.
+ self assert:collector tree expression receiver receiver name = 'u'.
+ self assert:collector tree expression receiver selector = #'=='.
+ self assert:collector tree expression receiver args size = 1.
+ self assert:collector tree expression receiver arg isConstant.
+ self assert:collector tree expression receiver arg value = #Symbol.
+ self assert:collector tree expression selector = #or:.
+ self assert:collector tree expression args size = 1.
+ self assert:collector tree expression arg1 isBlock.
+ self assert:collector tree expression arg1 statements expression
+ isBinaryMessage.
+ self assert:collector tree nextStatement expression isErrorNode.
+ self assert:collector tree nextStatement expression errorToken = ']'.
+ self
+ assert:collector tree nextStatement nextStatement expression isMessage.
+ self
+ assert:collector tree nextStatement nextStatement expression receiver
+ isErrorNode.
+ self
+ assert:collector tree nextStatement nextStatement expression receiver
+ errorToken = 'Keyword'.
+ self
+ assert:collector tree nextStatement nextStatement expression selector
+ = #ifTrue:.
+ self
+ assert:collector tree nextStatement nextStatement expression args size = 1.
+ self
+ assert:collector tree nextStatement nextStatement expression arg1
+ statements expression
+ isAssignment.
+
+ "Created: / 16-02-2011 / 15:55:49 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 20:52:03 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test34
+ |collector|
+ collector := self
+ doForSource:'
+ |array |
+ self rememberSymbolUsed:tokenValue
+ array:=#( 3 4 5 6 . '.
+self assert:collector notNil.
+self assert:collector tree notNil.
+self assert:collector tree expression isMessage.
+self assert:collector tree nextStatement expression isErrorNode.
+self assert:collector tree nextStatement expression errorToken=':='.
+self assert:collector tree nextStatement nextStatement expression isConstant.
+
+ "Created: / 16-02-2011 / 16:09:35 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 20:16:54 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test35
+ |collector|
+ collector := self
+ doForSource:'
+ |uu w|
+ [u== #Symbol or:u=3]]ifTrue:[
+ uu := 4.
+
+ ].
+
+ '.
+ self assert:collector notNil.
+ self assert:collector tree notNil.
+ self assert:collector tree expression isBlock.
+ self assert:collector tree expression statements expression isMessage.
+ self assert:collector tree expression statements expression receiver isBinaryMessage.
+ self assert:collector tree expression statements expression receiver receiver isVariable.
+ self assert:collector tree expression statements expression receiver receiver name = 'u'.
+ self assert:collector tree expression statements expression receiver selector = #'=='.
+ self assert:collector tree expression statements expression receiver args size = 1.
+ self assert:collector tree expression statements expression receiver arg isConstant.
+ self assert:collector tree expression statements expression receiver arg value = #Symbol.
+ self assert:collector tree expression statements expression selector = #or:.
+ self assert:collector tree expression statements expression args size = 1.
+ self assert:collector tree expression statements expression arg1 isBinaryMessage.
+ self assert:collector tree nextStatement expression isErrorNode.
+ self assert:collector tree nextStatement expression errorToken = ']'.
+ self
+ assert:collector tree nextStatement nextStatement expression isMessage.
+ self
+ assert:collector tree nextStatement nextStatement expression receiver
+ isErrorNode.
+ self
+ assert:collector tree nextStatement nextStatement expression receiver
+ errorToken = 'Keyword'.
+ self
+ assert:collector tree nextStatement nextStatement expression selector
+ = #ifTrue:.
+ self
+ assert:collector tree nextStatement nextStatement expression args size = 1.
+ self
+ assert:collector tree nextStatement nextStatement expression arg1
+ statements expression
+ isAssignment.
+
+ "Created: / 16-02-2011 / 16:47:18 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 20:56:11 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test36
+ |collector|
+ collector := self
+ doForSource:'
+ |uu w|
+ [u== #Symbol ifTrue:[
+ uu := 4.
+
+ ].
+
+ '.
+ self assert:collector notNil.
+ self assert:collector tree notNil.
+ self assert:collector tree expression isBlock.
+ self assert:collector tree expression statements expression isMessage.
+ self assert:collector tree expression statements expression receiver isBinaryMessage.
+ self assert:collector tree expression statements expression receiver receiver isVariable.
+ self assert:collector tree expression statements expression receiver receiver name = 'u'.
+ self assert:collector tree expression statements expression receiver selector = #'=='.
+ self assert:collector tree expression statements expression receiver args size = 1.
+ self assert:collector tree expression statements expression receiver arg isConstant.
+ self assert:collector tree expression statements expression receiver arg value = #Symbol.
+ self assert:collector tree expression statements expression selector = #ifTrue: .
+ self assert:collector tree expression statements expression args size = 1.
+ self assert:collector tree expression statements expression arg1 isBlock.
+ self assert:collector tree expression statements expression arg1 statements expression
+ isAssignment.
+
+ "Created: / 16-02-2011 / 16:48:07 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 21:13:22 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test37
+ |collector|
+
+ collector := self
+ doForSource:'
+ |uu w|
+ [u== #Symbol) ifTrue:[
+ uu := 4.
+
+ ].
+
+ '.
+ self assert:collector notNil.
+ self assert:collector tree notNil.
+ self assert:collector tree expression isBlock.
+ self
+ assert:collector tree expression statements expression isBinaryMessage.
+ self
+ assert:collector tree expression statements expression receiver name = 'u'.
+ self
+ assert:collector tree expression statements expression selector = #'=='.
+ self assert:collector tree expression statements expression args size = 1.
+ self
+ assert:collector tree expression statements expression arg1 value = #Symbol.
+ self
+ assert:collector tree expression statements nextStatement expression
+ isErrorNode.
+ self
+ assert:collector tree expression statements nextStatement expression
+ errorToken = ')'.
+ self
+ assert:collector tree expression statements nextStatement nextStatement
+ expression isMessage.
+ self
+ assert:collector tree expression statements nextStatement nextStatement expression
+ receiver isErrorNode.
+ self
+ assert:collector tree expression statements nextStatement nextStatement expression
+ receiver errorToken
+ = 'Keyword'.
+ self
+ assert:collector tree expression statements nextStatement nextStatement expression
+ selector = #ifTrue:.
+ self
+ assert:collector tree expression statements nextStatement nextStatement expression args
+ size = 1.
+ self
+ assert:collector tree expression statements nextStatement nextStatement expression arg1
+ isBlock.
+ self
+ assert:collector tree expression statements nextStatement nextStatement expression arg1
+ statements expression
+ isAssignment.
+
+ "Created: / 16-02-2011 / 17:21:06 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 21:25:27 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test38
+ |collector|
+ collector := self
+ doForSource:'
+ |uu w|
+ [:=
+
+ ].
+
+ '.
+self assert:collector notNil.
+self assert:collector tree notNil.
+self assert:collector tree expression isBlock.
+self assert:collector tree expression statements expression isErrorNode.
+self assert:collector tree expression statements expression errorToken=':='.
+
+ "Created: / 18-02-2011 / 11:55:35 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 21:40:40 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test39
+ |collector|
+ collector := self
+ doForSource:'
+ |uu w|
+ :=3
+
+ '.
+self assert:collector notNil.
+self assert:collector tree notNil.
+self assert:collector tree expression isErrorNode.
+self assert:collector tree expression errorToken=':='.
+self assert:collector tree nextStatement expression isConstant.
+self assert:collector tree nextStatement expression value=3.
+
+ "Created: / 18-02-2011 / 17:11:24 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test4
+ |collector|
+
+ collector := self doForSource:'
+ u 3'.
+ self assert:collector notNil.
+ self assert:collector tree notNil.
+ self assert:(collector tree expression) isUnaryMessage.
+ self assert:(collector tree expression receiver name = 'u').
+ self assert:(collector tree expression receiver) isVariable.
+ self assert:(collector tree expression selector asString) = '3'.
+
+ "Created: / 15-02-2011 / 14:13:48 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-03-2011 / 22:10:14 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test40
+ |collector|
+ collector := self
+ doForSource:'
+ |array tokenValue|
+ self rememberSymbolUsed:tokenValue
+ array:=( 3 4 5 6. '.
+self assert:collector notNil.
+self assert:collector tree notNil.
+self assert:collector tree expression isMessage.
+self assert:collector tree nextStatement expression isErrorNode.
+self assert:collector tree nextStatement expression errorToken=':='.
+self assert:collector tree nextStatement nextStatement expression isUnaryMessage.
+
+ "Created: / 18-02-2011 / 20:17:31 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test41
+ |collector|
+ collector := self
+ doForSource:'
+ |array tokenValue|
+ self rememberSymbolUsed:tokenValue
+ array:=( 3 4 5 6 :=u '.
+self assert:collector notNil.
+self assert:collector tree notNil.
+self assert:collector tree expression isMessage.
+self assert:collector tree nextStatement expression isErrorNode.
+self assert:collector tree nextStatement expression errorToken=':='.
+self assert:collector tree nextStatement nextStatement expression isUnaryMessage.
+self assert:collector tree nextStatement nextStatement nextStatement expression isErrorNode.
+self assert:collector tree nextStatement nextStatement nextStatement expression errorToken=':='.
+self assert:collector tree nextStatement nextStatement nextStatement nextStatement expression isVariable.
+
+ "Created: / 18-02-2011 / 20:35:35 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test42
+ |collector|
+ collector := self
+ doForSource:'
+ |array tokenValue|
+ self rememberSymbolUsed:tokenValue
+ array:= 3 4 5 6 :=u) '.
+self assert:collector notNil.
+self assert:collector tree notNil.
+self assert:collector tree expression isMessage.
+self assert:collector tree nextStatement expression isErrorNode.
+self assert:collector tree nextStatement expression errorToken=':='.
+self assert:collector tree nextStatement nextStatement expression isUnaryMessage.
+self assert:collector tree nextStatement nextStatement nextStatement expression isErrorNode.
+self assert:collector tree nextStatement nextStatement nextStatement expression errorToken=':='.
+self assert:collector tree nextStatement nextStatement nextStatement nextStatement expression isVariable.
+self assert:collector tree nextStatement nextStatement nextStatement nextStatement nextStatement expression isErrorNode.
+self assert:collector tree nextStatement nextStatement nextStatement nextStatement nextStatement expression errorToken=')'.
+
+ "Created: / 18-02-2011 / 20:37:17 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test43
+ |collector|
+ collector := self
+ doForSource:'
+ |uu w b|
+ [u== #Symbol ifTrue:[
+ uu := 4.
+
+ ].
+ b:=3
+ '.
+ self assert:collector notNil.
+ self assert:collector tree notNil.
+ self assert:collector tree expression isBlock.
+ self assert:collector tree expression statements expression isMessage.
+ self assert:collector tree expression statements expression receiver isBinaryMessage.
+ self assert:collector tree expression statements expression receiver receiver isVariable.
+ self assert:collector tree expression statements expression receiver receiver name = 'u'.
+ self assert:collector tree expression statements expression receiver selector = #'=='.
+ self assert:collector tree expression statements expression receiver args size = 1.
+ self assert:collector tree expression statements expression receiver arg isConstant.
+ self assert:collector tree expression statements expression receiver arg value = #Symbol.
+ self assert:collector tree expression statements expression selector = #ifTrue: .
+ self assert:collector tree expression statements expression args size = 1.
+ self assert:collector tree expression statements expression arg1 isBlock.
+ self assert:collector tree expression statements expression arg1 statements expression
+ isAssignment.
+
+ "Created: / 18-02-2011 / 21:16:10 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test44
+ |collector|
+ collector := self
+ doForSource:'
+ |b c|
+ u :=b b: u:c
+ '.
+self assert:collector notNil.
+self assert:collector tree notNil.
+self assert:collector tree expression isAssignment.
+
+ "Created: / 20-02-2011 / 18:54:11 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test5
+ |collector|
+
+ collector := self doForSource:'
+ u +'.
+ self assert:collector notNil.
+ self assert:collector tree notNil.
+ self assert:(collector tree expression) isBinaryMessage.
+ self assert:(collector tree expression receiver name = 'u').
+ self assert:(collector tree expression receiver) isVariable.
+ self assert:(collector tree expression selector) isSymbol.
+ self assert:(collector tree expression selector asString) = '+'.
+ self assert:(collector tree expression args size) = 1.
+ self assert:(collector tree expression arg) isErrorNode.
+ self assert:(collector tree expression arg errorToken = 'EOF').
+
+ "Created: / 15-02-2011 / 15:18:25 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 15:31:37 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test6
+ |collector|
+
+ collector := self doForSource:'
+ u +.'.
+ self assert:collector notNil.
+ self assert:collector tree notNil.
+ self assert:(collector tree expression) isBinaryMessage.
+ self assert:(collector tree expression receiver name = 'u').
+ self assert:(collector tree expression receiver) isVariable.
+ self assert:(collector tree expression selector) isSymbol.
+ self assert:(collector tree expression selector asString) = '+'.
+ self assert:(collector tree expression args size) = 1.
+ self assert:(collector tree expression arg) isErrorNode.
+ self assert:(collector tree expression arg errorToken = '.').
+
+ "Created: / 15-02-2011 / 15:19:08 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 15:32:56 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test7
+ |collector|
+
+ collector := self doForSource:'
+ u 3.'.
+ self assert:collector notNil.
+ self assert:collector tree notNil.
+ self assert:(collector tree expression) isUnaryMessage.
+ self assert:(collector tree expression receiver name = 'u').
+ self assert:(collector tree expression receiver) isVariable.
+ self assert:(collector tree expression selector asString) = '3'.
+
+ "Created: / 15-02-2011 / 15:19:22 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-03-2011 / 22:10:21 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test8
+ |collector|
+
+ collector := self doForSource:'
+ u =.'.
+ self assert:collector notNil.
+ self assert:collector tree notNil.
+ self assert:(collector tree expression) isBinaryMessage.
+ self assert:(collector tree expression receiver name = 'u').
+ self assert:(collector tree expression receiver) isVariable.
+ self assert:(collector tree expression selector) == #'='.
+ self assert:(collector tree expression args size) = 1.
+ self assert:(collector tree expression arg) isErrorNode.
+ self assert:(collector tree expression arg errorToken = '.').
+
+ "Created: / 15-02-2011 / 15:19:38 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 15:34:13 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+test9
+ |collector|
+
+ collector := self doForSource:'
+ u :.'.
+ self assert:collector notNil.
+ self assert:collector tree notNil.
+ self assert:(collector tree expression name = 'u').
+ self assert:(collector tree expression) isVariable.
+ self assert:(collector tree nextStatement expression isErrorNode).
+ self assert:collector tree nextStatement expression errorToken = ':'.
+ self assert:collector tree nextStatement nextStatement isNil.
+
+ "Created: / 15-02-2011 / 15:19:52 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 18-02-2011 / 15:35:42 / Jakub <zelenja7@fel.cvut.cz>"
+!
+
+testBadAssignment
+ |collector|
+
+ collector := self doForSource:'
+ u := '.
+ self assert:collector notNil.
+ self assert:collector tree notNil.
+ self assert:(collector tree expression) isAssignment.
+ self assert:(collector tree expression variable name = 'u').
+ self assert:(collector tree expression variable) isVariable.
+ self assert:(collector tree expression expression) isErrorNode.
+ self assert:(collector tree expression expression errorToken = 'EOF').
+
+ "Modified: / 18-02-2011 / 15:39:33 / Jakub <zelenja7@fel.cvut.cz>"
+! !
+
+!SmalltalkParserTests class methodsFor:'documentation'!
+
+version_SVN
+ ^ '$Id: SmallSenseParserTests.st 7694 2011-04-04 19:53:25Z vranyj1 $'
+! !
+
--- a/SmallSense__TestCase.st Mon Sep 16 18:13:00 2013 +0100
+++ b/SmallSense__TestCase.st Mon Sep 16 23:20:08 2013 +0100
@@ -25,7 +25,7 @@
doForSource:src
|parser|
- parser := SmallSenseParser new.
+ parser := SmalltalkParser new.
parser sourceText:('gen',src) asText.
parser
parseMethod:'gen' , src
@@ -36,6 +36,7 @@
"Created: / 16-03-2011 / 12:27:38 / Jakub <zelenja7@fel.cvut.cz>"
"Modified: / 18-03-2011 / 21:57:21 / Jakub <zelenja7@fel.cvut.cz>"
+ "Modified: / 16-09-2013 / 23:16:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
processMethod: aCompiledMethod
--- a/jv_smallsense.st Mon Sep 16 18:13:00 2013 +0100
+++ b/jv_smallsense.st Mon Sep 16 23:20:08 2013 +0100
@@ -46,7 +46,7 @@
^ #(
#'stx:goodies/refactoryBrowser/helpers' "BrowserEnvironment - superclass of SmallSense::SmalltalkUnacceptedMethodEnvironment "
#'stx:goodies/refactoryBrowser/lint' "RBLintRule - extended "
- #'stx:goodies/sunit' "TestAsserter - superclass of SmallSense::TestCase "
+ #'stx:goodies/sunit' "TestAsserter - superclass of SmallSense::SmalltalkParserTests "
#'stx:libbasic' "Autoload - superclass of SmallSense::BaseTestClass "
#'stx:libcomp' "AbstractSyntaxHighlighter - superclass of SmallSense::SmalltalkParser "
#'stx:libhtml' "HTMLDocumentFrame - extended "
@@ -168,7 +168,6 @@
#'SmallSense::ParseNodeVisitor'
#'SmallSense::ParseTreeIndex'
#'SmallSense::ParseTreeIndexEntry'
- (#'SmallSense::ParserTests' autoload)
#'SmallSense::Position'
#'SmallSense::Recognizer'
(#'SmallSense::RecognizerTests' autoload)
@@ -197,6 +196,7 @@
#'SmallSense::MethodPO'
#'SmallSense::SmalltalkEditSupport'
#'SmallSense::SmalltalkInferencer'
+ (#'SmallSense::SmalltalkParserTests' autoload)
#'SmallSense::SnippetPO'
#'SmallSense::UnionType'
#'SmallSense::UnknownType'
--- a/smallsense.rc Mon Sep 16 18:13:00 2013 +0100
+++ b/smallsense.rc Mon Sep 16 23:20:08 2013 +0100
@@ -25,7 +25,7 @@
VALUE "LegalCopyright", "Copyright Claus Gittinger 1988-2011\nCopyright eXept Software AG 1998-2011\0"
VALUE "ProductName", "Smalltalk/X\0"
VALUE "ProductVersion", "6.2.3.0\0"
- VALUE "ProductDate", "Mon, 16 Sep 2013 17:11:06 GMT\0"
+ VALUE "ProductDate", "Mon, 16 Sep 2013 22:19:31 GMT\0"
END
END