Exemplo n.º 1
0
  def repr_wrapped( self, ht_selfid2Name, lCpctRepr):
   assert( 0==len( self.lParams))

   stack= self.consWrapped
   ht= dict()

   ht[ id( stack)] = 'stack'

   walker= ConsSimple( stackGetCodeListCurrentEvalTokenList( stack),
    stackGetCodeListParent2EvalToken( stack))

   xNr= 0
   while not id( nil) == id( walker):
    walker_car= walker.car()
    ht[ id( walker_car)]= ConsRepr( ConsSimple( walker_car.car(), 'sclp2et_'+ str( xNr- 1))).repr_wrapped() # baustelle: hack
    #ht[ id( walker_car)]= ConsRepr( ConsSimple( walker_car.car(), 'consesNth0( stackGetCodeListParent2EvalToken, '+ str( xNr- 1)+ ')')).repr_wrapped() # baustelle: hack
    walker= walker.cdr()
    xNr += 1

   codeCurrentLeafList= stackGetCodeCurrentLeafList( self.consWrapped)
   
   ht[ id( consesDistanceSeek( codeCurrentLeafList))] = 'codeList' # sollte i.codeList entsprechen

   codeCurrentLeafListRepr= ConsRepr( codeCurrentLeafList).repr_wrapped( None, [CpctReprCodeListShort4Stack, CpctReprHTselfID2NameCreate( ht), CpctReprConsesRest]) # 28ddde667ab3463080f3b16faa5a48b3 baustelle 

   return 'stackShort( ' + codeCurrentLeafListRepr + ')'
Exemplo n.º 2
0
  def repr_wrapped( self, ht_selfid2Name, lCpctRepr):
   assert( 0==len( self.lParams))

   stack= self.consWrapped
   ht= dict()

   ht[ id( stack)] = 'stack'

   walker= ConsSimple( stackGetCodeListCurrentEvalTokenList( stack), # e584963f104a4fb19b326b4ddd2721d6
    stackGetCodeListParent2EvalToken( stack))

   xNr= 0
   while not id( nil) == id( walker): # e584963f104a4fb19b326b4ddd2721d6
    walker_car= walker.car()
    ht[ id( walker_car)]= ConsRepr( ConsSimple( walker_car.car(), 'sclp2et_'+ str( xNr- 1))).repr_wrapped() # baustelle: hack 53de4cb72e4647409c28cab4b29a5f92
    #ht[ id( walker_car)]= ConsRepr( ConsSimple( walker_car.car(), 'consesNth0( stackGetCodeListParent2EvalToken, '+ str( xNr- 1)+ ')')).repr_wrapped() # baustelle: hack
    walker= walker.cdr()
    xNr += 1

   codeCurrentLeafList= stackGetCodeCurrentLeafList( self.consWrapped)
   
   ht[ id( consesDistanceSeek( codeCurrentLeafList))] = 'codeList' # sollte i.codeList entsprechen

   codeCurrentLeafListRepr= ConsRepr( codeCurrentLeafList).repr_wrapped( None, [CpctReprCodeListConfigMake, CpctReprHTselfID2NameCreate( ht), CpctReprConsesRest]) # 28ddde667ab3463080f3b16faa5a48b3 baustelle 

   return 'stackMake( codeListCurrentEvalTokenList, codeListParent2EvalToken, ' + codeCurrentLeafListRepr + ')'
