EV3GBasic language definition - first draft

[Action]
Display.Circle Clear_Screen:Boolean, X:Single, Y:Single, Radius:Single, Fill:Boolean, Invert_Color:InvertColor
Display.Clear
Display.File Filename:String, Clear_Screen:Boolean, X:Single, Y:Single
Display.Line Clear_Screen:Boolean, X1:Single, Y1:Single, X2:Single, Y2:Single, Invert_Color:InvertColor
Display.Point Clear_Screen:Boolean, X:Single, Y:Single, Invert_Color:InvertColor
Display.Rectangle Clear_Screen:Boolean, X:Single, Y:Single, Width:Single, Height:Single, Fill:Boolean, Invert_Color:InvertColor
Display.String Text:String, Clear_Screen:Boolean, X:Single, Y:Single, Invert_Color:InvertColor, Size:Single
Display.StringGrid Text:String, Clear_Screen:Boolean, Column:Single, Row:Single, Invert_Color:InvertColor, Size:Single
LED.Off
LED.On Color:LEDColor, Pulse:Boolean
LED.Reset
MediumMotor.Degrees MotorPort:OneOutputPort, Speed:Single, Degrees:Single, Brake_At_End:BrakeAtEnd
MediumMotor.Rotations MotorPort:OneOutputPort, Speed:Single, Rotations:Single, Brake_At_End:BrakeAtEnd
MediumMotor.Stop MotorPort:OneOutputPort, Brake_At_End:BrakeAtEnd
MediumMotor.Time MotorPort:OneOutputPort, Speed:Single, Seconds:Single, Brake_At_End:BrakeAtEnd
MediumMotor.Unlimited MotorPort:OneOutputPort, Speed:Single
Motor.Degrees MotorPort:OneOutputPort, Speed:Single, Degrees:Single, Brake_At_End:BrakeAtEnd
Motor.Rotations MotorPort:OneOutputPort, Speed:Single, Rotations:Single, Brake_At_End:BrakeAtEnd
Motor.Stop MotorPort:OneOutputPort, Brake_At_End:BrakeAtEnd
Motor.Time MotorPort:OneOutputPort, Speed:Single, Seconds:Single, Brake_At_End:BrakeAtEnd
Motor.Unlimited MotorPort:OneOutputPort, Speed:Single
Move.Degrees Ports:TwoOutputPorts, Steering:Single, Speed:Single, Degrees:Single, Brake_At_End:BrakeAtEnd
Move.Rotations Ports:TwoOutputPorts, Steering:Single, Speed:Single, Rotations:Single, Brake_At_End:BrakeAtEnd
Move.Stop Ports:TwoOutputPorts, Brake_At_End:BrakeAtEnd
MoveTank.Degrees Ports:TwoOutputPorts, Speed_Left:Single, Speed_Right:Single, Degrees:Single, Brake_At_End:BrakeAtEnd
MoveTank.Rotations Ports:TwoOutputPorts, Speed_Left:Single, Speed_Right:Single, Rotations:Single, Brake_At_End:BrakeAtEnd
MoveTank.Unlimited Ports:TwoOutputPorts, Speed_Left:Single, Speed_Right:Single
MoveTank.Stop Ports:TwoOutputPorts, Brake_At_End:BrakeAtEnd
MoveTank.Time Ports:TwoOutputPorts, Speed_Left:Single, Speed_Right:Single, Seconds:Single, Brake_At_End:BrakeAtEnd
Move.Time Ports:TwoOutputPorts, Steering:Single, Speed:Single, Seconds:Single, Brake_At_End:BrakeAtEnd
Move.Unlimited Ports:TwoOutputPorts, Steering:Single, Speed:Single
Sound.Note Note:String, Duration:Single, Volume:Single, Play_Type:PlayType
Sound.RecordedFile
Sound.File Name:String, Volume:Single, Play_Type:PlayType
Sound.Stop
Sound.Tone Frequency:Single, Duration:Single, Volume:Single, Play_Type:PlayType

[FlowControl]
WaitFor([Block with Result])                                   // wait for result to become true, all output paramaters are skipped
Switch([Block with Result])                                    // branching all output paramaters are skipped
    Case [value]                                               // condition value below switch statement, first case block is the default
