SmallSense__TokenPatternParser.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 25 Oct 2017 23:42:41 +0100
changeset 1058 6d4bf422a7dd
parent 382 4df672779edd
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: 274
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: 204
diff changeset
    19
"{ Package: 'stx:goodies/smallsense' }"
199
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
"{ NameSpace: SmallSense }"
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
203
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    23
Regex::RxParser subclass:#TokenPatternParser
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    24
	instanceVariableNames:''
199
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
	classVariableNames:''
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
	poolDictionaries:''
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
	category:'SmallSense-Utils-Matcher'
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
!
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
203
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    30
Regex::RxCharSetParser subclass:#TokenSpecParser
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    31
	instanceVariableNames:''
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    32
	classVariableNames:''
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    33
	poolDictionaries:''
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    34
	privateIn:TokenPatternParser
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    35
!
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    36
202
5c8610dad14c TokenExpression* renamed to TokenPattern*
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 200
diff changeset
    37
!TokenPatternParser class methodsFor:'documentation'!
199
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    39
copyright
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    40
"
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    41
stx:goodies/smallsense - A productivity plugin for Smalltalk/X IDE
374
e65bd2bf892a Updated copyright notice.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 274
diff changeset
    42
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
    43
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    44
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
    45
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
    46
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
    47
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
    48
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    49
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
    50
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
    51
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
    52
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
    53
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    54
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
    55
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
    56
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
    57
"
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
199
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
documentation
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
"
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
    A parser to parse token patterns
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
    [author:]
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
        Jan Vrany <jan.vrany@fit.cvut.cz>
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
    [instance variables:]
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
    [class variables:]
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
    [see also:]
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
"
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
! !
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
202
5c8610dad14c TokenExpression* renamed to TokenPattern*
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 200
diff changeset
    76
!TokenPatternParser class methodsFor:'parsing'!
199
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
parse: anArrayOrStream
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
    ^ self new parse: anArrayOrStream
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
    "Created: / 02-05-2014 / 18:56:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
! !
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
203
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    84
!TokenPatternParser methodsFor:'private'!
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    85
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    86
characterSetFrom: setSpec
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    87
        "<setSpec> is what goes between the brackets in a charset regex
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    88
        (a String). Make a string containing all characters the spec specifies.
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    89
        Spec is never empty."
199
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
203
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    91
        | negated spec |
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    92
        spec := ReadStream on: setSpec.
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    93
        spec peek = $^
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    94
                ifTrue:         [negated := true.
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    95
                                spec next]
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    96
                ifFalse:        [negated := false].
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    97
        ^ TokenPatternTokenSet new
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    98
                initializeElements: (TokenSpecParser on: spec) parse
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
    99
                negated: negated
199
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
203
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   101
    "Created: / 09-05-2014 / 15:48:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
204
190357b490fd Allow for spaces in token patterns to increase readibility.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 203
diff changeset
   102
!
190357b490fd Allow for spaces in token patterns to increase readibility.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 203
diff changeset
   103
190357b490fd Allow for spaces in token patterns to increase readibility.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 203
diff changeset
   104
next
190357b490fd Allow for spaces in token patterns to increase readibility.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 203
diff changeset
   105
    "Advance the input storing the just read character
190357b490fd Allow for spaces in token patterns to increase readibility.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 203
diff changeset
   106
    as the lookahead."
190357b490fd Allow for spaces in token patterns to increase readibility.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 203
diff changeset
   107
190357b490fd Allow for spaces in token patterns to increase readibility.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 203
diff changeset
   108
    "/ Overriden here to allow for spaces (to increase readability)
190357b490fd Allow for spaces in token patterns to increase readibility.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 203
diff changeset
   109
