コード例 #1
0
def isnumber(compiler, cont, item):
    return cont(
        il.or_(il.Isinstance(item.interlang(), il.Symbol('int')),
               il.Isinstance(item.interlang(), il.Symbol('float'))))
コード例 #2
0
ファイル: terminal.py プロジェクト: hermetique/dao
def identifier(compiler, cont, arg):
  '''underline or letter lead, follow underline, letter or digit'''
  text = compiler.new_var(il.ConstLocalVar('text'))
  pos = compiler.new_var(il.ConstLocalVar('pos'))
  p = compiler.new_var(il.LocalVar('p'))
  length = compiler.new_var(il.ConstLocalVar('length'))
  if isinstance(arg, Var):
    arg = arg.interlang()
    x = compiler.new_var(il.ConstLocalVar('x'))
    return il.Begin((
      il.AssignFromList(text, pos, il.parse_state),
      il.Assign(length, il.Len(text)),
      il.If(il.Ge(pos, length), 
        il.failcont(il.FALSE),
          il.If(il.and_(il.Ne(il.GetItem(text, pos), il.String('_')),
                         il.Not(il.Cle(il.String('a'), il.GetItem(text, pos), il.String('z'))), 
                         il.Not(il.Cle(il.String('A'), il.GetItem(text, pos), il.String('Z')))), 
            il.failcont(il.FALSE),
            il.Begin((
              il.Assign(p, il.add(pos, il.Integer(1))),
              il.while_(il.And(il.Lt(p, length), 
                              il.or_(il.Eq(il.GetItem(text, pos), il.String('_')),
                                    il.Cle(il.String('a'), il.GetItem(text, p), il.String('z')), 
                                    il.Cle(il.String('A'),il.GetItem(text, p),il.String('Z')),
                                    il.Cle(il.String('0'),il.GetItem(text, p),il.String('9')))), 
                       il.AddAssign(p, il.Integer(1))),
              il.Assign(x, il.Deref(arg)),
              il.If(il.IsLogicVar(x),
                    il.begin(il.SetParseState(il.Tuple(text, p)),
                                   il.SetBinding(x, il.GetItem(text, il.Slice2(pos, p))),
                                   il.append_failcont(compiler, 
                                      il.SetParseState(il.Tuple(text, pos)),
                                      il.DelBinding(x)),
                                   cont(il.GetItem(text, pos))),
                    il.If(il.Isinstance(x, il.String('str')),
                          il.If(il.Eq(x, il.GetItem(text, il.Slice2(pos, p))),
                                il.begin(il.append_failcont(compiler, 
                                  il.SetParseState(il.Tuple(text, pos))),
                                  il.SetParseState(il.Tuple(text, p)),
                                  cont(il.GetItem(text, pos))),
                                il.failcont(il.NONE)),
                          il.RaiseTypeError(x)))))))))
  elif isinstance(arg, String):
    arg = arg.interlang()
    return il.Begin((
      il.AssignFromList(text, pos, il.parse_state),
      il.Assign(length, il.Len(text)),
      il.If(il.Ge(pos, length), 
        il.failcont(il.FALSE),
        il.If(il.and_(il.Ne(il.GetItem(text, pos), il.String('_')),
                         il.Not(il.Cle(il.String('a'), il.GetItem(text, pos), il.String('z'))), 
                         il.Not(il.Cle(il.String('A'), il.GetItem(text, pos), il.String('Z')))), 
            il.failcont(il.FALSE),
            il.Begin((
              il.Assign(p, il.add(pos, il.Integer(1))),
              il.while_(il.And(il.Lt(p, length), 
                              il.or_(il.Eq(il.GetItem(text, pos), il.String('_')),
                                    il.Cle(il.String('a'), il.GetItem(text, p), il.String('z')), 
                                    il.Cle(il.String('A'),il.GetItem(text, p),il.String('Z')),
                                    il.Cle(il.String('0'),il.GetItem(text, p),il.String('9')))), 
                       il.AddAssign(p, il.Integer(1))),
              il.If(il.Eq(arg, il.GetItem(text, il.Slice2(pos, p))),
                    il.begin(il.append_failcont(compiler, 
                      il.SetParseState(il.Tuple(text, pos))),
                      il.SetParseState(il.Tuple(text, p)),
                      cont(arg)),
                    il.failcont(il.NONE))))))))
  else:
    raise CompileTypeError(arg)
コード例 #3
0
ファイル: term.py プロジェクト: chaosim/dao
def isnumber(compiler, cont, item): 
  return cont(il.or_(il.Isinstance(item.interlang(), il.Symbol('int')),
                     il.Isinstance(item.interlang(), il.Symbol('float'))))