<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      EP01代碼解析

      #######################################
      # CONSTANTS
      #######################################
      
      DIGITS = '0123456789'
      
      #######################################
      # ERRORS
      #######################################
      
      class Error:
          def __init__(self, pos_start, pos_end, error_name, details):
              self.pos_start = pos_start
              self.pos_end = pos_end
              self.error_name = error_name
              self.details = details
          
          def as_string(self):
              result  = f'{self.error_name}: {self.details}\n'
              result += f'File {self.pos_start.fn}, line {self.pos_start.ln + 1}'
              return result
      
      class IllegalCharError(Error):
          def __init__(self, pos_start, pos_end, details):
              super().__init__(pos_start, pos_end, 'Illegal Character', details)
      
      #######################################
      # POSITION
      #######################################
      
      class Position:
          def __init__(self, idx, ln, col, fn, ftxt):
              self.idx = idx
              self.ln = ln
              self.col = col
              self.fn = fn
              self.ftxt = ftxt
      
          def advance(self, current_char):
              self.idx += 1
              self.col += 1
      
              if current_char == '\n':
                  self.ln += 1
                  self.col = 0
      
              return self
      
          def copy(self):
              return Position(self.idx, self.ln, self.col, self.fn, self.ftxt)
      
      #######################################
      # TOKENS
      #######################################
      
      TT_INT		= 'INT'
      TT_FLOAT    = 'FLOAT'
      TT_PLUS     = 'PLUS'
      TT_MINUS    = 'MINUS'
      TT_MUL      = 'MUL'
      TT_DIV      = 'DIV'
      TT_LPAREN   = 'LPAREN'
      TT_RPAREN   = 'RPAREN'
      
      class Token:
          def __init__(self, type_, value=None):
              self.type = type_
              self.value = value
          
          def __repr__(self):
              if self.value: return f'{self.type}:{self.value}'
              return f'{self.type}'
      
      #######################################
      # LEXER
      #######################################
      
      class Lexer:
          def __init__(self, fn, text):
              self.fn = fn
              self.text = text
              self.pos = Position(-1, 0, -1, fn, text)
              self.current_char = None
              self.advance()
          
          def advance(self):
              self.pos.advance(self.current_char)
              self.current_char = self.text[self.pos.idx] if self.pos.idx < len(self.text) else None
      
          def make_tokens(self):
              tokens = []
      
              while self.current_char != None:
                  if self.current_char in ' \t':
                      self.advance()
                  elif self.current_char in DIGITS:
                      tokens.append(self.make_number())
                  elif self.current_char == '+':
                      tokens.append(Token(TT_PLUS))
                      self.advance()
                  elif self.current_char == '-':
                      tokens.append(Token(TT_MINUS))
                      self.advance()
                  elif self.current_char == '*':
                      tokens.append(Token(TT_MUL))
                      self.advance()
                  elif self.current_char == '/':
                      tokens.append(Token(TT_DIV))
                      self.advance()
                  elif self.current_char == '(':
                      tokens.append(Token(TT_LPAREN))
                      self.advance()
                  elif self.current_char == ')':
                      tokens.append(Token(TT_RPAREN))
                      self.advance()
                  else:
                      pos_start = self.pos.copy()
                      char = self.current_char
                      self.advance()
                      return [], IllegalCharError(pos_start, self.pos, "'" + char + "'")
      
              return tokens, None
      
          def make_number(self):
              num_str = ''
              dot_count = 0
      
              while self.current_char != None and self.current_char in DIGITS + '.':
                  if self.current_char == '.':
                      if dot_count == 1: break
                      dot_count += 1
                      num_str += '.'
                  else:
                      num_str += self.current_char
                  self.advance()
      
              if dot_count == 0:
                  return Token(TT_INT, int(num_str))
              else:
                  return Token(TT_FLOAT, float(num_str))
      
      #######################################
      # RUN
      #######################################
      
      def run(fn, text):
          lexer = Lexer(fn, text)
          tokens, error = lexer.make_tokens()
      
          return tokens, error
      
      posted @ 2024-09-07 00:52  eva1024  閱讀(30)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 大香j蕉75久久精品免费8| 特级做a爰片毛片免费看无码| 韩国福利视频一区二区三区| 成人一区二区不卡国产| 亚洲av午夜成人片| 99久久精品国产一区二区暴力| 久久国产精品成人影院| 偷拍美女厕所尿尿嘘嘘小便| 中国农村真卖bbwbbw| 无码人妻一区二区三区AV| av无码精品一区二区三区四区 | 欧美牲交a欧美牲交aⅴ免费真| 国产偷国产偷亚洲高清人| 亚洲国产精品久久久天堂麻豆宅男 | 亚洲人成网站18禁止无码| 野花香视频在线观看免费高清版 | 日本一区二区三本视频在线观看| 亚洲爆乳少妇无码激情| 夹江县| 精品无码国产污污污免费| 亚洲欧美人成人综合在线播放| 双腿张开被5个男人调教电影| 亚洲人成人影院在线观看| 日本污视频在线观看| 国产亚洲精品日韩av在| 中文字幕无码av不卡一区| 久久午夜无码免费| 四房播色综合久久婷婷| 久久久精品国产精品久久| 国产精品自拍中文字幕| 精品国产日韩亚洲一区| 日本一本无道码日韩精品| 国产在线观看播放av| 亚洲成AV人片在线观高清| 色噜噜在线视频免费观看| 玩弄漂亮少妇高潮白浆| 国产一区二区在线有码| 吉川爱美一区二区三区视频| 日日噜噜噜夜夜爽爽狠狠视频| 久热这里有精品视频播放| 不卡视频在线一区二区三区|