public void TestEnumerable() { const string test = "SomeEnum ::= INTEGER {first(1), second(2)}"; Lexer lexer = new Lexer(); StringReader reader = new StringReader(test); lexer.Parse(reader); string name = lexer.GetNextSymbol().ToString(); lexer.GetNextSymbol().Expect(Symbol.Assign); lexer.GetNextSymbol().Expect(Symbol.Integer); IntegerType i = new IntegerType("module", "name", lexer); Assert.IsTrue(i.IsEnumeration); Assert.AreEqual("first(1)", i[1]); }
public void TestRanges() { const string test = "SomeEnum ::= INTEGER (8 |10 ..20| 31..60 )"; Lexer lexer = new Lexer(); StringReader reader = new StringReader(test); lexer.Parse(reader); string name = lexer.GetNextSymbol().ToString(); lexer.GetNextSymbol().Expect(Symbol.Assign); lexer.GetNextSymbol().Expect(Symbol.Integer); IntegerType i = new IntegerType("module", "name", lexer); Assert.IsFalse(i.IsEnumeration); Assert.IsTrue(i.Contains(8)); Assert.IsTrue(i.Contains(10)); Assert.IsTrue(i.Contains(15)); Assert.IsTrue(i.Contains(20)); Assert.IsTrue(i.Contains(35)); Assert.IsFalse(i.Contains(4)); Assert.IsFalse(i.Contains(-9)); Assert.IsFalse(i.Contains(25)); Assert.IsFalse(i.Contains(61)); }
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); }
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; }