예제 #1
0
파일: ExprVisitor.cs 프로젝트: jzhang919/P
        public override IPExpr VisitRvalue(PParser.RvalueContext context)
        {
            // If it's just an expr, then there's no special handling
            if (context.linear == null)
            {
                return(Visit(context.expr()));
            }

            // In the linear case, it must be a local variable or parameter
            var varName = context.iden().GetText();

            if (!table.Lookup(varName, out Variable variable))
            {
                throw handler.MissingDeclaration(context.iden(), "variable", varName);
            }

            return(context.linear.Text.Equals("move")
                ? new LinearAccessRefExpr(context, variable, LinearType.Move)
                : new LinearAccessRefExpr(context, variable, LinearType.Swap));
        }
예제 #2
0
 public override IPExpr VisitRvalue(PParser.RvalueContext context)
 {
     return(Visit(context.expr()));
 }