SmallSense__TokenStream.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 25 Oct 2017 23:42:41 +0100
changeset 1058 6d4bf422a7dd
parent 374 e65bd2bf892a
permissions -rw-r--r--
Fix subscript out of bounds error in Smalltalk inderences ...caused by missing size-check when analysing typed prefix.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     1
"
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     2
stx:goodies/smallsense - A productivity plugin for Smalltalk/X IDE
374
e65bd2bf892a Updated copyright notice.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 268
diff changeset
     3
Copyright (C) 2013-2015 Jan Vrany
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     4
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     5
This library is free software; you can redistribute it and/or
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     6
modify it under the terms of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     7
License as published by the Free Software Foundation; either
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     8
version 2.1 of the License. 
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     9
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    10
This library is distributed in the hope that it will be useful,
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    11
but WITHOUT ANY WARRANTY; without even the implied warranty of
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    13
Lesser General Public License for more details.
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    14
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    15
You should have received a copy of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    16
License along with this library; if not, write to the Free Software
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    17
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    18
"
249
8bc64027b189 Package renamed to stx:goodies/smallsense
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 238
diff changeset
    19
"{ Package: 'stx:goodies/smallsense' }"
200
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
"{ NameSpace: SmallSense }"
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
Object subclass:#TokenStream
211
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    24
	instanceVariableNames:'scanner scannerSourceReadLimit tokens last position full
228
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
    25
		positionMax positionOfCursor caretTokenReported'
200
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
	classVariableNames:'BacklogSize'
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
	poolDictionaries:''
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
	category:'SmallSense-Utils-Matcher'
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
Object subclass:#Token
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
	instanceVariableNames:'type value startPosition endPosition'
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
	classVariableNames:''
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
	poolDictionaries:''
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
	privateIn:TokenStream
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
211
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    38
!TokenStream class methodsFor:'documentation'!
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    39
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    40
copyright
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    41
"
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    42
stx:goodies/smallsense - A productivity plugin for Smalltalk/X IDE
374
e65bd2bf892a Updated copyright notice.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 268
diff changeset
    43
Copyright (C) 2013-2015 Jan Vrany
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    44
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    45
This library is free software; you can redistribute it and/or
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    46
modify it under the terms of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    47
License as published by the Free Software Foundation; either
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    48
version 2.1 of the License. 
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    49
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    50
This library is distributed in the hope that it will be useful,
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    51
but WITHOUT ANY WARRANTY; without even the implied warranty of
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    52
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    53
Lesser General Public License for more details.
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    54
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    55
You should have received a copy of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    56
License along with this library; if not, write to the Free Software
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    57
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    58
"
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    59
!
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    60
211
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    61
documentation
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    62
"
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    63
    A custom read-only stream that return high-level tokens produced
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    64
    by underlying scanner object. The scanner must conform to API of
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    65
    Scanner class.
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    66
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    67
    Additionaly, when a cursor position is provided, TokenStream returns
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    68
    a virtual token with type #CARET.
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    69
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    70
    [author:]
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    71
        Jan Vrany <jan.vrany@fit.cvut.cz>
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    72
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    73
    [instance variables:]
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    74
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    75
    [class variables:]
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    76
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    77
    [see also:]
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    78
        Scanner
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    79
        TokenPatternMatcher.
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    80
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    81
"
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    82
! !
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    83
200
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
!TokenStream class methodsFor:'initialization'!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
initialize
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
    "Invoked at system start or when the class is dynamically loaded."
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
    "/ please change as required (and remove this comment)
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
    BacklogSize := 100.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
    "Modified: / 07-08-2013 / 01:47:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
! !
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
!TokenStream class methodsFor:'instance creation'!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
on: scanner
211
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
    99
    ^ self new initializeOn: scanner cursor: nil
200
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
    "Created: / 06-05-2014 / 15:25:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
211
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   102
    "Modified: / 15-05-2014 / 15:08:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   103
