public TreeNode Visit(GMacFrameSubspace subspace) { var node = new TreeNode("<SUBSPACE> " + subspace.ObjectName) { Tag = subspace }; return(node); }
public void Visit(GMacFrameSubspace subspace) { var node = new TreeNode(subspace.SymbolAccessName) { Tag = subspace }; RoleNodes[FrameSubspacesNode].Nodes.Add(node); }
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); }
internal static AstFrameSubspace ToAstFrameSubspace(this GMacFrameSubspace subspace) { return(new AstFrameSubspace(subspace)); }
internal AstFrameSubspace(GMacFrameSubspace subspace) { AssociatedSubspace = subspace; }