Loop([Block with Result]) Loopname:String, LoopIndex:Single    // loop until result is true, result output paramater is skipped

CaseSelector.Boolean Boolean:Boolean, Result:Boolean
CaseSelector.Numeric Number:Int32, Result:Int32
CaseSelector.String String:String, Result:String
LoopIndex Loop_Index:Single
LoopCondition.Count Iterations_To_Run:Int32, Result:Boolean
LoopCondition.Boolean Do_Stop:Boolean, Result:Boolean
LoopCondition.Unlimited Result:Boolean
Wait.Timer How_Long:Single, Result:Boolean
LoopCondition.Time How_Long:Single, Result:Boolean
Interrupt InterruptName:String
StartBlock
StartBlock

[Sensor]
UltrasonicSensor.Centimeters Port:OneInputPort, Measuring_Mode:MeasuringMode, Distance:Single
UltrasonicSensor.Inches Port:OneInputPort, Measuring_Mode:MeasuringMode, DistanceInches:Single
BrickButton.ChangeBrickButton Value:OutputBrickButtonID, Result:Boolean
BrickButton.Compare Buttons:OutputBrickButtonID, Action:TouchState, Result:Boolean, Value:OutputBrickButtonID
BrickButton.Measure Value:OutputBrickButtonID
ColorSensor.MeasureAmbientLight Port:OneInputPort, Value:Single
ColorSensor.ChangeAmbientLight Port:OneInputPort, Direction:WaitForChange, Amount:Single, Value:Single, Result:Boolean
ColorSensor.CompareAmbientLight Port:OneInputPort, Comparison:ComparisonType, Threshold:Single, Result:Boolean, Value:Single
ColorSensor.CalibrateResetColor
ColorSensor.CalibrateMaxColor CalibrateValueMax:Single
ColorSensor.CalibrateMinColor CalibrateValueMin:Single
ColorSensor.ChangeColor Port:OneInputPort, Color:Color, Result:Boolean
ColorSensor.CompareColor Port:OneInputPort, Set_of_colors:Color, Result:Boolean, Color:Color
ColorSensor.MeasureReflectedLight Port:OneInputPort, Value:Single
ColorSensor.ChangeReflectedLight Port:OneInputPort, Direction:WaitForChange, Amount:Single, Value:Single, Result:Boolean
ColorSensor.CompareReflectedLight Port:OneInputPort, Comparison:ComparisonType, Threshold:Single, Result:Boolean, Value:Single
ColorSensor.MeasureColor Port:OneInputPort, Color:Color
UltrasonicSensor.ChangeDistanceCm Port:OneInputPort, Direction:WaitForChange, Change:Single, Result:Boolean, Distance:Single
UltrasonicSensor.ChangeDistanceInch Port:OneInputPort, Direction:WaitForChange, Change:Single, Result:Boolean, DistanceInches:Single
Gyro.ChangeAngle Port:OneInputPort, Direction:WaitForChange, Change:Single, Result:Boolean, Angle:Single
Gyro.ChangeRate Port:OneInputPort, Direction:WaitForChange, Change:Single, Result:Boolean, Rate:Single
SoundSensor.ChangedB Port:OneInputPort, Direction:WaitForChange, Change:Single, Result:Boolean, Value:Single
SoundSensor.ChangedBa Port:OneInputPort, Direction:WaitForChange, Change:Single, Result:Boolean, ValuedBa:Single
UltrasonicSensor.MeasureCentimeters Port:OneInputPort, Distance:Single
UltrasonicSensor.CompareCentimeters Port:OneInputPort, Comparison:ComparisonType, Threshold:Single, Result:Boolean, Distance:Single
UltrasonicSensor.MeasureInches Port:OneInputPort, DistanceInches:Single
UltrasonicSensor.CompareInches Port:OneInputPort, Comparison:ComparisonType, Threshold:Single, Result:Boolean, DistanceInches:Single
UltrasonicSensor.MeasurePresence Port:OneInputPort, Heard:Boolean
UltrasonicSensor.ComparePresence Port:OneInputPort, Heard:Boolean
EnergyMeter.ChangeInCurrent Port:OneInputPort, Direction:WaitForChange, AmountCurr:Single, Result:Boolean, Current:Single
EnergyMeter.ChangeInVoltage Port:OneInputPort, Direction:WaitForChange, AmountVolt:Single, Result:Boolean, Volts:Single
EnergyMeter.ChangeInWatt Port:OneInputPort, AmountWatt:Single, Direction:WaitForChange, Watts:Single, Result:Boolean
EnergyMeter.ChangeJoule Port:OneInputPort, Direction:WaitForChange, Amount:Single, Result:Boolean, Joule:Single
EnergyMeter.ChangeOutCurrent Port:OneInputPort, Direction:WaitForChange, AmountCurr:Single, Result:Boolean, Current:Single
EnergyMeter.ChangeOutVoltage Port:OneInputPort, Direction:WaitForChange, AmountVolt:Single, Result:Boolean, Volts:Single
EnergyMeter.ChangeOutWatt Port:OneInputPort, Direction:WaitForChange, AmountWatt:Single, Result:Boolean, Watts:Single
EnergyMeter.CompareInCurrent Port:OneInputPort, Comparison:ComparisonType, ThresholdCurr:Single, Result:Boolean, Current:Single
EnergyMeter.CompareInVoltage Port:OneInputPort, Comparison:ComparisonType, ThresholdVolt:Single, Result:Boolean, Volts:Single
EnergyMeter.CompareInWatt Port:OneInputPort, Comparison:ComparisonType, ThresholdWatt:Single, Result:Boolean, Watts:Single
EnergyMeter.CompareOutJoule Port:OneInputPort, Comparison:ComparisonType, ThresholdJoule:Single, Result:Boolean, Joule:Single
EnergyMeter.CompareOutCurrent Port:OneInputPort, ComparisonOut:ComparisonType, ThresholdCurr:Single, Result:Boolean, Current:Single
EnergyMeter.CompareOutVoltage Port:OneInputPort, ComparisonOut:ComparisonType, ThresholdVolt:Single, Result:Boolean, Volts:Single
EnergyMeter.CompareOutWatt Port:OneInputPort, ComparisonOut:ComparisonType, ThresholdWatt:Single, Result:Boolean, Watts:Single
EnergyMeter.MeasureInCurrent Port:OneInputPort, Current:Single
EnergyMeter.MeasureInVoltage Port:OneInputPort, Volts:Single
EnergyMeter.MeasureInWatts Port:OneInputPort, Watts:Single
EnergyMeter.MeasureJoule Port:OneInputPort, Joule:Single
EnergyMeter.MeasureOutCurrent Port:OneInputPort, Current:Single
EnergyMeter.MeasureOutVoltage Port:OneInputPort, Volts:Single
EnergyMeter.MeasureOutWatts Port:OneInputPort, Watts:Single
Gyro.MeasureAngleAndRate Port:OneInputPort, Angle:Single, Rate:Single
Gyro.CompareAngle Port:OneInputPort, Comparison:ComparisonType, Threshold:Single, Result:Boolean, Angle:Single
Gyro.MeasureAngle Port:OneInputPort, Angle:Single
Gyro.MeasureRate Port:OneInputPort, Rate:Single
Gyro.CompareRate Port:OneInputPort, Comparison:ComparisonType, Threshold:Single, Result:Boolean, Rate:Single
Gyro.Reset Port:OneInputPort
InfraredSensor.MeasureProximity Port:OneInputPort, Proximity:Single
InfraredSensor.ChangeProximity Port:OneInputPort, Direction:WaitForChange, Amount:Single, Proximity:Single, Result:Boolean
InfraredSensor.CompareProximity Port:OneInputPort, Comparison:ComparisonType, Threshold:Single, Result:Boolean, Proximity:Single
InfraredSensor.MeasureBeaconRemote Port:OneInputPort, Channel:SetOfChannels, Button:OutputButtonID
InfraredSensor.ChangeRemote Port:OneInputPort, Channel:SetOfChannels, Result:Boolean, Button:OutputButtonID
InfraredSensor.CompareRemote Port:OneInputPort, Channel:SetOfChannels, Set_of_remote_button_IDs:OutputButtonID, Result:Boolean, Button:OutputButtonID
InfraredSensor.MeasureBeaconSeeker Port:OneInputPort, Channel:SetOfChannels, Heading:Single, Proximity:Single, Valid:Boolean
InfraredSensor.MeasureBeaconSeekerDataloggingHeading Port:OneInputPort, Heading:Single
InfraredSensor.MeasureBeaconSeekerDataloggingProximity Port:OneInputPort, Proximity:Single
InfraredSensor.ChangeHeading Port:OneInputPort, Channel:SetOfChannels, Direction:WaitForChange, HeadingAmount:Single, Result:Boolean, Heading:Single
InfraredSensor.ChangeBeaconProximity Port:OneInputPort, Channel:SetOfChannels, Direction:WaitForChange, Amount:Single, Proximity:Single, Result:Boolean
InfraredSensor.CompareBeaconSeekerHeading Port:OneInputPort, Channel:SetOfChannels, Comparison:ComparisonType, HeadingThreshold:Single, Result:Boolean, Heading:Single
InfraredSensor.CompareBeaconSeekerProximity Port:OneInputPort, Channel:SetOfChannels, Comparison:ComparisonType, Threshold:Single, Result:Boolean, Proximity:Single
RotationSensor.ChangeSpeed MotorPort:OneOutputPort, Direction:WaitForChange, Amount:Single, Speed:Single, Result:Boolean
RotationSensor.CompareCurrentSpeed MotorPort:OneOutputPort, Comparison:ComparisonType, ThresholdSpeed:Single, Result:Boolean, Speed:Single
RotationSensor.MeasureCurrentSpeed MotorPort:OneOutputPort, Speed:Single
HWPageManualOutput
HWPageManualInput
RotationSensor.ChangeDegrees MotorPort:OneOutputPort, Direction:WaitForChange, Amount:Single, Degrees:Single, Result:Boolean
RotationSensor.CompareDegrees MotorPort:OneOutputPort, Comparison:ComparisonType, ThresholdDegrees:Single, Result:Boolean, Degrees:Single
RotationSensor.Reset MotorPort:OneOutputPort
RotationSensor.ChangeRotation MotorPort:OneOutputPort, Direction:WaitForChange, AmountRotations:Single, Rotations:Single, Result:Boolean
RotationSensor.CompareRotation MotorPort:OneOutputPort, Comparison:ComparisonType, ThresholdRotations:Single, Result:Boolean, Rotations:Single
RotationSensor.MeasureDegrees MotorPort:OneOutputPort, Degrees:Single
RotationSensor.MeasureRotation MotorPort:OneOutputPort, Rotations:Single
TemperatureSensor.ChangeCelsius Port:OneInputPort, Direction:WaitForChange, AmountC:Single, Result:Boolean, Celsius:Single
TemperatureSensor.ChangeFahrenheit Port:OneInputPort, Direction:WaitForChange, Amount:Single, Result:Boolean, Fahrenheit:Single
TemperatureSensor.CompareCelsius Port:OneInputPort, Comparison:ComparisonType, ThresholdC:Single, Result:Boolean, Celsius:Single
TemperatureSensor.CompareFahrenheit Port:OneInputPort, Comparison:ComparisonType, ThresholdF:Single, Result:Boolean, Fahrenheit:Single
TemperatureSensor.MeasureCelsius Port:OneInputPort, Celsius:Single
TemperatureSensor.MeasureFahrenheit Port:OneInputPort, Fahrenheit:Single
Timer.ChangeTime Timer:Single, Amount:Single, Timer_Value:Single, Result:Boolean
Timer.CompareTime Timer:Single, Comparison:ComparisonType, Threshold:Single, Result:Boolean, Timer_Value:Single
Timer.Reset Timer:Single
Timer.MeasureTime Timer:Single, Timer_Value:Single
TouchSensor.ChangeState Port:OneInputPort, Result:Boolean, State:Boolean
TouchSensor.Compare Port:OneInputPort, Pressed__Released_or_Bumped:TouchState, Result:Boolean, Value:Single
TouchSensor.Measure Port:OneInputPort, State:Boolean
SoundSensor.comparedB Port:OneInputPort, Comparison:ComparisonType, Threshold_Value:Single, Result:Boolean, Value:Single
SoundSensor.comparedBa Port:OneInputPort, Comparison:ComparisonType, Threshold_Value:Single, Result:Boolean, ValuedBa:Single
SoundSensor.measuredB Port:OneInputPort, Value:Single
SoundSensor.measuredBa Port:OneInputPort, ValuedBa:Single

