Parser.st
changeset 4644 117a8f63f3f8
parent 4641 4c0847b6289f
child 4648 8d269996803a
equal deleted inserted replaced
4643:e305b814a348 4644:117a8f63f3f8
  9219     "Created: / 19-08-2018 / 11:13:42 / Claus Gittinger"
  9219     "Created: / 19-08-2018 / 11:13:42 / Claus Gittinger"
  9220     "Modified (comment): / 21-06-2019 / 09:50:18 / Claus Gittinger"
  9220     "Modified (comment): / 21-06-2019 / 09:50:18 / Claus Gittinger"
  9221 !
  9221 !
  9222 
  9222 
  9223 stringWithEmbeddedExpressions
  9223 stringWithEmbeddedExpressions
  9224     |expressions collectedString pos1 pos2 receiver node lNr|
  9224     |expressions collectedString pos1 pos2 fragPos receiver node lNr|
  9225 
  9225 
  9226     pos1 := tokenPosition.
  9226     pos1 := fragPos := tokenPosition.
  9227     lNr := tokenLineNr.
  9227     lNr := tokenLineNr.
  9228     expressions := OrderedCollection new.
  9228     expressions := OrderedCollection new.
  9229     collectedString := ''.
  9229     collectedString := ''.
  9230     [tokenType == #StringFragment] whileTrue:[ 
  9230     [tokenType == #StringFragment] whileTrue:[ 
  9231         |expr|
  9231         |expr|
  9232 
  9232 
       
  9233         self markStringFrom:fragPos to:source position-1.
       
  9234         parenthesisLevel := parenthesisLevel + 1.
       
  9235         self markParenthesisAt:source position.
       
  9236 
  9233         collectedString := collectedString,tokenValue.
  9237         collectedString := collectedString,tokenValue.
  9234         self nextToken.
  9238         self nextToken.
  9235         expr := self expression.
  9239         expr := self expression.
       
  9240         expr == #Error ifTrue:[
       
  9241             self parseError:'error in embedded expression'.
       
  9242         ].
  9236         "/ there must be a closing brace
  9243         "/ there must be a closing brace
  9237         tokenType == $} ifFalse:[
  9244         tokenType == $} ifFalse:[
  9238             self parseError:'"}" expected after embedded expression'.
  9245             self parseError:'"}" expected after embedded expression'.
  9239         ]. 
  9246         ]. 
       
  9247         self markParenthesisAt:tokenPosition.
       
  9248         parenthesisLevel := parenthesisLevel - 1.
       
  9249 
  9240         expressions add:expr.
  9250         expressions add:expr.
  9241         collectedString := collectedString,'%(',expressions size asString,')'.
  9251         collectedString := collectedString,'%(',expressions size asString,')'.
       
  9252         fragPos := source position+1.
  9242         self continueEscapedString.
  9253         self continueEscapedString.
  9243     ].
  9254     ].
  9244     pos2 := tokenPosition.
  9255     pos2 := tokenPosition.
  9245     
  9256     
  9246     tokenType == #String ifFalse:[
  9257     tokenType == #String ifFalse:[
  9247         self parseError:'unterminated embedded expression string'.
  9258         self parseError:'unterminated embedded expression string'.
  9248     ].    
  9259     ].
       
  9260     self markStringFrom:fragPos to:source position-1.
       
  9261 
  9249     collectedString := collectedString,tokenValue.
  9262     collectedString := collectedString,tokenValue.
  9250     self nextToken.
  9263     self nextToken.
  9251 
  9264 
  9252     "/ now make this a message send.
  9265     "/ now make this a message send.
  9253 
  9266