feat(tpc): 新增单目 * / & 运算符(Deref/AddrOf)AST 节点与 LLVM 翻译
This commit is contained in:
1 parent
d6150bd595
commit
0230385891
7 files changed
+67
-7
No files matched your search
@@ -138,6 +138,8 @@ class OpKind(t.CEnum):
|
||||
UAdd: t.State
|
||||
USub: t.State
|
||||
Invert: t.State
|
||||
Deref: t.State
|
||||
AddrOf: t.State
|
||||
# None
|
||||
NoneOp: t.State
|
||||
|
||||
@@ -355,6 +357,8 @@ def _op_name(op: t.CInt) -> str:
|
||||
if op == OpKind.UAdd: return "UAdd"
|
||||
if op == OpKind.USub: return "USub"
|
||||
if op == OpKind.Invert: return "Invert"
|
||||
if op == OpKind.Deref: return "Deref"
|
||||
if op == OpKind.AddrOf: return "AddrOf"
|
||||
return "NoneOp"
|
||||
|
||||
|
||||
|
||||
@@ -771,8 +771,9 @@ def _parse_term(ps: Parser | t.CPtr) -> AST | t.CPtr:
|
||||
|
||||
|
||||
def _parse_factor(ps: Parser | t.CPtr) -> AST | t.CPtr:
|
||||
"""factor: '+' factor | '-' factor | '~' factor | power"""
|
||||
if _match_op(ps, TokOp.Plus) or _match_op(ps, TokOp.Minus) or _match_op(ps, TokOp.Tilde):
|
||||
"""factor: '+' factor | '-' factor | '~' factor | '*' factor | '&' factor | power"""
|
||||
if (_match_op(ps, TokOp.Plus) or _match_op(ps, TokOp.Minus) or _match_op(ps, TokOp.Tilde)
|
||||
or _match_op(ps, TokOp.Star) or _match_op(ps, TokOp.Amp)):
|
||||
op_token: t.CInt = _cur_op(ps)
|
||||
lineno: t.CInt = _cur_lineno(ps)
|
||||
col: t.CInt = _cur_col(ps)
|
||||
@@ -783,6 +784,10 @@ def _parse_factor(ps: Parser | t.CPtr) -> AST | t.CPtr:
|
||||
ast_op = OpKind.USub
|
||||
elif op_token == TokOp.Tilde:
|
||||
ast_op = OpKind.Invert
|
||||
elif op_token == TokOp.Star:
|
||||
ast_op = OpKind.Deref
|
||||
elif op_token == TokOp.Amp:
|
||||
ast_op = OpKind.AddrOf
|
||||
node: AST | t.CPtr = UnaryOp(ps.pool, ast_op, operand)
|
||||
_set_pos(node, lineno, col, 0, 0)
|
||||
return node
|
||||
|
||||
Reference in new issue
Block a user