[DataOperations]
Math.AbsoluteValue X:Single, Result:Single
Math.Add X:Single, Y:Single, Result:Single
Math.Divide X:Single, Y:Single, Result:Single
Math.Multiply X:Single, Y:Single, Result:Single
Math.Exponent Base:Single, Exponent:Single, Result:Single
Math.SquareRoot X:Single, Result:Single
Math.Subtract X:Single, Y:Single, Result:Single
ArrayOperations.Append_Numeric arrayInNumeric:Single[], valueIn:Single, arrayOutNumeric:Single[]
ArrayOperations.Append_Boolean arrayInBoolean:Boolean[], valueIn:Boolean, arrayOutBoolean:Boolean[]
ArrayOperations.Length_Numeric arrayInNumeric:Single[], Size:Single
ArrayOperations.Length_Boolean arrayInBoolean:Boolean[], Size:Single
ArrayOperations.ReadAtIndex_Numeric arrayInNumeric:Single[], Index:Single, valueOut:Single
ArrayOperations.ReadAtIndex_Boolean arrayInBoolean:Boolean[], Index:Single, valueOut:Boolean
ArrayOperations.WriteAtIndex_Numeric arrayInNumeric:Single[], Index:Single, valueIn:Single, arrayOutNumeric:Single[]
ArrayOperations.WriteAtIndex_Boolean arrayInBoolean:Boolean[], Index:Single, valueIn:Boolean, arrayOutBoolean:Boolean[]
BooleanOperations.And A:Boolean, B:Boolean, Result:Boolean
BooleanOperations.Not A:Boolean, Result:Boolean
BooleanOperations.Or A:Boolean, B:Boolean, Result:Boolean
BooleanOperations.XOR A:Boolean, B:Boolean, Result:Boolean
Compare.Equal x:Single, y:Single, Result:Boolean
Compare.GreaterThan x:Single, y:Single, Result:Boolean
Compare.GreaterOrEqual x:Single, y:Single, Result:Boolean
Compare.LessThan x:Single, y:Single, Result:Boolean
Compare.LessOrEqual x:Single, y:Single, Result:Boolean
Compare.NotEqual x:Single, y:Single, Result:Boolean
Text.Merge A:String, B:String, C:String, Result:String
Range.Inside Test_Value:Single, Lower_Bound:Single, Upper_Bound:Single, Result:Boolean
Range.Outside Test_Value:Single, Lower_Bound:Single, Upper_Bound:Single, Result:Boolean
Random.Boolean Percent_True:Single, Result:Boolean
Random.Numeric Lower:Single, Upper:Single, Number:Single
Round.Down Input:Single, Output_Result:Single
Round.Nearest Input:Single, Output_Result:Single
Round.Truncate Input:Single, Number_of_Decimals:Single, Output_Result:Single
Round.Up Input:Single, Output_Result:Single
Constant.Boolean valueIn:Boolean, valueOut:Boolean
Constant.BooleanArray valueIn:Boolean[], valueOut:Boolean[]
Constant.NumericArray valueIn:Single[], valueOut:Single[]
Constant.Numeric valueIn:Single, valueOut:Single
Constant.Text valueIn:String, valueOut:String
Variable.ReadBoolean name:String, valueOut:Boolean
Variable.ReadBooleanArray name:String, valueOut:Boolean[]
Variable.ReadNumericArray name:String, valueOut:Single[]
Variable.ReadNumeric name:String, valueOut:Single
Variable.ReadText name:String, valueOut:String
Variable.WriteBoolean name:String, valueIn:Boolean
Variable.WriteBooleanArray name:String, valueIn:Boolean[]
Variable.WriteNumericArray name:String, valueIn:Single[]
Variable.WriteNumeric name:String, valueIn:Single
Variable.WriteText name:String, valueIn:String
Math.Advanced X:Single, Y:Single, C:Single, D:Single, Equation:String, Result:Single