190357b490fd Allow for spaces in token patterns to increase readibility.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 203
diff changeset
   110
    input atEnd ifTrue: [
190357b490fd Allow for spaces in token patterns to increase readibility.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 203
diff changeset
   111
        lookahead := #epsilon.
190357b490fd Allow for spaces in token patterns to increase readibility.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 203
diff changeset
   112
    ] ifFalse:[ 
190357b490fd Allow for spaces in token patterns to increase readibility.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 203
diff changeset
   113
        input skipSeparators.
190357b490fd Allow for spaces in token patterns to increase readibility.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 203
diff changeset
   114
        lookahead := input next
190357b490fd Allow for spaces in token patterns to increase readibility.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 203
diff changeset
   115
    ].
190357b490fd Allow for spaces in token patterns to increase readibility.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 203
diff changeset
   116
190357b490fd Allow for spaces in token patterns to increase readibility.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 203
diff changeset
   117
    "Created: / 09-05-2014 / 17:24:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
199
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
! !
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
203
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   120
!TokenPatternParser methodsFor:'recursive descent'!
199
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
203
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   122
atom
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   123
    | atom |
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   124
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   125
    atom := super atom.
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   126
    (atom isKindOf:Regex::RxsCharacter) ifTrue:[
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   127
        atom := TokenPatternToken new type:atom character.
199
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
    ].
203
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   129
    ^ atom
199
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
203
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   131
    "Created: / 09-05-2014 / 15:56:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   132
! !
199
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
203
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   134
!TokenPatternParser::TokenSpecParser methodsFor:'parsing'!
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   135
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   136
parseNamedSet
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   137
    | type value done out |
199
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
203
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   139
    self
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   140
        match:$[;
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   141
        match:$:.
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   142
    done := false.
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   143
    out := '' writeStream.
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   144
    [ done ] whileFalse:[ 
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   145
        lookahead == $\ ifTrue:[ 
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   146
            "/ Escape sequence
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   147
            lookahead := source next.
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   148
            out nextPut: lookahead.
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   149
        ] ifFalse:[ 
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   150
            lookahead == $: ifTrue:[ 
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   151
                done := true.
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   152
            ] ifFalse:[ 
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   153
                lookahead == $= ifTrue:[ 
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   154
                    type := out contents.
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   155
                    out reset.
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   156
                ] ifFalse:[ 
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   157
                    out nextPut: lookahead.
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   158
                ].
199
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
            ].
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
        ].
203
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   161
        lookahead := source next.
199
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
    ].
203
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   163
    type isNil ifTrue:[ 
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   164
        type := out contents.
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   165
    ] ifFalse:[
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   166
        value := out contents.
200
12d6a2f82d95 Fixed basic token expression matching.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 199
diff changeset
   167
    ].
203
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   168
    self match:$].
199
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
203
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   170
    elements add:((TokenPatternToken new)
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   171
                type:type;
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   172
                value:value)
199
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
203
c70b7351eda6 Changed TokenPatternParser to parse from string rather from literal array.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 202
diff changeset
   174
    "Modified: / 09-05-2014 / 16:35:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
199
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
! !
c2d7421cb317 Initial work on token stream matcher
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
274
2cfcd8eb9761 Fixes for issue #10: Extra characters inserted when typing too fast and complete-if-ambiguous is on
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   177
!TokenPatternParser class methodsFor:'documentation'!
2cfcd8eb9761 Fixes for issue #10: Extra characters inserted when typing too fast and complete-if-ambiguous is on
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   178
2cfcd8eb9761 Fixes for issue #10: Extra characters inserted when typing too fast and complete-if-ambiguous is on
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   179
version_HG
2cfcd8eb9761 Fixes for issue #10: Extra characters inserted when typing too fast and complete-if-ambiguous is on
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   180
2cfcd8eb9761 Fixes for issue #10: Extra characters inserted when typing too fast and complete-if-ambiguous is on
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   181
    ^ '$Changeset: <not expanded> $'
2cfcd8eb9761 Fixes for issue #10: Extra characters inserted when typing too fast and complete-if-ambiguous is on
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   182
! !
2cfcd8eb9761 Fixes for issue #10: Extra characters inserted when typing too fast and complete-if-ambiguous is on
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   183