<br><div class="gmail_quote">On Mon, Nov 14, 2011 at 11:02 PM, Richard O'Keefe <span dir="ltr"><<a href="mailto:ok@cs.otago.ac.nz">ok@cs.otago.ac.nz</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div class="im"><br>
</div>Well, any grammar that's actually *used* as the front end of something<br>
interesting, whether it's a Prolog DCG, or Yacc, or ML-Yacc, or Yecc,<br>
or whatever is going to have *both* pure syntax *and* some semantics<br>
in there.  Here's one of the examples from the GENTLE kit:<br>
<br>
<br>
'root' expression(-> X) print(X)<br>
<br>
'nonterm' expression(-> INT)<br>
<br>
   'rule' expression(-> X  ): expr2(-> X)<br>
   'rule' expression(-> X+Y): expression(-> X) "+" expr2(-> Y)<br>
   'rule' expression(-> X-Y): expression(-> X) "-" expr2(-> Y)<br>
<br>
'nonterm' expr2(-> INT)<br>
<br>
   'rule' expr2(-> X  ): expr3(-> X)<br>
   'rule' expr2(-> X*Y): expr2(-> X) "*" expr3(-> Y)<br>
   'rule' expr2(-> X/Y): expr2(-> X) "/" expr3(-> Y)<br>
<br>
'nonterm' expr3(-> INT)<br>
<br>
   'rule' expr3(-> X  ): Number(-> X)<br>
   'rule' expr3(-> - X): "-" expr3(-> X)<br>
   'rule' expr3(-> + X): "+" expr3(-> X)<br>
   'rule' expr3(-> X): "(" expression(-> X) ")"<br>
<br>
'token' Number(-> INT)<br>
<br>
If you ignore the (-> ...) parts, you have yet another minor variant<br>
of BNF.  The (-> ...) parts give you the semantics.  Utterly commonplace.<br>
<br></blockquote><div><br>Wow, it's been a while since I've heard GENTLE mentioned. It is a great simple toolkit (built on top of standard yacc and lex) for implementing translators/interpreters/compilers of all sorts. Highly recommended. Available here: <a href="http://gentle.compilertools.net/">http://gentle.compilertools.net/</a><br>
<br>Apologies for being off-topic,<br>Robby<br><br></div></div>