[Advanced]
Bluetooth.Clear Connect_To:String
Bluetooth.Initiate Connect_To:String
Bluetooth.Off
Bluetooth.On
CommentBlock Comment:String
CommentBox Comment:String
FileAccess.Close FileName:String
FileAccess.Delete FileName:String
FileAccess.Numeric FileName:String, Numeric:Single
FileAccess.Text FileName:String, Text:String
FileAccess.Write FileName:String, TextIn:String
InvertMotor MotorPort:OneOutputPort, Invert:Boolean
KeepAlive Time_until_sleep_(ms):Single
Messaging.ChangeBooleanValue Message_Title:String, Result:Boolean, ReceivedMessage:Boolean
Messaging.ChangeNumericValue Message_Title:String, Direction:WaitForChange, Change:Single, Result:Boolean, ReceivedMessage:Single
Messaging.ChangeTextValue Message_Title:String, Result:Boolean, ReceivedMessage:String
Messaging.CompareBoolean Message_Title:String, Result:Boolean, ReceivedMessage:Boolean
Messaging.CompareNumeric Message_Title:String, Comparison:ComparisonType, Threshold:Single, Result:Boolean, ReceivedMessage:Single
Messaging.CompareText Message_Title:String, Comparison2:ComparisonType2, ComparisonText:String, Result:Boolean, ReceivedMessage:String
Messaging.ChangeBooleanUpdate Message_Title:String, Result:Boolean, ReceivedMessage:Boolean
Messaging.ChangeNumericUpdate Message_Title:String, Result:Boolean, ReceivedMessage:Single
Messaging.ChangeTextUpdate Message_Title:String, Result:Boolean, ReceivedMessage:String
UnregulatedMotor MotorPort:OneOutputPort, Power:Single
RawSensorValue Port_Number:Single, Raw_Value:Single
Messaging.ReceiveText Message_Title:String, ReceivedMessage:String
Messaging.ReceiveBoolean Message_Title:String, ReceivedMessage:Boolean
Messaging.ReceiveNumeric Message_Title:String, ReceivedMessage:Single
Messaging.SendText Message_Title:String, Receiving_Brick_Name:String, SentMessage:String
Messaging.SendBoolean Message_Title:String, Receiving_Brick_Name:String, SentMessage:Boolean
Messaging.SendNumeric Message_Title:String, Receiving_Brick_Name:String, SentMessage:Single
StopBlock
Datalogging.OnForTimeSeconds Name:String, Duration:Single, Rate:Single, Rate_Mode:RateUnit
Datalogging.OnForTimeMinute Name:String, Duration:Single, Rate:Single, Rate_Mode:RateUnit
Datalogging.On Name:String, Rate:Single, Rate_Mode:RateUnit
Datalogging.SingleMeasurement Name:String
Datalogging.Stop Name:String