Exemplo n.º 3
0
 def macroBufFeed( self, l, outer= True): 

  ensure( l, [Cons])

  if outer:
   if isinstance( l.cdr(), Cons):
    if isinstance( l.cdr().car(), Cons):
     ensureConsType( l.cdr().car(), ar_codeList) # baustelle: ggf. uebertestet
     ensureConsType( l.cdr().car().cdr().car(), ar_codeListConfig) # baustelle: ggf. uebertestet
     pass

  uNames.next( usRename( ConsSimple, 'cs'))
  uNames.next( usRename( Symbol, 's'))

  c= l
  r= nil # reverse

  while not id( nil) == id( c):
   r= ConsSimple( c.car(), r)
   c= c.cdr()

  self.macroBufAdd( False, Symbol( ')'))

  while not id( nil) == id( r):
   value= r.car()
   if isinstance( value, Cons) and typeSymbolChk( value.car(), ar_codeList): # f69eef8ad76e459da16194dcdd0c73c6
    codeListEnsure( value) # b73fcfe5b4de4df6946ee586d8f79713
    self.macroBufFeed( codeListGetParameterValues( value), outer= False) # 2849da4969b146bc88315f20fd205e06 baustelle0: hier wird das Environment verworfen
   else: 
    self.macroBufAdd( False, value)
   r= r.cdr()

  self.macroBufAdd( outer, Symbol( '(')) # 64005373aae94f3a9314d303d5f4016e

  uNames.undo()
  uNames.undo()
