private Definition CreateSelf(IEntity node) { ObjectType o = node as ObjectType; if (o != null) { TypeAssignment syn = o.Syntax as TypeAssignment; if (syn != null && _types.ContainsKey(syn.Value)) { o.Syntax = _types[syn.Value]; } } /* algorithm 2: slower, dropped * IDefinition parent = Find(node.Parent); * if (parent == null) * { * return null; * } * * return ((Definition)parent).Add(node); * // */ // * algorithm 1 return(_root.Add(node)); // */ }
private static IConstruct ParseOthers(string module, IList <Symbol> header, Lexer lexer, ref IList <Symbol> next) { Symbol current = lexer.NextNonEOLSymbol; if (current == Symbol.Sequence) { return(new Sequence(module, header[0].ToString(), lexer)); } if (current == Symbol.Choice) { return(new Choice(module, header[0].ToString(), lexer)); } if (current == Symbol.Integer) { return(new IntegerType(module, header[0].ToString(), lexer)); } if (current == Symbol.TextualConvention) { return(new TextualConvention(module, header[0].ToString(), lexer)); } TypeAssignment result = new TypeAssignment(module, header[0].ToString(), current, lexer); next.Add(result.Left); return(result); }
private static ITypeAssignment ParseSyntax(IEnumerator <Symbol> enumerator, ref Symbol temp) { ITypeAssignment syntax; temp.Expect(Symbol.Syntax); temp = enumerator.NextNonEOLSymbol(); if (temp == Symbol.Bits) { syntax = new BitsType(string.Empty, string.Empty, enumerator); temp = enumerator.NextNonEOLSymbol(); } else if (temp == Symbol.Integer || temp == Symbol.Integer32) { syntax = new IntegerType(string.Empty, string.Empty, enumerator, ref temp); } else if (temp == Symbol.Octet) { temp = enumerator.NextNonEOLSymbol(); temp.Expect(Symbol.String); syntax = new OctetStringType(string.Empty, string.Empty, enumerator, ref temp); } else if (temp == Symbol.Opaque) { syntax = new OctetStringType(string.Empty, string.Empty, enumerator, ref temp); } else if (temp == Symbol.IpAddress) { syntax = new IpAddressType(string.Empty, string.Empty, enumerator); temp = enumerator.NextNonEOLSymbol(); } else if (temp == Symbol.Counter64) { syntax = new Counter64Type(string.Empty, string.Empty, enumerator); temp = enumerator.NextNonEOLSymbol(); } else if (temp == Symbol.Unsigned32 || temp == Symbol.Counter32 || temp == Symbol.Gauge32 || temp == Symbol.TimeTicks) { syntax = new UnsignedType(string.Empty, string.Empty, enumerator, ref temp); } else if (temp == Symbol.Object) { temp = enumerator.NextNonEOLSymbol(); temp.Expect(Symbol.Identifier); syntax = new ObjectIdentifierType(string.Empty, string.Empty, enumerator); temp = enumerator.NextNonEOLSymbol(); } else if (temp == Symbol.Sequence) { temp = enumerator.NextNonEOLSymbol(); if (temp == Symbol.Of) { temp = enumerator.NextNonEOLSymbol(); syntax = new TypeAssignment(string.Empty, string.Empty, enumerator, ref temp); } else { syntax = new Sequence(string.Empty, string.Empty, enumerator); temp = enumerator.NextNonEOLSymbol(); } } else { syntax = new TypeAssignment(string.Empty, string.Empty, enumerator, ref temp); } return(syntax); }