// <logo-move-command> ::= MOVETO <integer> , <integer> private BaseLogoCommand ParseLogoMoveToCommand() { Match(Token.MOVETO); Match(Token.NUMBER); var numberXRecord = new NumberRecord(Token.MOVETO, scanner.ScanBuffer); Match(Token.COMMA); Match(Token.NUMBER); var numberYRecord = new NumberRecord(Token.MOVETO, scanner.ScanBuffer); return(new LogoPositionCommand(numberXRecord, numberYRecord)); }
// <logo-repeat-command> ::= REPEAT <integer> [ <logo-sentence> { <logo-sentence> } ] private BaseLogoCommand ParseLogoRepeatCommand() { Match(Token.REPEAT); Match(Token.NUMBER); var repeatNumberRecord = new NumberRecord(Token.REPEAT, scanner.ScanBuffer); Match(Token.LBRACKET); var logoCommands = new Collection <BaseLogoCommand>(); ParseLogoSentences(logoCommands); Match(Token.RBRACKET); return(new LogoRepeatCommand(repeatNumberRecord, logoCommands)); }
// <logo-direction-command> ::= FORWARD <integer> // | BACK <integer> // | LEFT <integer> // | RIGHT <integer> private BaseLogoCommand ParseLogoDirectionCommand(Token nextToken) { BaseLogoCommand result; Match(nextToken); Match(Token.NUMBER); var numberRecord = new NumberRecord(nextToken, scanner.ScanBuffer); if (nextToken == Token.FORWARD || nextToken == Token.BACK) { result = new LogoMoveCommand(numberRecord); } else { result = new LogoTurnCommand(numberRecord); } return(result); }
public LogoTurnCommand(NumberRecord numberRecord) { TurnAngle = numberRecord.Number; }
public LogoMoveCommand(NumberRecord numberRecord) { Distance = numberRecord.Number; }
public LogoRepeatCommand(NumberRecord repeatNumber, IEnumerable <BaseLogoCommand> logoCommands) { Repeat = repeatNumber.Number; commands.AddRange(logoCommands); }