compiler/tests/extras/PPCLRPParser.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 30 Jul 2015 17:31:18 +0100
changeset 511 527038bc8edf
child 516 3b81c9e53352
permissions -rw-r--r--
Added LRPParser from Live Robots Prograaming project
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
511
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/petitparser/compiler/tests/extras' }"
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
"{ NameSpace: Smalltalk }"
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
PPCompositeParser subclass:#PPCLRPParser
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	instanceVariableNames:'program variable block bra ket identifier machine body event
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
		transition epsilon wildcard state onentry running onexit comment
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
		lineTerminator statebody spawn integer errorNode success failed
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
		lastError styler timeoutIdentifier timeoutInteger endOfComment'
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
	classVariableNames:''
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
	poolDictionaries:''
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
	category:'PetitCompiler-Extras-Tests-LRP'
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
!PPCLRPParser class methodsFor:'accessing'!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
ignoredNames
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
    ^super ignoredNames , #(styler failed lastError)
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
! !
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
!PPCLRPParser methodsFor:'accessing'!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
error
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
    ^super error
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
    "Modified: / 30-07-2015 / 17:12:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
failed
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
    ^failed
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
lastError
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
    ^lastError
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
start
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
    ^program end
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
styler: aSHStyler
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
    styler := aSHStyler.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
success
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
    ^success
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
! !
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
!PPCLRPParser methodsFor:'block creation'!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
createSTBlockFrom: aBlockNode withVariables: aDictionary
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
    |compiled retval keys|
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
    
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
    keys := OrderedCollection new: aDictionary size.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
    aDictionary associations do: [:asoc|
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
        keys add: asoc key.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
    ].
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
    compiled := (self methodizeBlock: aBlockNode withArguments: keys) compiledMethod.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
    retval := compiled valueWithReceiver: Object new arguments: {aDictionary}.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
    ^retval.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
methodizeBlock: parsedBlock withArguments: anArray
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
    
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
    |method retval inspoint|
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
    
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
    method := 'captureV: PPCLRPScopeVariables'.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
     
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
    retval := PPSmalltalkParser new method parse: method , '^[1]'.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
    inspoint := retval body statements first.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
    parsedBlock scope: inspoint value scope.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
    parsedBlock parent: inspoint.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
    inspoint value: parsedBlock.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
    retval source: retval asString.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
    
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
    anArray do: [:aVarName|
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
        retval := retval rewritePPCLRPVarNamedWrite: aVarName.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
        retval := retval rewritePPCLRPVarNamedRead: aVarName.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
    ].
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
    ^retval
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
! !
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
!PPCLRPParser methodsFor:'error handing'!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
failWithValue: anObject
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
    failed := true.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
    lastError := anObject.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
