예제 #1
0
        public override void Visit(FormalParamNode node)
        {
            if (node.Id.IdOperations?.Count > 0)
            {
                throw new SemanticException($"Error on line {node.line}: Invalid field or array access on declaration of parameter {node.Id.Id}.");
            }

            if (!(symbolTable.GlobalScope.Symbols.ContainsKey(node.Type) || node.Type == "int" || node.Type == "float" || node.Type == "bool" || node.Type == "string" || node.Type == "void" || node.Type == "int[]" || node.Type == "float[]" || node.Type == "bool[]" || node.Type == "string[]" || symbolTable.GlobalScope.Symbols.ContainsKey(node.Type.Replace("[]", ""))))
            {
                throw new SemanticException($"Error on line {node.line}: Invalid return type {node.Type} declared on {node.Id.Id}.");
            }

            symbolTable.EnterSymbol(node.Id.Id, node);
        }
        public override void Visit(FormalParamNode node)
        {
            //if (node.Type.Contains("[]"))
            if (node.IsArray)
            {
                CSharpString.Append("List<");
            }

            CSharpString.Append(node.Type.Replace("[]", ""));
            // tilføjet et tjek på om det er et struct, hvis det er så tilføjer vi _ efter typen.
            if (!IsPrimitiveType(node.Type.Replace("[]", "")))
            {
                CSharpString.Append("_");
            }
            //if (node.Type.Contains("[]"))
            if (node.IsArray)
            {
                CSharpString.Append("> ");
            }
            CSharpString.Append(" ");
            node.Id.Accept(this);
        }
예제 #3
0
 internal abstract void Visit(FormalParamNode node);
예제 #4
0
 public override void Visit(FormalParamNode node)
 {
     Console.Write(node.Type + " ");
     node.Id.Accept(this);
 }
예제 #5
0
 public abstract void Visit(FormalParamNode node);