Writing a Context-Free-Grammar using Backus Naur Form for a for-loop?
I've usually seen it expressed as something like:

forExpression ::= for ( &lt;declExpression&gt; &lt;expression&gt;; &lt;expression&gt; ) &lt;blockStatement&gt;

blockStatement ::= &lt;statement&gt; |  { &lt;statementlist&gt; }

statement ::= &lt;declExpression&gt; | &lt;forExpression&gt; | &lt;ifExpression&gt; | ...


&lt;declExpression&gt; includes the semi colon 

You want to be very careful of the details like where you define where things like the semi colon are required, 

In your &lt;number&gt; you don't have any priorities set up, there is also no option for parenthesis, ... 

Creating a good CFG is hard which is why so many languages start out as a dialect of C and just take that grammar and adapt it.