!
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   104
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   105
on: scanner cursor: cursor
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   106
    ^ self new initializeOn: scanner cursor: cursor
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   107
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   108
    "Created: / 15-05-2014 / 15:08:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
200
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
! !
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
!TokenStream methodsFor:'accessing'!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
sourceStream
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
    ^ scanner sourceStream
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
    "Created: / 07-08-2013 / 01:44:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
! !
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
!TokenStream methodsFor:'initialization'!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
initializeOn: scannerObject
211
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   122
    ^ self initializeOn: scannerObject cursor: nil
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   123
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   124
    "Created: / 06-05-2014 / 15:27:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   125
    "Modified: / 15-05-2014 / 15:08:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   126
!
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   127
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   128
initializeOn: scannerArg cursor: positionOfCursorArg
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   129
    scanner := scannerArg.
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   130
    positionOfCursor := positionOfCursorArg.
200
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
    tokens := Array new: BacklogSize.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
    last := 0.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
    full := false.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
    position := 0.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
    positionMax := 0.
228
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   136
    caretTokenReported := false.
200
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
211
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   138
    positionOfCursor notNil ifTrue:[ 
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   139
        scannerArg sourceStream isExternalStream ifTrue:[ 
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   140
            self error: 'Cursor reporting us supported only on internal streams'.
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   141
        ].
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   142
        scannerSourceReadLimit := scannerArg sourceStream readLimit.
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   143
        scannerArg sourceStream readLimit: (positionOfCursor min: scannerSourceReadLimit)
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   144
    ].
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   145
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   146
    "Created: / 15-05-2014 / 15:07:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
228
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   147
    "Modified: / 15-05-2014 / 17:55:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
200
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
! !
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
!TokenStream methodsFor:'stream api'!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
atEnd
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
    ^ self peek type == #EOF
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
    "Created: / 14-03-2012 / 22:53:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
    "Modified: / 07-08-2013 / 01:49:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
228
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   159
contents
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   160
    ^ Array streamContents:[ :s | 
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   161
        [ self atEnd ] whileFalse:[ 
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   162
            s nextPut: self next
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   163
        ].
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   164
    ].
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   165
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   166
    "Created: / 15-05-2014 / 07:49:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   167
!
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   168
200
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
next
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
    | i t |
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
    position < positionMax ifTrue:[
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
        i := last - (positionMax - position) + 1.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
        i <= 0 ifTrue:[
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
            i := tokens size + i.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
        ].
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
        position := position + 1.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
        ^ tokens at: i.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
    ].
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
    scanner nextToken.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
    t := scanner token.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
    "/ Smalltalk / JavaScript scanners does not return token objects, sigh...
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
    (t isCharacter or:[ t isString ]) ifTrue:[ 
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
        t := Token new
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
                type: scanner tokenType;
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   185
                value: scanner token;
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
                startPosition: scanner tokenStartPosition;
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
                endPosition: scanner tokenEndPosition;        
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
                yourself
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
    ].
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
    t isNil ifTrue:[ 
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
        t := Token new
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
                type: #EOF;
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
                yourself
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
    ].
211
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   195
    t type == #EOF ifTrue:[ 
228
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   196
        (caretTokenReported not and:[scanner sourceStream position == positionOfCursor]) ifTrue:[ 
211
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   197
            t type: #CARET.
228
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   198
            t value: $|.
211
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   199
            t startPosition: positionOfCursor.
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   200
            t endPosition: positionOfCursor.
228
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   201
            caretTokenReported := true.
211
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   202
            scanner sourceStream readLimit: scannerSourceReadLimit.
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   203
        ].
8d5259c39445 Added support for CARET virtual token generated at cursor position (when provided)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 209
diff changeset
   204
    ].
