%
\ifhevea
A PDF version of this documentation is available at
-\url{http://www.emn.fr/x-info/coccinelle/docs/main_grammar.pdf}.
+\url{http://coccinelle.lip6.fr/docs/main_grammar.pdf}.
\else
A HTML version of this documentation is available online at
-\url{http://www.emn.fr/x-info/coccinelle/docs/main_grammar.html}.
+\url{http://coccinelle.lip6.fr/docs/main_grammar.html}.
\fi
\section{Program}
\begin{grammar}
\RULE{\rt{metadecl}}
\CASE{fresh identifier \NT{ids} ;}
+ \CASE{identifier \NT{COMMA\_LIST}\mth{(}\NT{pmid\_with\_regexp}\mth{)} ;}
\CASE{identifier \NT{COMMA\_LIST}\mth{(}\NT{pmid\_with\_not\_eq}\mth{)} ;}
\CASE{parameter \opt{list} \NT{ids} ;}
\CASE{parameter list [ \NT{id} ] \NT{ids} ;}
\CASE{typedef \NT{ids} ;}
\CASE{declarer name \NT{ids} ;}
% \CASE{\opt{local} function \NT{pmid\_with\_not\_eq\_list} ;}
+ \CASE{declarer \NT{COMMA\_LIST}\mth{(}\NT{pmid\_with\_regexp}\mth{)} ;}
\CASE{declarer \NT{COMMA\_LIST}\mth{(}\NT{pmid\_with\_not\_eq}\mth{)} ;}
\CASE{iterator name \NT{ids} ;}
+ \CASE{iterator \NT{COMMA\_LIST}\mth{(}\NT{pmid\_with\_regexp}\mth{)} ;}
\CASE{iterator \NT{COMMA\_LIST}\mth{(}\NT{pmid\_with\_not\_eq}\mth{)} ;}
% \CASE{error \NT{pmid\_with\_not\_eq\_list} ; }
\CASE{\opt{local} idexpression \opt{\NT{ctype}} \NT{COMMA\_LIST}\mth{(}\NT{pmid\_with\_not\_eq}\mth{)} ;}
\RULE{\rt{mid}} \CASE{\T{rulename\_id}.\T{id}}
+ \RULE{\rt{pmid\_with\_regexp}}
+ \CASE{\NT{pmid} \~{}= \NT{regexp}}
+
\RULE{\rt{pmid\_with\_not\_eq}}
\CASE{\NT{pmid} \OPT{!= \T{id}}}
\CASE{\NT{pmid} \OPT{!= \ttlb~\NT{COMMA\_LIST}\mth{(}\T{id}\mth{)} \ttrb}}
\RULE{\rt{pathToIsoFile}}
\CASE{<.*>}
+
+ \RULE{\rt{regexp}}
+ \CASE{"\any{[\^{}"]}"}
\end{grammar}