public void Test() { const string test = "SomeIp ::= IpAddress"; 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.IpAddress); IpAddressType i = new IpAddressType("module", "name", lexer); }
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; }