| 1 | # Is this Yaks? Well there is no CST / S-expression layer?
|
| 2 | #
|
| 3 | # Or should we call this "Pea" or "Tea"?
|
| 4 |
|
| 5 | module mycpp
|
| 6 | {
|
| 7 | # Should these be Python types, or C++ types?
|
| 8 | #
|
| 9 | # Python: mops.BigInt, C++ mops::BigInt
|
| 10 | # Python: float, C++: double
|
| 11 |
|
| 12 | mtype = Foo()
|
| 13 |
|
| 14 | yaks_type =
|
| 15 | NoneType # -> None
|
| 16 | | NoReturn # -> NoReturn
|
| 17 |
|
| 18 | # Are we using typing.IO?
|
| 19 | | IOError_OSError # Special thing for exceptions?
|
| 20 |
|
| 21 | # Builtin types
|
| 22 | # MyPy Float is C++ double
|
| 23 | | Bool | Int | Float | Str
|
| 24 |
|
| 25 | # e.g. state::Mem, mops::BigInt
|
| 26 | | Class(List[str] mod_parts, str name)
|
| 27 | | Callable(List[yaks_type] args, yaks_type return_) # Callable[[float, float], float]
|
| 28 |
|
| 29 | # Parameterized types
|
| 30 |
|
| 31 | | Dict_(yaks_type k, yaks_type v) # Dict[K, V]
|
| 32 | | List_(yaks_type t) # List[T]
|
| 33 | | Iterator(yaks_type t) # Iterator[T]
|
| 34 |
|
| 35 | # Will be turns into Tuple2, Tuple3, Tuple4<A, B, C, D>
|
| 36 | | Tuple(List[yaks_type] children)
|
| 37 | | Optional(yaks_type child) # Optional[T]
|
| 38 |
|
| 39 | | Alias(yaks_type child)
|
| 40 |
|
| 41 |
|
| 42 | # Using names that are like MyPy
|
| 43 | # Compare with Python.asdl, which has Num(object n) and Str(string s)
|
| 44 |
|
| 45 | # This is the language we accept
|
| 46 |
|
| 47 | yaks_expr =
|
| 48 | BoolExpr(bool value)
|
| 49 | | IntExpr(int value) # constant expression can't be big?
|
| 50 | | FloatExpr(float value)
|
| 51 | | StrExpr(str value)
|
| 52 | # Disambiguate . and -> and ::
|
| 53 | | MemberExpr()
|
| 54 | | CallExpr()
|
| 55 |
|
| 56 | | Cast()
|
| 57 |
|
| 58 | yaks_stmt =
|
| 59 | PassStmt()
|
| 60 |
|
| 61 | # Should this just be a function call?
|
| 62 | # Well there is also Yield
|
| 63 | # But yeah we don't translate it, so it might be good to clamp down on it?
|
| 64 |
|
| 65 | # log()
|
| 66 | # probe()
|
| 67 |
|
| 68 | | ExpressionStmt()
|
| 69 |
|
| 70 | # This could be translated first? del mylist[:]
|
| 71 | | DelStmt()
|
| 72 | | RaiseStmt()
|
| 73 |
|
| 74 | # Python assignment, no separation between var and setvar
|
| 75 | # we remove __all__
|
| 76 | # we also have d = NewDict()
|
| 77 | # a = [x for x in other]
|
| 78 | | AssignmentStmt()
|
| 79 |
|
| 80 | # remove if __name__
|
| 81 | # top level is STATIC
|
| 82 | | IfStmt()
|
| 83 |
|
| 84 | # xrange()
|
| 85 | # reversed()
|
| 86 | # enumerate()
|
| 87 | # iteritems()
|
| 88 | # tuple unpacking
|
| 89 | # over dict, and over list
|
| 90 | | ForStmt()
|
| 91 | | WhileStmt()
|
| 92 |
|
| 93 | # When there are zero args
|
| 94 | | Break
|
| 95 | | Continue
|
| 96 | | Return(yaks_expr val)
|
| 97 |
|
| 98 | # context manager
|
| 99 | # 3 kinds of switches
|
| 100 | | WithStmt()
|
| 101 |
|
| 102 | | TryStmt()
|
| 103 |
|
| 104 | # Constructor __init__
|
| 105 | # __exit__
|
| 106 | # method
|
| 107 | # free function
|
| 108 | | FuncDef(str name)
|
| 109 |
|
| 110 | | ClassDef(str name)
|
| 111 |
|
| 112 | | ImportFrom()
|
| 113 |
|
| 114 | # TODO: revive this, at least for Python
|
| 115 | # attributes (int lineno, int col_offset)
|
| 116 |
|
| 117 | yaks_file = (str name, List[yaks_stmt] defs)
|
| 118 | }
|
| 119 |
|
| 120 | # vim: sw=2
|
| 121 |
|