<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.3790.2577" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY>
<DIV><FONT face=Arial size=2>Since it seems that there may be some interest, and 
to prove that I'm not bull-shitting, I thought I would post the code that I 
mentioned earlier.&nbsp; It describes a parser for an unnamed object-oriented 
language of my design (that rips off a lot of stuff from D).&nbsp; It's actually 
less than 230 lines if you don't count the comments and whitespace.&nbsp; It's 
all one big string that gets parsed at run-time, but perhaps D could turn it 
into optimized source code.</FONT></DIV>
<DIV><FONT face=Arial><FONT size=2><FONT face=Arial 
size=2></FONT></FONT></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial><FONT size=2><FONT color=#0000ff>const</FONT> <FONT 
color=#0000ff>char</FONT> *languageParser =</FONT></FONT></DIV>
<DIV><FONT face=Arial 
size=2>"Real::(!Delims&amp;(-?(/d+(/.(/d)+)?)|(/d*/.(/d)+)([eE][/-+]?/d{1,3})?)@~;)" 
</FONT><FONT color=#008000><FONT face=Arial size=2>// A real 
number</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"Char::(!Delims&amp;(\')@~&amp;((\\)?.)@~\';;)" 
</FONT><FONT color=#008000><FONT face=Arial size=2>// char 
literal</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"Text::(!Delims&amp;(\")@~&amp;([^\".]*)@~\";;)" 
</FONT><FONT color=#008000><FONT face=Arial size=2>// text 
literal</FONT></FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2></FONT>&nbsp;</DIV></FONT>
<DIV><FONT color=#008000><FONT face=Arial size=2>// 
Delimeters</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"Comment1::(//(^(/n).)*)"</FONT></DIV>
<DIV><FONT face=Arial size=2>"Comment2::(/*(^(/*//).)*/*//)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"Delims::(/s(//(!Comment1|!Comment2)/s)*)"</FONT></DIV>
<DIV><FONT face=Arial><FONT size=2><FONT 
face=Arial></FONT></FONT></FONT>&nbsp;</DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>//</FONT></DIV></FONT>
<DIV><FONT color=#008000><FONT face=Arial size=2>// 
Expressions</FONT></DIV></FONT>
<DIV><FONT color=#008000><FONT face=Arial size=2>//</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"BiOp1:([/./^])" </FONT><FONT color=#008000><FONT 
face=Arial size=2>// . ^ (exponentiation)</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"BiOp2:([///*/%/#])" </FONT><FONT 
color=#008000><FONT face=Arial size=2>// / div * mul % mod # 
concat</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"BiOp3:([/-+])" </FONT><FONT color=#008000><FONT 
face=Arial size=2>// - +</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"BiOp4:(=|/!=|&lt;|&gt;|&lt;=|&gt;=|in|/~|/!/~)" 
</FONT><FONT color=#008000><FONT face=Arial size=2>// = != &lt; &gt; &lt;= &gt;= 
in ~ !~</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"BiOp5:(/&amp;|/||/./.)" </FONT><FONT 
color=#008000><FONT face=Arial size=2>// &amp; | .. (range 
operator)</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"Parens:(/(!Expr/))" </FONT><FONT 
color=#008000><FONT face=Arial size=2>// Expression bound by 
parenthesis</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"MParam:(((`=)@~&amp;(/i)@~;;=)?!Expr)"</FONT></DIV>
<DIV><FONT face=Arial size=2>"MParens:(&amp;(/()@~(!MParam(,!MParam)*)?/);)" 
</FONT><FONT color=#008000><FONT face=Arial size=2>// 0 or more comma delimited 
expressions bound by parens</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"Index:(&amp;(/[)@~!Expr(,!Expr)*/];)" </FONT><FONT 
color=#008000><FONT face=Arial size=2>// Array index</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"Tuple1:(&amp;(/[)@~!MParam(,!MParam)*/];)" 
</FONT><FONT color=#008000><FONT face=Arial size=2>// Array index 
tuple</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"Tuple2:(&amp;(/()@~!MParam(,!MParam)*/);)" 
</FONT><FONT color=#008000><FONT face=Arial size=2>// Parens 
tuple</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"Tuple:(!Tuple1|!Tuple2)"</FONT></DIV>
<DIV><FONT face=Arial size=2>"TBang:(&amp;(/!)@~;)" </FONT><FONT 
color=#008000><FONT face=Arial size=2>// template instantiation 
bang</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"DotExpr:(&amp;(/.)@~;&amp;(/i)@~;)" </FONT><FONT 
color=#008000><FONT face=Arial size=2>// dots in an id 
expression</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"IdExpr:((`/:idexpr)@~&amp;(/i)@~;(!DotExpr)*(((!TBang)?!MParens)|!Index)*;)" 
</FONT><FONT color=#008000><FONT face=Arial size=2>// Id 
expression</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"LExpr:(!Real|!Text|!Char|!TypeofExpr|!IdExpr|!Tuple|!Parens|!MethodExpr|!DelegateExpr|!ClosureExpr|!PrefixExpr)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Prefix 
operators</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"PrefixOp:([/*/-/!/&amp;]|sizeof|typeid|typeof)" 
</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"PrefixExpr:(&amp;(!PrefixOp)@~!LExpr;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// 
Exponentiation</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"BiExpr1:((`t1)@~!LExpr&amp;(!BiOp1)$~!BiSub2;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Multiplication, division, 
and modulus</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"BiSub2:(!BiExpr1|!LExpr)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"BiExpr2:((`t2)@~!BiSub2&amp;(!BiOp2)$~!BiSub3;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Addition and 
Subtraction</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"BiSub3:(!BiExpr2|!BiSub2)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"BiExpr3:((`t3)@~!BiSub3&amp;(!BiOp3)$~!BiSub4;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Comparisons == != &lt; &gt; 
&lt;= &gt;=</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"BiSub4:(!BiExpr3|!BiSub3)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"BiExpr4:((`t4)@~!BiSub4&amp;(!BiOp4)$~!BiSub5;)"</FONT></DIV>
<DIV><FONT face=Arial><FONT size=2><FONT 
face=Arial></FONT></FONT></FONT>&nbsp;</DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// &amp; | 
..</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"BiSub5:(!BiExpr4|!BiSub4)"</FONT></DIV>
<DIV><FONT face=Arial size=2>"BiSub6:(!BiExpr5|!BiSub5)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"BiExpr5:((`t5)@~!BiSub5&amp;(!BiOp5)$~!BiSub6;)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"Keywords:(module|interface|class|enum|static|const|delegate|closure|method)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Type 
expression</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"TypeofExpr:(&amp;(typeof)@~!Expr(/.&amp;(/i)@~;)*;)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"TypeDots:(^(!Keywords)&amp;(/i)@~(/.&amp;(/i)@~;)*;)"</FONT></DIV>
<DIV><FONT face=Arial size=2>"Array:(&amp;(/[)@~(!Expr(,!Expr)*)?/];)" 
</FONT><FONT color=#008000><FONT face=Arial size=2>// Array 
type</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"Const:((&amp;(/!)@~;)|((const(`/!))@~;))"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"MTypeExpr:(((!Const)?(&amp;(/*)@~;|!Array))*(!Const)?(!DelegateType|!ClosureType|!TypeofExpr|!TypeDots))"</FONT></DIV>
<DIV><FONT face=Arial size=2>"TypeExpr:((`/:type)@~!MTypeExpr;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// delegate, closure 
types</FONT></DIV></FONT>
<DIV><FONT color=#008000><FONT face=Arial size=2>// @void(int) myDelegate = 
@myMethod;</FONT></DIV></FONT>
<DIV><FONT color=#008000><FONT face=Arial size=2>// @void(int) myDelegate = 
@myInstance.myMethod;</FONT></DIV></FONT>
<DIV><FONT color=#008000><FONT face=Arial size=2>// #void(int) myClosure = 
#myMethod(5);</FONT></DIV></FONT>
<DIV><FONT color=#008000><FONT face=Arial size=2>// #void(int) myDelegate = 
#myInstance.myMethod(5);</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"SID:(&amp;(/i)@~;^(/i))"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"DParam:((`/:var)@~!TypeExpr(!SID(,!SID)*)?(,;!DParam)?)"</FONT></DIV>
<DIV><FONT face=Arial size=2>"DParens:(/((!DParam;)?/))"</FONT></DIV>
<DIV><FONT face=Arial size=2>"Delegate:(<A>/@|delegate</A>)"</FONT></DIV>
<DIV><FONT face=Arial size=2>"Closure:(/#|closure)"</FONT></DIV>
<DIV><FONT face=Arial size=2>"DelegateType:((<A 
href="mailto:`/@)@~!Delegate!TypeExpr!DParens">`/@)@~!Delegate!TypeExpr!DParens</A>;)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"ClosureType:((`/#)@~!Closure!TypeExpr!DParens;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Anonymous method 
expression</FONT></DIV></FONT>
<DIV><FONT color=#008000><FONT face=Arial size=2>// %void(int a) myDelegate = 
%void(int a) Write(a);;</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"AParam:((`/:var)@~!TypeExpr!SID(,!SID)*(,;!AParam)?)"</FONT></DIV>
<DIV><FONT face=Arial size=2>"AParens:(/((!AParam;)?/))"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"MethodExpr:((`/%)@~!Method!TypeExpr!AParens!Block;)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"DelegateExpr:((`/@)@~!Delegate(!IdExpr/.)?&amp;(/i)@~;;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Closure 
expression</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"ClosureExpr:((`/#)@~!Closure!IdExpr;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// New 
expression</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"NewExpr:(&amp;(new)@~!TypeExpr(!MParens)?;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// CastExpr</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"CastExpr:((`cast)@~!Expr&amp;((!Static)?as)$~!TypeExpr;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// An 
expression</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"BiOps:(!BiOp1|!BiOp2|!BiOp3|!BiOp4|!BiOp5)"</FONT></DIV>
<DIV><FONT face=Arial size=2>"PreLExpr:(!LExpr^(!BiOps))"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"Expr:(^[/]/;/)/}](!PreLExpr|!BiExpr5|!BiExpr4|!BiExpr3|"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"!BiExpr2|!BiExpr1|!NewExpr|!CastExpr))"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>//</FONT></DIV></FONT>
<DIV><FONT color=#008000><FONT face=Arial size=2>// 
Statements</FONT></DIV></FONT>
<DIV><FONT color=#008000><FONT face=Arial size=2>//</FONT></DIV></FONT>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Assignment 
statement</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"AssOp:(=|/+=|/-=|/*=|//=|/^=)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"AssSt:((`ass)@~!IdExpr(&amp;(!AssOp)$~)!Expr;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Delete 
statement</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"DeleteSt:(&amp;(delete)@~!IdExpr;/;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Return, break, continue 
statements</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"ReturnSt:(&amp;(return)@~(!Expr)?;/;)" 
</FONT></DIV>
<DIV><FONT face=Arial size=2>"BreakSt:(&amp;(break)@~;/;)"</FONT></DIV>
<DIV><FONT face=Arial size=2>"ContinueSt:(&amp;(continue)@~;/;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Postfix 
statement</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"PostfixOp:(/+/+|/-/-)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"PostfixSt:((`pf)@~!IdExpr&amp;(!PostfixOp)$~;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Variable declaration 
statement</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"Var:(&amp;(/i)@~(=(!NewExpr|!Expr))?;)" 
</FONT><FONT color=#008000><FONT face=Arial size=2>// var = 
expr</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"Static:((&amp;(/$)@~;)|(static(`/$)@~;))"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"VarSt:((`/:var)@~(!Static)?!TypeExpr!Var(,!Var)*;/;)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"SVarSt:((`/:var)@~!TypeExpr!Var(,!Var)*;/;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// If 
statement</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"IfSt:(&amp;(if)@~!Expr(/:)?!Block(else!Block)?;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Static if 
statement</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"SIfSt:(&amp;(!Static(if))@~!Expr(/:)?!Block(else!Block)?;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Switch 
statement</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"CaseSt:((`case)@~(case)?!Expr*(/:)?!Block;)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"DefaultSt:(&amp;(default)@~(/:)?!Block;)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"SwitchSt:(&amp;(switch)@~/{(!CaseSt)*(!DefaultSt)?/};)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// While 
statement</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"WhileSt:(&amp;(while)@~!Expr!Block;)" 
</FONT></DIV>
<DIV><FONT face=Arial><FONT size=2><FONT 
face=Arial></FONT></FONT></FONT>&nbsp;</DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Do 
statement</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"DoSt:(&amp;(do)@~!Block(while)!Expr;/;)"</FONT></DIV>
<DIV><FONT face=Arial><FONT size=2><FONT 
face=Arial></FONT></FONT></FONT>&nbsp;</DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Method call 
statement</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"MethodSt:((`/(/))@~!IdExpr;/;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Foreach statement 
</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"FEVarDecl:((`/:var)@~!TypeExpr&amp;(/i)@~;;)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"ForeachHeader:(!FEVarDecl(,!FEVarDecl;)?/;!Expr(&amp;(step)@~!Expr;)?)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"ForeachSt:(&amp;(foreach)@~/(!ForeachHeader/)!Block(else!Block);)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// For 
statement</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"FVarDecl:((`/:var)@~!TypeExpr&amp;(/i)@~;(=!Expr);)"</FONT></DIV>
<DIV><FONT face=Arial size=2>"ForInit:(!FVarDecl|!AssSt)"</FONT></DIV>
<DIV><FONT face=Arial size=2>"FStatement:(!AssSt|!PostfixSt)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"ForSt:(&amp;(for)@~/((!ForInit(,!ForInit)*)?/;!Expr/;(!FStatement(,!FStatement)*)?/)!Block;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// In and out blocks can 
include preconditions and postconditions </FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"InBlock:(&amp;(in)@~!Block;)"</FONT></DIV>
<DIV><FONT face=Arial size=2>"OutBlock:(&amp;(out)@~!Block;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Trace 
block</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"TraceBlock:(&amp;(trace)@~!Block;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Echo, 
assert</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"EchoSt:(&amp;(echo)@~!Expr;)"</FONT></DIV>
<DIV><FONT face=Arial size=2>"AssertSt:(&amp;(assert)@~!Expr;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// 
Exceptions</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"CatchSt:((`catch)@~(catch)?&amp;(/i)@~;*(/:)?!Block;)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"DefaultSt:(&amp;(default)@~(/:)?!Block;)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"TryBlock:(&amp;(try)@~/{(!CatchSt)*(!DefaultSt)?/};)"</FONT></DIV>
<DIV><FONT face=Arial size=2>"ThrowSt:(&amp;(throw)@~;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Enumeration 
definition</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"EnumNode:(&amp;(/i)@~(=!Expr);)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"EnumDef:(&amp;(enum)@~/{!EnumNode(,!EnumNode)*/};)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Method 
definition</FONT></DIV></FONT>
<DIV><FONT face=Arial size=2>"TID:(&amp;(/i)@~^(/i)(=!Expr)?;)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"TParam:((`/:var)@~(&amp;(in|out|inout)@~;)?!TypeExpr!TID(,!TID)*(,;!TParam)?)"</FONT></DIV>
<DIV><FONT face=Arial size=2>"TParens:(/((!TParam;)?/))"</FONT></DIV>
<DIV><FONT face=Arial size=2>"Method:(/%|method)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"SMethodDef:((`/%)@~!Method!TypeExpr&amp;(/i)@@~;!TParens!Block;)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"MMethodDef:((`/%)@~(!Static|!Const)?!Method!TypeExpr&amp;(/i)@@~;!TParens!Block;)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"IMethodDef:((`/%)@~(!Const)?!Method!TypeExpr&amp;(/i)@@~;!TParens/;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial 
size=2>//"Construct:(&amp;(construct)@~!Block;)"</FONT></DIV></FONT>
<DIV><FONT color=#008000><FONT face=Arial 
size=2>//"Destruct:(&amp;(destruct)@~!Block;)"</FONT></DIV></FONT>
<DIV><FONT color=#008000><FONT face=Arial 
size=2>//"Startup:..."</FONT></DIV></FONT>
<DIV><FONT color=#008000><FONT face=Arial 
size=2>//"Terminate:..."</FONT></DIV></FONT>
<DIV><FONT color=#008000><FONT face=Arial 
size=2>//"Set:(&amp;(set)@~!TParens!Block;)"</FONT></DIV></FONT>
<DIV><FONT color=#008000><FONT face=Arial 
size=2>//"Get:(!TypeExprget!Block;)"</FONT></DIV></FONT>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Operator 
overloading</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"OpOverload:(&amp;(operator)@~(!PrefixO|!PostfixO|!AssignO|!BinaryO)!Block;)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"BinaryO:(&amp;(^(/.)!BiOps)@~;!TypeExpr/(!TypeExpr&amp;(/i)@~;,!TypeExpr&amp;(/i)@~;/))"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"AssignO:(&amp;(^(=)!AssOp)@~;void/(!TypeExpr&amp;(/i)@~;/))"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"PrefixO:(&amp;(/-/!)@~;!TypeExpr/(/))"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"PostfixO:(&amp;(/+/+|/-/-)@~;void/(/))"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"BinaryOverload:(&amp;(operator)@~!BinaryO!Block;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Class 
definition</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"ProtSt:(&amp;(public|private|protected)@~;/:)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"ClassSt:(!ProtSt|!Alias|!TypeDef|!VarSt|!MMethodDef|!ClassDef|!EnumDef|!InterfaceDef|!OpOverload)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"ClassBlock:(&amp;(/{)@~(!ClassSt)*/};)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"TemplateParam:((&amp;(int)@~;)?(&amp;(/i)@~;))"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"TemplateParams:(!TemplateParam(,!TemplateParam)*)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"ClassDef:(&amp;(class)@~&amp;(/i)@~(/(!TemplateParams/))?;(/:!IdExpr(,!IdExpr)*)?!ClassBlock;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// Interface 
definition</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"InterfaceSt:(!ProtSt|!Alias|!TypeDef|!IMethodDef|!ClassDef|!EnumDef|!InterfaceDef)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"InterfaceBlock:(&amp;(/{)@~(!InterfaceSt)*/};)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"InterfaceDef:(&amp;(interface)@~&amp;(/i)@~;(/:!IdExpr(,!IdExpr)*)?!InterfaceBlock;)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"Alias:(&amp;(alias)@~&amp;(/i)@~;=!TypeExpr;)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"TypeDef:(&amp;(typedef)@~&amp;(/i)@~;=!TypeExpr;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// import</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"ImportNode:(&amp;(/i)@~(/.&amp;(/i)@@~;)*;)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"ImportSt:(&amp;(import)@~!ImportNode(,!ImportNode)*;/;)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// error checking, 
exceptions</FONT></DIV></FONT>
<DIV><FONT color=#008000><FONT face=Arial size=2>// in, out, inout 
params</FONT></DIV></FONT>
<DIV><FONT color=#008000><FONT face=Arial size=2>// in, out code 
blocks</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"ModuleInit:(&amp;(module)@~&amp;(/i)@@~;/:)"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"ModuleSt:(!ProtSt|!Alias|!TypeDef|!ImportSt|!SVarSt|!SMethodDef|!ClassDef|"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"!EnumDef|!InterfaceDef|!BinaryOverload)"</FONT></DIV>
<DIV><FONT face=Arial size=2>"ModuleDef:(!ModuleInit(!ModuleSt)*)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// A 
statement</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"Statement:(!IfSt|!ForSt|!ForeachSt|(!PostfixSt/;)|(!AssSt/;)|!MethodSt|"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"!VarSt|!InBlock|!OutBlock|!TraceBlock|!TryBlock|!ThrowSt|!EchoSt|"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"!AssertSt|!SwitchSt|!WhileSt|!DoSt|!ReturnSt|!BreakSt|!ContinueSt|"</FONT></DIV>
<DIV><FONT face=Arial 
size=2>"!DeleteSt|!SIfSt|!EnumDef|!SMethodDef|!ClassDef)"</FONT></DIV>
<DIV><FONT color=#008000><FONT face=Arial size=2>// A statement 
block</FONT></DIV></FONT>
<DIV><FONT face=Arial 
size=2>"Block:((`/{)@~(/{(!Statement)*/}|!Statement);)";</FONT></DIV></BODY></HTML>