200
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   205
    position := positionMax := positionMax + 1.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   206
    last := last + 1.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   207
    last > tokens size ifTrue:[ 
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
        full ifFalse:[ full := true ].
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
        last := 1 
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
    ].
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
    tokens at: last put: t.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
    ^ t
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
    "Created: / 14-03-2012 / 22:53:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
228
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   215
    "Modified: / 15-05-2014 / 17:56:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
200
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   216
!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   218
next: anInteger 
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
    "Answer up to anInteger elements of my collection. Overridden for efficiency."
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
    ^ self shouldNotImplement
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
    "Modified: / 06-05-2014 / 15:51:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
peek
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
    | t |
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
    t := self next.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
    position := position - 1.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   231
    ^ t
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   232
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   233
    "Modified: / 07-08-2013 / 01:12:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
position
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
    ^position
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
    "Created: / 14-03-2012 / 22:52:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
    "Modified: / 07-08-2013 / 01:06:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   242
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   243
position: anInteger
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   244
    (positionMax - anInteger) > (tokens size) ifTrue:[
268
7c469d0beca1 Bug fix in TokenStream>>reset.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   245
        Stream positionErrorSignal raiseErrorString:'Not that much tokens in backlog!! You may try to increase it.'.
238
d5a32e41181f Fixes for token matcher: correctly (re)set position backwards.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 233
diff changeset
   246
        ^ self.
200
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   247
    ].
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   248
    position := anInteger.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   249
268
7c469d0beca1 Bug fix in TokenStream>>reset.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   250
    "Modified: / 07-08-2014 / 11:46:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
238
d5a32e41181f Fixes for token matcher: correctly (re)set position backwards.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 233
diff changeset
   251
!
d5a32e41181f Fixes for token matcher: correctly (re)set position backwards.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 233
diff changeset
   252
d5a32e41181f Fixes for token matcher: correctly (re)set position backwards.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 233
diff changeset
   253
position: tokenPosition sourcePosition: sourcePosition
d5a32e41181f Fixes for token matcher: correctly (re)set position backwards.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 233
diff changeset
   254
    position := positionMax := tokenPosition.
d5a32e41181f Fixes for token matcher: correctly (re)set position backwards.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 233
diff changeset
   255
    tokens := tokens class new: tokens size.
d5a32e41181f Fixes for token matcher: correctly (re)set position backwards.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 233
diff changeset
   256
    full := false.
d5a32e41181f Fixes for token matcher: correctly (re)set position backwards.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 233
diff changeset
   257
d5a32e41181f Fixes for token matcher: correctly (re)set position backwards.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 233
diff changeset
   258
    scanner sourceStream position: sourcePosition.
d5a32e41181f Fixes for token matcher: correctly (re)set position backwards.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 233
diff changeset
   259
    positionOfCursor notNil ifTrue:[
d5a32e41181f Fixes for token matcher: correctly (re)set position backwards.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 233
diff changeset
   260
        sourcePosition < positionOfCursor ifTrue:[
d5a32e41181f Fixes for token matcher: correctly (re)set position backwards.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 233
diff changeset
   261
            scanner sourceStream readLimit: (positionOfCursor min: scannerSourceReadLimit).
d5a32e41181f Fixes for token matcher: correctly (re)set position backwards.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 233
diff changeset
   262
            caretTokenReported := false.
d5a32e41181f Fixes for token matcher: correctly (re)set position backwards.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 233
diff changeset
   263
        ].
d5a32e41181f Fixes for token matcher: correctly (re)set position backwards.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 233
diff changeset
   264
    ].
d5a32e41181f Fixes for token matcher: correctly (re)set position backwards.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 233
diff changeset
   265
d5a32e41181f Fixes for token matcher: correctly (re)set position backwards.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 233
diff changeset
   266
    "Created: / 13-06-2014 / 17:06:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
200
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   267
!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   268
209
220fd4240b0f More tests for TokenPatternMatcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 200
diff changeset
   269