Exemplo n.º 4
0
class Interpreter:

 def __init__( self):

  self.debug= False

  selfInterpreter= self

  self.readbuf= ConsSimple( nil, nil)
  self.macroBuf= nil
  self.env_globals= Environment()
  env_locals= self.env_globals.newChild()
  self.env_quotationMode_globals= Environment()
  env_quotationMode_locals= self.env_quotationMode_globals.newChild()

  codeListConfig= codeListConfigMake( env_locals, False, env_quotationMode_locals) # 27f019a4b85c45ec9dbab2a59306eccc
  self.codeList= codeListMake( codeListConfig, codeListParametersMake( nil)) # ehemals 76ff812ddb0f47f5be9ca34925a4a3b6
  del codeListConfig

  codeListGetParameters( self.codeList).cdr( ConsSimple( Symbol( 'progn-root'), nil))
  self.codeListCurrentEvalTokenList= codeListGetParameterValuesCdrContainer2( self.codeList).cdr()

  self.codeListParent2EvalToken= nil

  self.codeCurrentLeafList= ConsSimple( self.codeList, nil) # 2bb546ca3ffd48bc851d17494f5c286f

  codeListEnsure( self.codeList)

  assert( ar_codeListConfig==self.getCurrentCodeListConfig().car())
  self.codeLeafBackTree= ConsSimple( self.codeCurrentLeafList, nil) # 2bb546ca3ffd48bc851d17494f5c286f

  self.codeLevel= 0

  self.essentials_macro_function= Essentials()
  
  #for i in ( pl_q1, pl_q2, pl_ql, pl_pyprint, pl_pyprintconses, pl_pyprintconsesRest, pl_pyprintStack, pl_eval, pl_qswap2):
  # i.setEssentials( self.essentials_macro_function)

 
  self.interpreterSymbolTable= InterpreterSymbolTable( self)
  ist= self.interpreterSymbolTable

  for k in 'pyprint pyprintconses pyprintconsesRest pyprintStack pyprintStack2 pyprintStackShort'.split():
   ist.htInterpreterSymbolTableNames[ k].setEssentials( self.essentials_macro_function)
  del k

  for k in ist.htInterpreterSymbolTable:
   v= ist.htInterpreterSymbolTable[ k]
   self.env_globals.set( k, v)
  del k, v
  
  del ist

 def getCurrentLeaf( self):
  return self.codeCurrentLeafList.car()

 def getCurrentCodeListConfig( self, currentLeaf= None): # baustelle1 : name seit Parameter currentLeaf unpassend, 96c8d565e4f946c38838d30756ce5c0d
  if id( None) == id( currentLeaf):
   currentLeaf= self.getCurrentLeaf()
  assert( id( ar_codeList)== id( currentLeaf.car()))
  return currentLeaf.cdr().car()

 def getEnvLocals( self):
  return codeListConfigGet( self.getCurrentCodeListConfig(), s_environment)

 def getEnvQuotationModeLocals( self):
  return codeListConfigGet( self.getCurrentCodeListConfig(), s_environment_quotationMode)

 def quotationModeIsActivated( self):
  return codeListConfigGet( self.getCurrentCodeListConfig(), s_macroLevel) # b391d502688f40e38126ac0f8881e895, cf83b621ff51441298093b7e55dcfc1a

 def quotationModeActivate( self):
  codeListConfig= self.getCurrentCodeListConfig() # baustelle weiter optimierbar
  assert( False == codeListConfigGet( codeListConfig, s_macroLevel)) # cf83b621ff51441298093b7e55dcfc1a
  codeListConfigSet( codeListConfig, s_macroLevel, True) # cf83b621ff51441298093b7e55dcfc1a

 def quotationModeDeActivate( self, codeListConfig= None): # 96c8d565e4f946c38838d30756ce5c0d
  if id( None) == id( codeListConfig):
   codeListConfig= self.getCurrentCodeListConfig() # baustelle weiter optimierbar
  assert( True == codeListConfigGet( codeListConfig, s_macroLevel)) # cf83b621ff51441298093b7e55dcfc1a
  codeListConfigSet( codeListConfig, s_macroLevel, False) # cf83b621ff51441298093b7e55dcfc1a

 def currentEvalTokenIsInExecutePosition( self):
  if nil == self.codeListParent2EvalToken:
   return False
  codeList= self.codeListParent2EvalToken.car().cdr().car()
  codeListEnsure( codeList)
  return id( codeListGetParameterValues( codeList)) == id( self.codeListCurrentEvalTokenList.cdr()) # ehemals 76ff812ddb0f47f5be9ca34925a4a3b6

 def readTokenRawInput( self):
  return raw_input()

 readTokenNothingFound= Symbol( 'readTokenNothingFound')

 def readToken( self):

  ret= self.readTokenNothingFound

  if id( nil)==id( self.readbuf.cdr()):
   rodString= self.readTokenRawInput()
   
   walkerCdr= self.readbuf
   for i in range( 0, len( rodString)):
    walkerCdr.cdr( ConsSimple( Symbol( rodString[ i]), nil))
    walkerCdr= walkerCdr.cdr()

   del walkerCdr
   del rodString

  while not id( nil) == id( self.readbuf.cdr()) and self.readbuf.cdr().car() in whitespace: # cb0b78e10b2642518a4be06499144918 
   self.readbuf= self.readbuf.cdr()

  if not id( nil) == id( self.readbuf.cdr()):
   if self.readbuf.cdr().car() in [ Symbol( '('), Symbol( ')')]: # d5f0b2975f864ba1823b3e2774699cc8
    ret= self.readbuf.cdr().car()
    self.readbuf= self.readbuf.cdr()
   else:
    ret = self.readbuf.cdr().car()
    self.readbuf= self.readbuf.cdr() # 14be901c62904a49970db50824f11287 
    while not id( nil) == id( self.readbuf.cdr()) and not self.readbuf.cdr().car() in whitespace and not self.readbuf.cdr().car() in [ Symbol( '('), Symbol( ')')]: # cb0b78e10b2642518a4be06499144918, d5f0b2975f864ba1823b3e2774699cc8
     ret = Symbol( ret+ self.readbuf.cdr().car()) # baustelle: Hack, derzeit keine + ueberladung fuer Symbol
     self.readbuf= self.readbuf.cdr() # 14be901c62904a49970db50824f11287 

  #if not id( self.readTokenNothingFound) == id( ret):
   # ret= Symbol( ret) # 59cc177458e34abcb943fd4351d93149
  return ret

 def evalToken( self, rodTyped, evalMode= False): # evalMode=True wird bei '(' nur zu beginn gesetzt, ob evaluiert wird, wird von aussen festgelegt

  rodType= rodTyped.car()
  rod= rodTyped.cdr()

  if id( rodType) not in [ id( ar_value), id( ar_retValue), id( ar_retList)]:
   print ConsRepr( rodTyped).repr_wrapped( None, [ CpctReprCodeListConfigMake, CpctReprConses])
   raise Exception()

  if False: # 8337c49584d44686be0bc780cf310dfc
   pass
  elif '(' == rod:
   self.codeLevel+=1
   codeListConfigCloned= codeListConfigClone( self.getCurrentCodeListConfig())
   elem= codeListMake( codeListConfigCloned, codeListParametersMake( nil)) # ehemals 76ff812ddb0f47f5be9ca34925a4a3b6
   self.codeCurrentLeafList= ConsSimple( elem, self.codeCurrentLeafList) # 2bb546ca3ffd48bc851d17494f5c286f
   self.codeLeafBackTree.car( self.codeCurrentLeafList) # 2bb546ca3ffd48bc851d17494f5c286f

   del codeListConfigCloned

   if True == evalMode: # 672b8ecafdae4e218d2268543f27119a
    elemNew= self.codeListCurrentEvalTokenList.cdr()
    elemNew.car( elem)
    elemCurrent= self.codeListCurrentEvalTokenList
   else:
    elemNew= ConsSimple( elem, nil)
    elemCurrent= consesDistanceSeek( self.codeListCurrentEvalTokenList)
    assert( not id( nil) == id( elemCurrent))
    elemCurrent.cdr( elemNew)
   ( elemPrevious, elemCurrent, elemNew, elemParent) = ( elemCurrent, 
     codeListGetParameterValuesCdrContainer( elem) # ehemals 76ff812ddb0f47f5be9ca34925a4a3b6
    , None, elemNew)

   self.codeListParent2EvalToken= ConsSimple( elemPrevious, self.codeListParent2EvalToken)
   self.codeListCurrentEvalTokenList= codeListGetParameterValuesCdrContainer2( elem) # ist das wirklich notwendig? zumindest liefert der Check keinen Fehler (also ist es wenigstens korrekt)

  elif ')' == rod:
   self.codeLevel-=1
   if nil == self.codeListParent2EvalToken:
    raise Exception( 'kann keine klammer mehr schliessen')
   elemParent2= self.codeListParent2EvalToken.car()
   self.codeListParent2EvalToken= self.codeListParent2EvalToken.cdr()
   ( elemCurrent2, elemParent)= ( elemParent2, None)
   self.codeListCurrentEvalTokenList= elemCurrent2
   self.codeCurrentLeafList= self.codeCurrentLeafList.cdr() # 2bb546ca3ffd48bc851d17494f5c286f baustelle: die und die folgende Zeile sind ohne Testfehler austauschbar, pruefen
   self.codeLeafBackTree= ConsSimple( self.codeCurrentLeafList, self.codeLeafBackTree) # 2bb546ca3ffd48bc851d17494f5c286f
  else: # not rod in [ '(', ')']
   elem= rod # 59cc177458e34abcb943fd4351d93149
   if True == evalMode: # 672b8ecafdae4e218d2268543f27119a
    elemNew= self.codeListCurrentEvalTokenList # 7171a8bd3cd641babf4ebcca7394f4c6
    if id( ar_retList) == id( rodType): # 7978cb4bee364b3a8359e2a0f8b7f1f4
     # baustelle0: isinstance( elem, Cons) kann raus, sobald ar_retValue implementiert ist

     wrappedValues= elem

     elemNew.cdr( wrappedValues) # 7171a8bd3cd641babf4ebcca7394f4c6, ehemals 36268f550bcf4fb88d25868f8ea663bf hack

     self.codeListCurrentEvalTokenList= consesDistanceSeek( elemNew, 1, (lambda walker : isinstance( walker, Cons))) # 7171a8bd3cd641babf4ebcca7394f4c6, 80d1ab47171e42ba9bac8c8409b87bee
     #self.codeListCurrentEvalTokenList= consesDistanceSeek( elemNew, 1) # 7171a8bd3cd641babf4ebcca7394f4c6
    elif id( ar_retValue) == id( rodType): # 7978cb4bee364b3a8359e2a0f8b7f1f4
     # baustelle0: isinstance( elem, Cons) kann raus, sobald die restlichen ar_ Symbole implementiert sind
     elemNew.cdr().car( elem)
    elif id( ar_value) == id( rodType): # 7978cb4bee364b3a8359e2a0f8b7f1f4
     # baustelle0: isinstance( elem, Cons) kann raus, sobald die restlichen ar_ Symbole implementiert sind
     elemNew.cdr().car( elem)
    else:
     raise Exception( ConsRepr( rodTyped).repr_wrapped( None, [ CpctReprCodeListConfigMake, CpctReprConses]))
   else: # False == evalMode
    elemNew= ConsSimple( elem, nil)
    elemCurrent= consesDistanceSeek( self.codeListCurrentEvalTokenList)
    elemCurrent.cdr( elemNew)
    ( elemPrevious, elemCurrent, elemNew) = ( elemCurrent, elemNew, None)
    self.codeListCurrentEvalTokenList= elemPrevious # baustelle ggf. wieder rauswerfen

  return rod
 
 def s_print( self, evol):
  print "out: ", evol

 def macroBufAdd( self, isQuotation, symbol):
  assert( not id( ar_codeListParameters) == id( symbol))
  self.macroBuf= ConsSimple( ConsSimple( isQuotation, symbol), self.macroBuf)

 def macroBufFeed( self, l, outer= True): 

  ensure( l, [Cons])

  if outer:
   if isinstance( l.cdr(), Cons):
    if isinstance( l.cdr().car(), Cons):
     ensureConsType( l.cdr().car(), ar_codeList) # baustelle: ggf. uebertestet
     ensureConsType( l.cdr().car().cdr().car(), ar_codeListConfig) # baustelle: ggf. uebertestet
     pass

  uNames.next( usRename( ConsSimple, 'cs'))
  uNames.next( usRename( Symbol, 's'))

  c= l
  r= nil # reverse

  while not id( nil) == id( c):
   r= ConsSimple( c.car(), r)
   c= c.cdr()

  self.macroBufAdd( False, Symbol( ')'))

  while not id( nil) == id( r):
   value= r.car()
   if isinstance( value, Cons) and typeSymbolChk( value.car(), ar_codeList): # f69eef8ad76e459da16194dcdd0c73c6
    codeListEnsure( value) # b73fcfe5b4de4df6946ee586d8f79713
    self.macroBufFeed( codeListGetParameterValues( value), outer= False) # 2849da4969b146bc88315f20fd205e06 baustelle0: hier wird das Environment verworfen
   else: 
    self.macroBufAdd( False, value)
   r= r.cdr()

  self.macroBufAdd( outer, Symbol( '(')) # 64005373aae94f3a9314d303d5f4016e

  uNames.undo()
  uNames.undo()

 def macroBufFeed_v2( self, l): # macroBufFeed
  if isinstance( l, Cons) and typeSymbolChk( l.car(), ar_codeList): # f69eef8ad76e459da16194dcdd0c73c6
   codeListEnsure( l) # b73fcfe5b4de4df6946ee586d8f79713
   return self.macroBufFeed( codeListGetParameterValues( l)) # 2849da4969b146bc88315f20fd205e06 baustelle0: hier wird das Environment verworfen
  else:
   return self.macroBufAdd( True, l)

 def macroBufRepr( self):
  
  ret= ""

  c= self.macroBuf

  while not id( nil) == id( c):
   ret += ' '+ str( c.car().cdr())
   c= c.cdr()

  return ret

 def evalStep( self, rod):

  if False: # 8337c49584d44686be0bc780cf310dfc
   pass
  elif '(' == rod:
   evol= '('
  elif ')' == rod:
   codeList= self.codeListCurrentEvalTokenList.cdr().car()
   codeListEnsure( codeList)
   codeListTmp= codeListGetParameterValues( codeList)
   executeObject= codeListTmp.car()
   executeParameters= codeListParametersMake( codeListTmp.cdr())

   if id( ar_codeList)== id( executeObject): # baustelle1 : harte fehlerausgabe
    print "self.codeListCurrentEvalTokenList ", ConsRepr( self.codeListCurrentEvalTokenList).repr_wrapped()
    raise Exception( "")

   del codeListTmp

   evol= ')'

   if not self.quotationModeIsActivated():

    codeList= self.codeCurrentLeafList.car()
    assert( id( ar_codeList)== id( codeList.car()))
    codeListConfig= codeList.cdr().car()
    assert( id( ar_codeListConfig)== id( codeListConfig.car()))
    del codeListConfig
    del codeList

    env_locals= self.getEnvLocals()
    if False: # 34c428c5375b49df9b919c610a5a9ce6
     pass
    elif isinstance( executeObject, Macro):
     executeObject.setEnvironment( env_locals)
     executeObject.setParameters( executeParameters)
     execote= executeObject.execute()

     cs= ConsSimple
    
     def tmp0( rest): # c3ee5239baaf4484a61bd525f589ef76
      return codeListMake( codeListConfigMake( env_locals), codeListParametersMake( rest))

     assert( id( ar_retValueFromMacro) == id( execote.car())) # baustelle: ggf. auch ar_retListFromMacro, loesung von 8357c3268e594c2f92afaa3a3af12afb

     execote= execote.cdr()

     self.macroBufFeed_v2( tmp0( consesMake( Symbol( 'eval1'), execote)))

    elif isinstance( executeObject, Quotation):
     executeObject.setEnvironment( env_locals)
     executeObject.setParameters( executeParameters) # 0bea40a420ca4ffa9140051cf20b778f
     execote= executeObject.execute()
     self.evalToken( execote, True)
    elif isinstance( executeObject, Function):
     executeObject.setEnvironment( env_locals) # 0bea40a420ca4ffa9140051cf20b778f
     executeObject.setParameters( executeParameters)
     execote= executeObject.execute()
     #print ConsRepr( execote).repr_wrapped( None, [ CpctReprCodeListConfigMake, CpctReprConses])
     self.evalToken( execote, True)
    else:
     print "typ nicht erwartet %s " % executeObject
     raise Exception( "") # baustelle1 ersetzt erstmal richtige Fehlermeldung

   else: # self.quotationModeIsActivated() 8191d96c8d9c4e31b9726088c66c7d67
    pass
    # baustelle0: executeObject ist von der semantischen Bedeutung her doppelt belegt

  else: # not rod in [ '(', ')']

   if not self.quotationModeIsActivated():
    
    if noo == rod: # baustelle0 : so nicht - 

     if None==self.codeListCurrentEvalTokenList:
      raise Exception()
     self.codeListCurrentEvalTokenList.cdr( nil)

    else:
     env_locals= self.getEnvLocals()
     if env_locals.has_key( rod):
      got= env_locals.get( rod) # baustelle1: noch zu unterscheiden: Value oder Symbol-Macro / Quotation
      self.evalToken( ConsSimple( ar_value, got), True) # baustelle1: in Funktion X001 auslagern, auch fuer den Listen-Fall | rod kann im aktuellen fall sogar eine Liste enthalten, die nicht in Einzelteilen an evalToken gefuettert werden muss, 7978cb4bee364b3a8359e2a0f8b7f1f4
      if self.currentEvalTokenIsInExecutePosition():
       if isinstance( got, Quotation) or isinstance( got, Macro): # 34c428c5375b49df9b919c610a5a9ce6
        self.quotationModeActivate()
     else:
      print "not found %s" % ConsRepr( rod).repr_wrapped( None, [ CpctReprCodeListConfigMake, CpctReprConses])
      raise Exception()
       
   else: # self.quotationModeIsActivated() 8191d96c8d9c4e31b9726088c66c7d67

    """ behandlung bezueglich uqset1 """
    if self.getEnvQuotationModeLocals().has_key( rod): # baustelle0 executeObject fuer diesen Fall umbenennen
     self.quotationModeDeActivate()
     env_quotationMode_locals= self.getEnvQuotationModeLocals().get( rod)
     del rod
     if self.currentEvalTokenIsInExecutePosition():
      self.codeListCurrentEvalTokenList.cdr().car( self.getEnvLocals().get( Symbol( 'progn'))) # ddfdc08cdef344b7bcd44d4e093d12ab, erweiterbar, siehe ideen.txt, 96c8d565e4f946c38838d30756ce5c0d
      parentCodeListConfig= self.getCurrentCodeListConfig( self.codeCurrentLeafList.cdr().car())
      self.quotationModeDeActivate( parentCodeListConfig)
     else:
      self.codeListCurrentEvalTokenList.cdr().car( nil) # ddfdc08cdef344b7bcd44d4e093d12ab, erweiterbar, siehe ideen.txt
     codeListConfig= self.getCurrentCodeListConfig()
     codeListConfigSet( codeListConfig, s_environment, env_quotationMode_locals)
     del env_quotationMode_locals
     del codeListConfig

    pass

   #evol= self.codeListCurrentEvalTokenList.cdr().car()
   evol= None # momentan bedeutungslos

  return evol

 def replStep( self):
  
  if not nil == self.macroBuf:
   macroBufElem= self.macroBuf.car()
   isQuotation= macroBufElem.car()
   rod= macroBufElem.cdr()
   del macroBufElem
   self.macroBuf= self.macroBuf.cdr()
  else:
   rod=self.readToken() # 59cc177458e34abcb943fd4351d93149
   isQuotation= False # entspricht der Abarbeitung der Quotation ( True p1 False p2 False ... ) False

  if not id( self.readTokenNothingFound) == id( rod):
   self.evalToken( ConsSimple( ar_value, rod), isQuotation) # evol == rod (aktuell, wird auch bis auf weiteres so bleiben), 7978cb4bee364b3a8359e2a0f8b7f1f4

   evol= self.evalStep( rod)

   self.s_print( evol)

 def repl( self):

  try:
   while True:
    self.replStep()
  except ExceptionQuit:
   pass
