public TreeNode Visit(GMacFrameSubspace subspace)
        {
            var node = new TreeNode("<SUBSPACE> " + subspace.ObjectName)
            {
                Tag = subspace
            };

            return(node);
        }
Example #2
0
        public void Visit(GMacFrameSubspace subspace)
        {
            var node = new TreeNode(subspace.SymbolAccessName)
            {
                Tag = subspace
            };

            RoleNodes[FrameSubspacesNode].Nodes.Add(node);
        }
Example #3
0
        public void Visit(GMacFrameSubspace subspace)
        {
            Log.AppendAtNewLine("subspace ");
            Log.Append(subspace.ObjectName);
            Log.Append(" = @");

            Log.Append(
                Generate_StringList(
                    subspace
                    .SubspaceSignaturePattern
                    .TrueIndexes
                    .Select(id => subspace.ParentFrame.BasisBladeName(id))
                    )
                );

            Log.Append("@");

            Log.AppendAtNewLine();
        }
        private ILanguageExpression translate_Expression_Function_Subspace(GMacFrameSubspace subspace, ILanguageExpressionAtomic defaultValueSource, ParseTreeNode node)
        {
            var operands = OperandsByIndex.Create();

            if (node.ChildNodes.Count <= 0)
            {
                return
                    (ReferenceEquals(defaultValueSource, null)
                    ? subspace.ParentFrame.MultivectorType.CreateConstructorExpression(operands)
                    : subspace.ParentFrame.MultivectorType.CreateConstructorExpression(defaultValueSource, operands));
            }

            var expressionFunctionInputsNode = node.ChildNodes[0];

            var subNode = expressionFunctionInputsNode.ChildNodes[0];

            switch (subNode.Term.ToString())
            {
            //case GMacParseNodeNames.ExpressionFunctionInputsAssignments:
            //    var expressionFunctionInputsAssignmentsNode = subNode;

            //    foreach (var nodeExpressionFunctionInputsAssignmentsItem in expressionFunctionInputsAssignmentsNode.ChildNodes)
            //    {
            //        var lhsNode = nodeExpressionFunctionInputsAssignmentsItem.ChildNodes[0].ChildNodes[0];
            //        var rhsNode = nodeExpressionFunctionInputsAssignmentsItem.ChildNodes[1];

            //        if (lhsNode.Term.Name == GMacParseNodeNames.BasisBladeCoefficient)
            //        {
            //            var basisBladeId = translate_BasisBladeCoefficient(subspace.ParentFrame.MultivectorType, lhsNode);

            //            var rhsExpr =
            //                BasicExpressionGenerator.Generate_PolyadicOperand(
            //                    GMacRootAst.ScalarType,
            //                    GMacExpressionGenerator.Translate(BasicExpressionGenerator, rhsNode)
            //                    );

            //            operands.AddOperand(basisBladeId, rhsExpr);
            //        }
            //        else
            //            return CompilationLog.RaiseGeneratorError<ILanguageExpression>("Expecting a list of basis blade assignments as input to the multivector construction", node);
            //    }

            //    break;

            case GMacParseNodeNames.ExpressionFunctionInputsExpressions:
                var expressionFunctionInputsExpressionsNode = subNode;

                var i = 0;

                foreach (var basisBladeId in subspace.SubspaceSignaturePattern.TrueIndexes)
                {
                    if (i >= expressionFunctionInputsExpressionsNode.ChildNodes.Count)
                    {
                        break;
                    }

                    var rhsNode = expressionFunctionInputsExpressionsNode.ChildNodes[i];

                    var rhsExpr =
                        BasicExpressionGenerator.Generate_PolyadicOperand(
                            GMacRootAst.ScalarType,
                            GMacExpressionGenerator.Translate(BasicExpressionGenerator, rhsNode)
                            );

                    operands.AddOperand(basisBladeId, rhsExpr);

                    i = i + 1;
                }

                if (expressionFunctionInputsExpressionsNode.ChildNodes.Count > i)
                {
                    return(CompilationLog.RaiseGeneratorError <ILanguageExpression>("Expecting a list of at most " + i + " expression as input to the multivector subspace construction", node));
                }

                break;

            default:
                return(CompilationLog.RaiseGeneratorError <ILanguageExpression>("Expecting a list of expressions as input to the multivector subspace construction", node));
            }

            return
                (ReferenceEquals(defaultValueSource, null)
                ? subspace.ParentFrame.MultivectorType.CreateConstructorExpression(operands)
                : subspace.ParentFrame.MultivectorType.CreateConstructorExpression(defaultValueSource, operands));
        }
 private void AddBasisBladeIDs(GMacFrameSubspace subspace)
 {
     _generatedBooleanPattern.OrWith(subspace.SubspaceSignaturePattern);
 }
Example #6
0
 internal static AstFrameSubspace ToAstFrameSubspace(this GMacFrameSubspace subspace)
 {
     return(new AstFrameSubspace(subspace));
 }
Example #7
0
 internal AstFrameSubspace(GMacFrameSubspace subspace)
 {
     AssociatedSubspace = subspace;
 }