! !
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
!PPCLRPParser methodsFor:'grammar'!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
body
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
    ^(variable / event / state / transition / timeoutIdentifier / timeoutInteger / epsilon / wildcard / comment / errorNode) star
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
errorNode
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
    ^(bra,  (bra/ket)negate star , ket) 
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
        ==> [ :tokens |  
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
                PPCLRPErrorNode new start: tokens first start stop: tokens last stop; yourself.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
            ]
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
event
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
    ^ (bra, 'event' asParser trim, identifier, block,  ket)  
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
        ==> [:tokens | | ident |
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
                ident := (tokens at: 3).
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
                (PPCLRPEvent named: ident inputValue 
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
                     trigger: (tokens  at: 4))
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
                start: tokens first start stop: tokens last stop;
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
                nameRange: (ident start to: ident stop);
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
                yourself.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
            ]
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
integer 
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
    ^(#digit asParser) plus flatten trim token
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
machine
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
    ^(bra , 'machine' asParser trim , identifier , body , ket) 
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
        ==> [:tokens | | ident bod stop |
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
                ident := (tokens at: 3).
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
                bod := (tokens at: 4).
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
                bod isEmpty
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
                    ifTrue: [ stop := tokens last stop - 1 ]
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
                 	ifFalse: [ stop := (bod at: 1) start - 1 ].
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
                (PPCLRPMachine name: ident inputValue body: bod)
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
                    start: (tokens first start) stop: (tokens last stop);
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
                    nameRange: (ident start to: stop);
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
                    yourself.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
            ]
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
onentry
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
    ^ (bra, 'onentry' asParser trim, (block/spawn) ,  ket ) 
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
        ==> [:tokens | 
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
                (PPCLRPOnEntry block: (tokens at: 3))
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
                start: (tokens first start) stop: (tokens last stop);
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
                keywordEnd: (tokens at: 3) start -1;
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
                yourself.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
            ]
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
onexit
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
    ^ (bra, 'onexit' asParser trim, (block/spawn),  ket)  
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
        ==> [:tokens | 
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
                (PPCLRPOnExit block: (tokens at: 3))
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
                start: (tokens first start) stop: (tokens last stop);
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
                keywordEnd: (tokens at: 3) start -1;
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
                yourself.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
            ]
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
program
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
    ^ (variable / machine / comment / spawn / errorNode) star
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
running
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
    ^ (bra, 'running' asParser trim, (block/spawn),  ket)  
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
        ==> [:tokens | 
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
                (PPCLRPRunning block: (tokens at: 3))
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
                start: (tokens first start) stop: (tokens last stop);
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
                keywordEnd: (tokens at: 3) start -1;
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
                yourself.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
            ]
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
spawn
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
    ^(bra , 'spawn' asParser trim , identifier , identifier , ket) 
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
        ==> [ :tokens |  
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
                (PPCLRPSpawn
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
                    machine: (tokens at: 3) parsedValue
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
                    state: (tokens at: 4) parsedValue)
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
                start: (tokens first start) stop: (tokens last stop);
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
                nameRange: ((tokens at: 3) start to: (tokens at: 4) stop)
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
                yourself.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
            ]
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
        
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   185
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
state
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
    ^(bra , 'state' asParser trim , identifier , statebody , ket) 
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
        ==> [ :tokens | | ident |
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
                ident := (tokens at: 3).
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
                (PPCLRPState name: ident inputValue
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
                    body: (tokens at: 4))
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
                start: (tokens first start) stop: (tokens last stop);
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
                nameRange: (ident start to: ident stop);
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
                yourself.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
            ]
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
        
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
statebody
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
    ^(onentry / running / onexit / machine / comment / errorNode) star
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   201
        
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   202
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   203
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   204
variable
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   205
    ^ (bra , 'var' asParser trim , identifier , ':=' asParser trim , block , ket) 
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   206
        ==> [ :tokens | |ident|
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   207
            ident := (tokens at: 3).
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
            (PPCLRPVariable name: ident inputValue value: (tokens at: 5))
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
                start: (tokens first start) stop: (tokens last stop);
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
                nameRange: (ident start to: ident stop);
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
                yourself.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
        ]
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
! !
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
!PPCLRPParser methodsFor:'grammar-comments'!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   216
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
comment
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   218
    ^ ( $; asParser token , (endOfComment negate star) flatten,  endOfComment token) trim 
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
    ==> [ :tokens |  |text|
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
            text := tokens  at: 2.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
                (PPCLRPComment text: (text copyFrom: 1 to: text size -1))
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
                start: (tokens first start) stop: (tokens last stop);
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
                yourself.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
        ]
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
endOfComment
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
    ^ #eof asParser / lineTerminator
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   231
lineTerminator
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   232
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   233
    ^ (Character lf asParser) / (Character cr asParser , (Character lf asParser ) optional )
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
! !
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
!PPCLRPParser methodsFor:'grammar-common'!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
block
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
    ^PPSmalltalkParser new block
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   242
bra
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   243
    ^ $( asParser token trim
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   244
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   245
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   246
identifier 
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   247
    ^(#letter asParser , (#word asParser /  $_ asParser) star) flatten token trim
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   248
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   249
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   250
ket
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   251
    ^ $) asParser token trim
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
! !
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   253
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   254
!PPCLRPParser methodsFor:'grammar-transitions'!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   255
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   256
epsilon
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   257
    ^ (bra, 'eps' asParser trim, identifier, '->' asParser trim, identifier,  identifier optional, ket) 
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
        ==> [ :tokens |  | trans name |
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
                name := (tokens at: 6).
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
                name ifNil: [name := '' ] ifNotNil: [ name := name inputValue ].
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
                trans := 
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   262
                    (PPCLRPEpsilonTransition
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
                        from: (tokens at: 3) inputValue
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   264
                        to: (tokens at: 5) inputValue
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   265
                        name: name).
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   266
                self setTransitionRangesIn: trans for: tokens withArrowAt: 3. 
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   267
                trans
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   268
        ]
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   269
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   270
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   271
timeoutIdentifier
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   272
    ^ (bra, 'ontime' asParser trim, identifier , identifier, '->' asParser trim, identifier,  identifier optional, ket)
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   273
        ==> [:tokens | self transitionActionHandlerFor: PPCLRPTimeoutTransition tokens: tokens ].
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   274
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   275
    "Modified: / 30-07-2015 / 17:14:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   276
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   277
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   278
timeoutInteger
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   279
    ^ (bra, 'ontime' asParser trim,  integer, identifier, '->' asParser trim, identifier,  identifier optional, ket)
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   280
        ==> [ :tokens | | trans name |
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   281
        name := (tokens at: 7).
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   282
        name ifNil: [name := '' ] ifNotNil: [ name := name inputValue ].
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   283
        trans :=
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   284
            (PPCLRPTimeoutTransition
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   285
                on: (Integer readFrom: (tokens at: 3) inputValue)
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   286
                from: (tokens at: 4) inputValue
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   287
                to: (tokens at: 6) inputValue
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   288
                name: name).
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   289
        self setTransitionRangesIn: trans for: tokens withArrowAt: 4.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   290
        trans.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   291
    ]
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   292
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   293
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   294
transition
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   295
    ^ (bra, 'on' asParser trim, identifier, identifier, '->' asParser trim, identifier,  identifier optional , ket) 
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   296
        ==> [ :tokens | self transitionActionHandlerFor: PPCLRPTransition tokens: tokens ]
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   297
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   298
    "Modified: / 30-07-2015 / 17:15:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   299
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   300
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   301
wildcard
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   302
    ^ (bra, 'on' asParser trim, identifier,  '*->' asParser trim, identifier,  identifier optional, ket) 
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   303
        ==> [ :tokens |  | trans name |
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   304
                name := (tokens at: 6).
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   305
                name ifNil: [name := '' ] ifNotNil: [ name := name inputValue ].
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   306
                trans :=
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   307
                    (PPCLRPWildcardTransition
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   308
                        on: (tokens at: 3) inputValue
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   309
                        to: (tokens at: 5) inputValue
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   310
                        name: name ).
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   311
                self setTransitionRangesIn: trans for: tokens withArrowAt: 3. 
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   312
                trans
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   313
            ]
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   314
        
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   315
! !
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   316
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   317
!PPCLRPParser methodsFor:'parsing'!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   318
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   319
parse: aText styleOn: aViewOrMorph
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   320
    |parsedProgram|
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   321
    
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   322
    parsedProgram := self parsePPCLRP: aText.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   323
    self styler view: aViewOrMorph; parser: self; nodes: parsedProgram; style: aText.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   324
    
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   325
    ^parsedProgram.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   326
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   327
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   328
parsePPCLRP: aString
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   329
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   330
    |parsedProgram |
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   331
    failed := false.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   332
    parsedProgram := self parse: aString.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   333
    
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   334
    parsedProgram isPetitFailure ifTrue:[
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   335
        parsedProgram := 
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   336
            {PPCLRPErrorNode new 
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   337
                start: 1;
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   338
                stop: aString size; 
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   339
                yourself.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   340
            }
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   341
    ].
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   342
    
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   343
    "visit pattern?"
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   344
    parsedProgram do:[:aNode|
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   345
        (aNode onErrorNode: [:anErrorNode| ] parser: self)
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   346
    ].
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   347
    
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   348
    ^parsedProgram.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   349
! !
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   350
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   351
!PPCLRPParser methodsFor:'transitions'!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   352
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   353
setTransitionRangesIn: aTransition for: aTokenArray withArrowAt: index
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   354
    | ident |
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   355
    ident := (aTokenArray at: index + 3).
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   356
    ident
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   357
        ifNil: [ aTransition nameRange: (1 to: 1) ]
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   358
        ifNotNil: [ aTransition nameRange: (ident start to: ident stop) ].
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   359
    aTransition
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   360
        start: (aTokenArray first start) stop: (aTokenArray last stop);
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   361
        arrowRange:
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   362
                    ((aTokenArray at: index) stop + 1
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   363
                        to: (aTokenArray at: index + 2) start -1);
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   364
        keywordEnd: (aTokenArray at: 3) start -1
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   365
!
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   366
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   367
transitionActionHandlerFor: class tokens: tokens
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   368
    | trans name|
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   369
    name := (tokens  at: 7).
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   370
    name isNil ifTrue:[ name := '' ] ifFalse:[ name := name inputValue ].
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   371
    trans :=
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   372
        (class
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   373
            on: (tokens at: 3) inputValue
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   374
            from: (tokens at: 4) inputValue
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   375
            to: (tokens at: 6) inputValue
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   376
            name: name).
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   377
    self setTransitionRangesIn: trans for: tokens withArrowAt: 4.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   378
    ^ trans.
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   379
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   380
    "Created: / 30-07-2015 / 17:12:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   381
! !
527038bc8edf Added LRPParser from Live Robots Prograaming project
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   382