reset
268
7c469d0beca1 Bug fix in TokenStream>>reset.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   270
    (positionMax) > (tokens size) ifTrue:[
238
d5a32e41181f Fixes for token matcher: correctly (re)set position backwards.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 233
diff changeset
   271
        scanner sourceStream reset.    
268
7c469d0beca1 Bug fix in TokenStream>>reset.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   272
        tokens := Array new: BacklogSize.
7c469d0beca1 Bug fix in TokenStream>>reset.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   273
        last := 0.
7c469d0beca1 Bug fix in TokenStream>>reset.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   274
        full := false.
7c469d0beca1 Bug fix in TokenStream>>reset.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   275
        position := 0.
7c469d0beca1 Bug fix in TokenStream>>reset.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   276
        positionMax := 0.
238
d5a32e41181f Fixes for token matcher: correctly (re)set position backwards.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 233
diff changeset
   277
    ].
d5a32e41181f Fixes for token matcher: correctly (re)set position backwards.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 233
diff changeset
   278
    position := 0.
209
220fd4240b0f More tests for TokenPatternMatcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 200
diff changeset
   279
220fd4240b0f More tests for TokenPatternMatcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 200
diff changeset
   280
    "Created: / 14-05-2014 / 16:19:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
268
7c469d0beca1 Bug fix in TokenStream>>reset.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   281
    "Modified: / 07-08-2014 / 11:57:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
209
220fd4240b0f More tests for TokenPatternMatcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 200
diff changeset
   282
!
220fd4240b0f More tests for TokenPatternMatcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 200
diff changeset
   283
200
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   284
skipSeparators
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   285
    self halt.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   286
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   287
    "Created: / 15-03-2012 / 10:35:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   288
    "Modified: / 07-08-2013 / 01:15:18 / Jan Vrany <jan.vrany@fit.cvut.cz>"
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   289
!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   290
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   291
uncheckedPeek
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   292
    "An unchecked version of peek that throws an error if we try to peek over the end of the stream, even faster than #peek."
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   293
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   294
    ^ self peek
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   295
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   296
    "Modified: / 14-03-2012 / 22:46:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   297
! !
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   298
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   299
!TokenStream::Token methodsFor:'accessing'!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   300
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   301
endPosition
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   302
    ^ endPosition
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   303
!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   304
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   305
endPosition:something
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   306
    endPosition := something.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   307
!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   308
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   309
startPosition
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   310
    ^ startPosition
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   311
!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   312
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   313
startPosition:something
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   314
    startPosition := something.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   315
!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   316
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   317
stopPosition
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   318
    ^ endPosition
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   319
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   320
    "Created: / 04-04-2013 / 00:32:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   321
!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   322
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   323
type
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   324
    ^ type
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   325
!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   326
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   327
type:something
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   328
    type := something.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   329
!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   330
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   331
value
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   332
    ^ value
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   333
!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   334
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   335
value:something
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   336
    value := something.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   337
! !
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   338
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   339
!TokenStream::Token methodsFor:'printing & storing'!
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   340
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   341
printOn:aStream
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   342
    "append a printed representation if the receiver to the argument, aStream"
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   343
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   344
    aStream nextPut: ${.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   345
    type printOn:aStream.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   346
    aStream nextPutAll:' - '.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   347
    value printOn:aStream.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   348
    aStream nextPutAll:' <'.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   349
    startPosition printOn:aStream.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   350
    aStream nextPutAll:'-'.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   351
    endPosition printOn:aStream.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   352
    aStream nextPutAll:'>}'.
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   353
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   354
    "Modified: / 06-05-2014 / 15:33:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   355
! !
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   356
228
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   357
!TokenStream class methodsFor:'documentation'!
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   358
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   359
version_HG
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   360
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   361
    ^ '$Changeset: <not expanded> $'
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   362
! !
87ee1ba0e13f Fix in TokenStream - correctly report CARET, EOF when there are no more tokens after cursor.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 211
diff changeset
   363
200
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   364
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   365
TokenStream initialize!