{"id":10331,"date":"2006-05-09T21:51:00","date_gmt":"2006-05-09T21:51:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/powershell\/2006\/05\/09\/powershell-grammar\/"},"modified":"2019-02-18T13:21:43","modified_gmt":"2019-02-18T20:21:43","slug":"powershell-grammar","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/powershell\/powershell-grammar\/","title":{"rendered":"PowerShell Grammar"},"content":{"rendered":"<p class=\"MsoNormal\"><span>A number of people have asked about the PowerShell grammar.&nbsp; Here is a draft write up (I&#8217;ve also included it as an attachement) that George Xie and Bruce Payette are working on.<\/span><\/p>\n<p class=\"MsoNormal\"><span><\/span>&nbsp;<\/p>\n<p class=\"MsoNormal\"><span>Grammar of PowerShell (formerly known as Monad) &nbsp;is separated into parsing rules and tokenizing rules. Parsing rules in turn can be separated into 4 layers | <\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span>Statement list: this includes statement list and statement blocks. <\/span><\/p>\n<p class=\"MsoNormal\"><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span>Statement: this includes different statements<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>3.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span>Expression: <\/span><\/p>\n<p class=\"MsoNormal\"><span><span>4.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span>Value<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><b><span>1. Statement List<\/span><\/b><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;statementListRule&gt; = &lt;statementRule&gt; [ &lt;statementSeparatorToken&gt; &lt;statementRule&gt; ]*<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span># this is a variation of statement list used mainly in script blocks. <\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;statementBlockRule&gt; = &#8216;{&#8216; &lt;statementListRule&gt; &#8216;}&#8217;<\/span><\/p>\n<p class=\"MsoNormal\"><b><span>&nbsp;<\/span><\/b><\/p>\n<p class=\"MsoNormal\"><b><span>2. Statement<\/span><\/b><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span># an aggregation rule for all statements. <\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;statementRule&gt; = &lt;ifStatementRule&gt; |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;switchStatementRule&gt; |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;foreachStatementRule&gt; |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;forWhileStatementRule&gt; |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;doWhileStatementRule&gt; |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>&lt;functionDeclarationRule&gt; |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;parameterDeclarationRule&gt; |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;flowControlStatementRule&gt; |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;trapStatementRule&gt; |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;finallyStatementRule&gt; |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;pipelineRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><b><span>2.1 Pipeline<\/span><\/b><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span># A pipeline can look like<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>get-childitem -recurse -filter *.cs | sort name<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>2+2 |3 |4 | sort<span>&nbsp; <\/span># sort a literal array in a pipeline&#8230;<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>. profile.msh | count-object<span>&nbsp;&nbsp;&nbsp; <\/span># . source a script<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>&amp; &#8220;c:\\a path\\with spaces.doc&#8221; <span>&nbsp;&nbsp;<\/span># execute a path with spaces in it<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>get-childitem | sort-object &gt; c:\/tmp\/junk.txt<span>&nbsp; <\/span># use i\/o redirection&#8230;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;pipelineRule&gt; = &lt;assignmentStatement&gt; | &lt;firstPipelineElement&gt; [ &#8216;|&#8217; &lt;cmdletCall&gt; ]*<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;assignmentStatementRule&gt; = &lt;lvalueExpression&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>&lt;AssignmentOperatorToken&gt; &lt;pipelineRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;lvalueExpression&gt; := &lt;lvalue&gt; [? |? &lt;lvalue&gt;]*<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;lvalue&gt; :=<span>&nbsp; <\/span>&lt;simpleLvalue&gt; &lt;propertyOrArrayReferenceOperator&gt;*<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;simpleLvalue&gt; := &lt;AttributeSpecificationToken&gt;* &lt;variableToken&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;firstPipelineElement&gt; = &lt;expressionRule&gt; | &lt;cmdletCall&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;cmdletCall&gt; = [ &#8216;&amp;&#8217; | &#8216;.&#8217; | &lt;empty&gt; ] [ &lt;name&gt; | &lt;expressionRule&gt; ]<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp; <\/span>[ &lt;parameterToken&gt; |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;parameterArgumentToken&gt; |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;postfixOperatorRule&gt; |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;redirectionRule&gt; ]*<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;redirectionRule&gt; = &lt;redirectionOperatorToken&gt; &lt;propertyOrArrayReferenceRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><b><span>2.2 If statement<\/span><\/b><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;ifStatementRule&gt; = &#8216;if&#8217; &#8216;(&#8216; &lt;pipelineRule&gt; &#8216;)&#8217; &lt;statementBlockRule&gt;<span>&nbsp; <\/span>[<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8216;elseif&#8217; &#8216;(&#8216; &lt;pipelineRule&gt; &#8216;)&#8217; &lt;statementBlockRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>]* [<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>&#8216;else&#8217; &lt;statementBlockRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>]{0 |1}<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/p>\n<p class=\"MsoNormal\"><b><span>2.3 Switch statement<\/span><\/b><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span># The syntax for a switch statement looks like:<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>switch -regex -casesensitive (get-childitem | sort length)<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8220;^5&#8221;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>{ &#8220;length for $_ started with 5&#8221; ; continue}<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{ $_.length &gt; 20000 } { &#8220;length of $_ is greated than 20000&#8221; }<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>default<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{ &#8220;Didn&#8217;t match anything else&#8230;&#8221; }<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>}<\/span><\/p>\n<p class=\"MsoNormal\"><span># Note that there can only be 1 default clause in a switch statement<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;switchStatementRule&gt; = &#8216;switch&#8217; [&#8216;-regex&#8217; | &#8216;-wildcard&#8217; | &#8216;-exact&#8217; ]{0 |1}<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>[&#8216;-casesensitive&#8217;]{0 |1}<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>[&#8216;-file&#8217; &lt;propertyOrArrayReferenceRule&gt; | &#8216;(&#8216; &lt;pipelineRule&gt; &#8216;)&#8217; ]<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8216;{&#8216; [<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>[<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8216;default&#8217; |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;ParameterArgumentToken&gt; |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;propertyOrArrayReferenceRule&gt; |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;statementBlockRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>]<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;statementBlockRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>]+ &#8216;}&#8217;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><b><span>2.4 Foreach statement<\/span><\/b><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span># Foreach statement looks like<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>foreach ($i in get-childitem | sort-object length) {<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>write-host $i ; $sum += $i.length }<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;foreachStatementRule&gt; = &lt;LoopLabelToken&gt;{0 |1} &#8216;foreach&#8217;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8216;(&#8216; &lt;variableToken&gt;<span>&nbsp; <\/span>&#8216;in&#8217; &lt;pipelineRule&gt; &#8216;)&#8217;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;statementBlockRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/p>\n<p class=\"MsoNormal\"><b><span>2.5 Forwhile statement<\/span><\/b><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span># A while statement looks like<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>while ($i -lt 100) {<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>write-host $i<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$i += 1<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>}<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<\/span><\/p>\n<p class=\"MsoNormal\"><span># A for statement looks like<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>for ($i=0; $i -lt 10; $i += 1) {<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>while ($i -lt 100) {<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>write-host $i<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$i += 1<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>}<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;forWhileStatementRule&gt; =<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;LoopLabelToken&gt;{0 |1} &#8216;while&#8217; &#8216;(&#8216; &lt;pipelineRule&gt; &#8216;)&#8217; &lt;statementBlockRule&gt; |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;LoopLabelToken&gt;{0 |1} &#8216;for&#8217; &#8216;(&#8216; &lt;pipelineRule&gt;{0 |1} &#8216;;&#8217;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;pipelineRule&gt;{0 |1} &#8216;;&#8217; &lt;pipelineRule&gt;{0 |1} &#8216;)&#8217; &lt;statementBlockRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/p>\n<p class=\"MsoNormal\"><b><span>2.5 Dowhile statement<\/span><\/b><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span># A do\/while statement looks like<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>do<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>{<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>write-host $i<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$i += 1<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>} while ($i -lt 100)<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<\/span><\/p>\n<p class=\"MsoNormal\"><span># A do\/until statement looks like<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>do<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>{<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>write-host $i<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$i += 1<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>} until ($i -ge 100)<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;doWhileStatementRule&gt; =<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;<\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;LoopLabelToken&gt;{0 |1} &#8216;do&#8217; &lt;statementBlockRule&gt; [&#8216;while&#8217; | &#8216;until&#8217;] &#8216;(&#8216; &lt;pipelineRule&gt; &#8216;)&#8217;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/p>\n<p class=\"MsoNormal\"><b><span>2.6 Trap statement<\/span><\/b><\/p>\n<p class=\"MsoNormal\"><b><span>&nbsp;<\/span><\/b><\/p>\n<p class=\"MsoNormal\"><span># A trap statement looks like<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>trap { &#8230; }<\/span><\/p>\n<p class=\"MsoNormal\"><span># or<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>trap [system.nullreferenceexception] { &#8230; }<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;trapStatementRule&gt; = &#8216;trap&#8217; &lt;AttributeSpecificationToken&gt;{0 |1}<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;statementBlockRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><b><span>2.7 Finally statement<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/b><\/p>\n<p class=\"MsoNormal\"><b><span>&nbsp;<\/span><\/b><\/p>\n<p class=\"MsoNormal\"><span># A finally statement looks like<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>finally { &#8230; }<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;finallyStatementRule&gt; = &#8216;finally&#8217; &lt;statementBlockRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><b><span>2.8 flow control statement<\/span><\/b><\/p>\n<p class=\"MsoNormal\"><b><span>&nbsp;<\/span><\/b><\/p>\n<p class=\"MsoNormal\"><span># Flow control statements look like<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>break<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>break label<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>break $labelArray[2].name<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>return<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>return 13<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>return get-content | sort | pick-object -head 10<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;flowControlStatementRule&gt; =<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp; <\/span>[&#8216;break&#8217; | &#8216;continue&#8217;] [&lt;propertyNameToken&gt; | &lt;propertyOrArrayReferenceRule&gt;]{0 |1} |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp; <\/span>&#8216;return&#8217; &lt;pipelineRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><b><span>2.9 Function declaration<span>&nbsp;&nbsp;&nbsp; <\/span><\/span><\/b><\/p>\n<p class=\"MsoNormal\"><b><span>&nbsp;<\/span><\/b><\/p>\n<p class=\"MsoNormal\"><span># a function definition looks like<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>function foo { &#8230; }<\/span><\/p>\n<p class=\"MsoNormal\"><span># or<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>filter foo { &#8230; }<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;functionDeclarationRule&gt; = &lt;FunctionDeclarationToken&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp; <\/span>&lt;ParameterArgumentToken&gt; [ &#8216;(&#8216; &lt;parameterDeclarationExpressionRule&gt; &#8216;)&#8217; ] &lt;cmdletBodyRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span># The following rule defines the grammar for a cmdlet (function\/script\/scriptblock) body<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;cmdletBodyRule&gt; =<span>&nbsp; <\/span>&#8216;{&#8216; [ &#8216;(&#8216; &lt;parameterDeclarationExpressionRule&gt; &#8216;)&#8217; ] (<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp; <\/span>[ &#8216;begin&#8217; &lt;statementBlock&gt; | &#8216;process&#8217; &lt;statementBlock&gt; | &#8216;end&#8217; &lt;statementBlock&gt; ]* |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp; <\/span>&lt;statementList&gt; &#8216;}&#8217;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><b><span>2.10 Parameter declaration<\/span><\/b><\/p>\n<p class=\"MsoNormal\"><b><span>&nbsp;<\/span><\/b><\/p>\n<p class=\"MsoNormal\"><span># a parameter definition looks like<\/span><\/p>\n<p class=\"MsoNormal\"><span>#<span>&nbsp;&nbsp; <\/span>param argumentList<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;parameterDeclarationRule&gt; =<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp; <\/span>&lt;ParameterDeclarationToken&gt; &#8216;(&#8216; &lt;parameterDeclarationExpressionRule&gt; &#8216;)&#8217;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp; <\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;parameterDeclarationExpressionRule&gt; = &lt;parameterWithIntializer&gt; [ &lt;CommaToken&gt; &lt;parameterWithIntializer&gt; ]*<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;parameterWithIntializer&gt; = &lt;simpleLvalue&gt; [ &#8216;=&#8217;<span>&nbsp; <\/span>&lt;expressionRule&gt; ]<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><b><span>3. Expression<\/span><\/b><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;expressionRule&gt; = &lt;logicalExpressionRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;logicalExpressionRule&gt; = &lt;bitwiseExpressionRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>[&lt;LogicalOperatorToken&gt; &lt;bitwiseExpressionRule&gt;]*<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;bitwiseExpressionRule&gt; = &lt;comparisonExpressionRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>[ &lt;BitwiseOperatorToken&gt; &lt;comparisonExpressionRule&gt; ]*<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;comparisonExpressionRule&gt; = &lt;addExpressionRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>[ &lt;ComparisonOperatorToken&gt; &lt;addExpressionRule&gt; ]*<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;addExpressionRule&gt; = &lt;multiplyExpressionRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>[ &lt;AdditionOperatorToken&gt; &lt;multiplyExpressionRule&gt; ]*<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;multiplyExpressionRule&gt; = &lt;formatExpressionRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>[ &lt;MultiplyOperatorToken&gt; &lt;formatExpressionRule&gt; ]<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;formatExpressionRule&gt; = &lt;rangeExpressionRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>[ &lt;FormatOperatorToken&gt; &lt;rangeExpressionRule&gt; ]*<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;rangeExpressionRule&gt; = &lt;arrayLiteralRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>[ &lt;RangeOperatorToken&gt; &lt;arrayLiteralRule&gt; ]*<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;arrayLiteralRule&gt; = &lt;postfixOperatorRule&gt; [ &lt;CommaToken&gt; &lt;postfixOperatorRule&gt; ]*<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;postfixOperatorRule&gt; =<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;lvalueExpression&gt; &lt;PrePostfixOperatorToken&gt; |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;propertyOrArrayReferenceRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;propertyOrArrayReferenceRule&gt; = &lt;valueRule&gt; &lt;propertyOrArrayReferenceOperator&gt;*<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;propertyOrArrayReferenceOperator&gt; = &#8216;[&#8216; &lt;expressionRule&gt; &#8216;]&#8217; ] |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8216;.&#8217; [<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;PropertyNameToken&gt; &lt;parseCallRule&gt;{0 |1} |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>&lt;valueRule&gt;<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>]<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;parseCallRule&gt; = &#8216;(&#8216; &lt;arrayLiteralRule&gt; &#8216;)&#8217;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><b><span>4. Value<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/b><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&lt;valueRule&gt; =<span>&nbsp;&nbsp; <\/span>&#8216;(&#8216; &lt;assignmentStatementRule&gt; &#8216;)&#8217; |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8216;$(&#8216; &lt;statementListRule&gt; &#8216;)&#8217; |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8216;@(&#8216; &lt;statementListRule&gt; &#8216;)&#8217; |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;cmdletBodyRule&gt; |<\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8216;@{&#8216; &lt;hashLiteralRule&gt; &#8216;}&#8217; |<\/span><\/p>\n<p class=\"MsoNormal\">\n","protected":false},"excerpt":{"rendered":"<p>A number of people have asked about the PowerShell grammar.&nbsp; Here is a draft write up (I&#8217;ve also included it as an attachement) that George Xie and Bruce Payette are working on. &nbsp; Grammar of PowerShell (formerly known as Monad) &nbsp;is separated into parsing rules and tokenizing rules. Parsing rules in turn can be separated [&hellip;]<\/p>\n","protected":false},"author":600,"featured_media":13641,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-10331","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-powershell"],"acf":[],"blog_post_summary":"<p>A number of people have asked about the PowerShell grammar.&nbsp; Here is a draft write up (I&#8217;ve also included it as an attachement) that George Xie and Bruce Payette are working on. &nbsp; Grammar of PowerShell (formerly known as Monad) &nbsp;is separated into parsing rules and tokenizing rules. Parsing rules in turn can be separated [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/10331","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/users\/600"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/comments?post=10331"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/10331\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media\/13641"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media?parent=10331"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/categories?post=10331"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/tags?post=10331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}