private IComponent ParseComponentLabel(SimpleCircuitLexer lexer, Circuit ckt) { var component = GetComponent(ParseName(lexer), ckt); if (lexer.Is(TokenType.OpenBracket, "(")) { lexer.Next(); var label = ParseLabel(lexer); if (component is ILabeled lbl) { lbl.Label = label; } lexer.Check(TokenType.CloseBracket, ")"); } return(component); }
private PinDescription ParsePin(SimpleCircuitLexer lexer, Circuit ckt) { var result = new PinDescription(); result.ComponentName = lexer.Content; result.Component = ParseComponentLabel(lexer, ckt); if (lexer.Is(TokenType.OpenBracket, "[")) { lexer.Next(); var pin = ParseName(lexer); lexer.Check(TokenType.CloseBracket, "]"); result.AfterName = pin; result.After = (TranslatingPin)result.Component.Pins[pin]; } return(result); }
private void ParseEquation(SimpleCircuitLexer lexer, Circuit ckt) { if (!lexer.Is(TokenType.Dash)) { throw new ParseException($"A dash was expected", lexer.Line, lexer.Position); } lexer.Next(); // Add the first equation var a = ParseSum(lexer, ckt); lexer.Check(TokenType.Equals); var b = ParseSum(lexer, ckt); if (a is Function fa && b is Function fb) { ckt.Add(fa - fb, $"keep {fa} and {fb} equal"); }
private PinDescription ParseDoublePin(SimpleCircuitLexer lexer, Circuit ckt) { string beforePin = null; if (lexer.Is(TokenType.OpenBracket, "[")) { lexer.Next(); beforePin = ParseName(lexer); lexer.Check(TokenType.CloseBracket, "]"); } var result = ParsePin(lexer, ckt); if (beforePin != null) { result.BeforeName = beforePin; result.Before = (TranslatingPin)result.Component.Pins[beforePin]; } return(result); }
private List <WireDescription> ParseWire(SimpleCircuitLexer lexer) { var wires = new List <WireDescription>(); lexer.Check(TokenType.OpenBracket, "<"); do { var direction = ParseDirection(lexer); wires.Add(new WireDescription { Direction = direction, Length = -1.0 }); if (lexer.Is(TokenType.Number)) { wires[wires.Count - 1].Length = double.Parse(lexer.Content, System.Globalization.CultureInfo.InvariantCulture); lexer.Next(); } }while (!lexer.Is(TokenType.CloseBracket, ">")); lexer.Next(); return(wires); }