Exemplo n.º 5
0
 def evalToken( self, rodTyped, evalMode= False): # evalMode=True wird bei '(' nur zu beginn gesetzt, ob evaluiert wird, wird von aussen festgelegt

  rodType= rodTyped.car()
  rod= rodTyped.cdr()

  if id( rodType) not in [ id( ar_value), id( ar_retValue), id( ar_retList)]:
   print ConsRepr( rodTyped).repr_wrapped( None, [ CpctReprCodeListConfigMake, CpctReprConses])
   raise Exception()

  if False: # 8337c49584d44686be0bc780cf310dfc
   pass
  elif '(' == rod:
   self.codeLevel+=1
   codeListConfigCloned= codeListConfigClone( self.getCurrentCodeListConfig())
   elem= codeListMake( codeListConfigCloned, codeListParametersMake( nil)) # ehemals 76ff812ddb0f47f5be9ca34925a4a3b6
   self.codeCurrentLeafList= ConsSimple( elem, self.codeCurrentLeafList) # 2bb546ca3ffd48bc851d17494f5c286f
   self.codeLeafBackTree.car( self.codeCurrentLeafList) # 2bb546ca3ffd48bc851d17494f5c286f

   del codeListConfigCloned

   if True == evalMode: # 672b8ecafdae4e218d2268543f27119a
    elemNew= self.codeListCurrentEvalTokenList.cdr()
    elemNew.car( elem)
    elemCurrent= self.codeListCurrentEvalTokenList
   else:
    elemNew= ConsSimple( elem, nil)
    elemCurrent= consesDistanceSeek( self.codeListCurrentEvalTokenList)
    assert( not id( nil) == id( elemCurrent))
    elemCurrent.cdr( elemNew)
   ( elemPrevious, elemCurrent, elemNew, elemParent) = ( elemCurrent, 
     codeListGetParameterValuesCdrContainer( elem) # ehemals 76ff812ddb0f47f5be9ca34925a4a3b6
    , None, elemNew)

   self.codeListParent2EvalToken= ConsSimple( elemPrevious, self.codeListParent2EvalToken)
   self.codeListCurrentEvalTokenList= codeListGetParameterValuesCdrContainer2( elem) # ist das wirklich notwendig? zumindest liefert der Check keinen Fehler (also ist es wenigstens korrekt)

  elif ')' == rod:
   self.codeLevel-=1
   if nil == self.codeListParent2EvalToken:
    raise Exception( 'kann keine klammer mehr schliessen')
   elemParent2= self.codeListParent2EvalToken.car()
   self.codeListParent2EvalToken= self.codeListParent2EvalToken.cdr()
   ( elemCurrent2, elemParent)= ( elemParent2, None)
   self.codeListCurrentEvalTokenList= elemCurrent2
   self.codeCurrentLeafList= self.codeCurrentLeafList.cdr() # 2bb546ca3ffd48bc851d17494f5c286f baustelle: die und die folgende Zeile sind ohne Testfehler austauschbar, pruefen
   self.codeLeafBackTree= ConsSimple( self.codeCurrentLeafList, self.codeLeafBackTree) # 2bb546ca3ffd48bc851d17494f5c286f
  else: # not rod in [ '(', ')']
   elem= rod # 59cc177458e34abcb943fd4351d93149
   if True == evalMode: # 672b8ecafdae4e218d2268543f27119a
    elemNew= self.codeListCurrentEvalTokenList # 7171a8bd3cd641babf4ebcca7394f4c6
    if id( ar_retList) == id( rodType): # 7978cb4bee364b3a8359e2a0f8b7f1f4
     # baustelle0: isinstance( elem, Cons) kann raus, sobald ar_retValue implementiert ist

     wrappedValues= elem

     elemNew.cdr( wrappedValues) # 7171a8bd3cd641babf4ebcca7394f4c6, ehemals 36268f550bcf4fb88d25868f8ea663bf hack

     self.codeListCurrentEvalTokenList= consesDistanceSeek( elemNew, 1, (lambda walker : isinstance( walker, Cons))) # 7171a8bd3cd641babf4ebcca7394f4c6, 80d1ab47171e42ba9bac8c8409b87bee
     #self.codeListCurrentEvalTokenList= consesDistanceSeek( elemNew, 1) # 7171a8bd3cd641babf4ebcca7394f4c6
    elif id( ar_retValue) == id( rodType): # 7978cb4bee364b3a8359e2a0f8b7f1f4
     # baustelle0: isinstance( elem, Cons) kann raus, sobald die restlichen ar_ Symbole implementiert sind
     elemNew.cdr().car( elem)
    elif id( ar_value) == id( rodType): # 7978cb4bee364b3a8359e2a0f8b7f1f4
     # baustelle0: isinstance( elem, Cons) kann raus, sobald die restlichen ar_ Symbole implementiert sind
     elemNew.cdr().car( elem)
    else:
     raise Exception( ConsRepr( rodTyped).repr_wrapped( None, [ CpctReprCodeListConfigMake, CpctReprConses]))
   else: # False == evalMode
    elemNew= ConsSimple( elem, nil)
    elemCurrent= consesDistanceSeek( self.codeListCurrentEvalTokenList)
    elemCurrent.cdr( elemNew)
    ( elemPrevious, elemCurrent, elemNew) = ( elemCurrent, elemNew, None)
    self.codeListCurrentEvalTokenList= elemPrevious # baustelle ggf. wieder rauswerfen

  return rod