[SpecialNodes]
Fork                                                           // Parallel execution
   ForkItem                                                    // Parallel execution children below Fork
Connector from:$variable to:out $variable                      // Connect datawires over loop and switch boundaries

[Program definition]
Sub ProgramName [parameter:type:defaultvalue:=$variable | out $variable]*

[Type]
Boolean | Single | Boolean[] | Single[] | String 

[Variables/Datawires]
$variable                                    // inbound variable
out $variable                                // outbound variable

[Identification values]
BrakeAtEnd := Brake | Coast
Color := NoColor | Black | Blue | Green | Yellow | Red | White | Brown
ComparisonType := Equal | NotEqual | Greater | GreaterEqual | Less | LessEqual
ComparisonType2 := Equal | NotEqual
InvertColor := White | Black
LEDColor := Green | Orange | Red
LEDPulse := Solid | Flash | Pulse
MeasuringMode := Ping | Continuous
NXTBrickButtons := Button0 | Button1 | Button2 | Button3
OutputBrickButton := Left | Center | Right | Up | Down
OutputBrickButtonID := None | Left | Center | Right | Up | Down
OutputButtonID := Zero | One | Two | Three | Four | Five | Six | Seven | Eight | Nine | Ten | Eleven
PlayType := WaitForCompletion | PlayOnce | Repeat
RateUnit := PerSecond | SecondsBetweenSamples
SetOfChannels := Channel1 | Channel2 | Channel3 | Channel4
TouchState := Released | Pushed | Bumped
WaitForChange := Up | Down | Both
OneInputPort := 1 | 2 | 3 | 4
OneOutputPort := A | B | C | D
TwoOutputPorts := A+B | A+C | A+D | B+A | B+C | B+D | C+A | C+B | C+D | D+A | D+B | D+C