public static ITypeAssignment ParseBasicTypeDef(IModule module, string name, ISymbolEnumerator symbols, bool isMacroSyntax = false) { Symbol current = symbols.NextNonEOLSymbol(); if (current == Symbol.Bits) { return(new BitsType(module, name, symbols)); } if (IntegerType.IsIntegerType(current)) { return(new IntegerType(module, name, current, symbols)); } if (UnsignedType.IsUnsignedType(current)) { return(new UnsignedType(module, name, current, symbols)); } if (current == Symbol.Opaque) { return(new OpaqueType(module, name, symbols)); } if (current == Symbol.IpAddress) { return(new IpAddressType(module, name, symbols)); } if (current == Symbol.TextualConvention) { return(new TextualConvention(module, name, symbols)); } if (current == Symbol.Octet) { Symbol next = symbols.NextNonEOLSymbol(); if (next == Symbol.String) { return(new OctetStringType(module, name, symbols)); } symbols.PutBack(next); } if (current == Symbol.Object) { Symbol next = symbols.NextNonEOLSymbol(); if (next == Symbol.Identifier) { return(new ObjectIdentifierType(module, name, symbols)); } symbols.PutBack(next); } if (current == Symbol.Sequence) { Symbol next = symbols.NextNonEOLSymbol(); if (next == Symbol.Of) { return(new SequenceOf(module, name, symbols)); } else { symbols.PutBack(next); return(new Sequence(module, name, symbols)); } } if (current == Symbol.Choice) { return(new Choice(module, name, symbols)); } return(new TypeAssignment(module, name, current, symbols, isMacroSyntax)); }
private static ITypeAssignment ParseSyntax(string module, string name, 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(module, name, 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); }
private static ITypeAssignment ParseSyntax(string module, string name, 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(module, name, 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; }