<div class="gmail_quote">On 31 December 2010 13:21, Aaron Gray <span dir="ltr">&lt;<a href="mailto:aaronngray.lists@gmail.com">aaronngray.lists@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

I am trying to get a grammar where keywords are also valid identifiers.<div><br></div></blockquote><div><br></div><div>Sorry working now !</div><div><br></div><div>Aaron</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div></div><div>Been messing round with the following Happy grammar :-<br><div><br></div><div><div><font face="&#39;courier new&#39;, monospace">%token</font></div>
<div><font face="&#39;courier new&#39;, monospace">      &#39;let&#39;           { TokenIdent &quot;let&quot; }</font></div><div><font face="&#39;courier new&#39;, monospace">      &#39;in&#39;            { TokenIdent &quot;in&quot; }</font></div>


<div><span style="font-family:&#39;courier new&#39;, monospace">      ident           { TokenIdent $$ }</span></div><div><font face="&#39;courier new&#39;, monospace">      int             { TokenInt $$ }</font></div>
<div><font face="&#39;courier new&#39;, monospace">      &#39;=&#39;             { TokenEq }</font></div><div><font face="&#39;courier new&#39;, monospace">      &#39;+&#39;             { TokenPlus }</font></div>
<div><font face="&#39;courier new&#39;, monospace">      &#39;-&#39;             { TokenMinus }</font></div><div><font face="&#39;courier new&#39;, monospace">      &#39;*&#39;             { TokenTimes }</font></div>
<div><font face="&#39;courier new&#39;, monospace">     &#39;/&#39;             { TokenDiv }</font></div><div><font face="&#39;courier new&#39;, monospace">      &#39;(&#39;             { TokenOB }</font></div>
<div><font face="&#39;courier new&#39;, monospace">      &#39;)&#39;             { TokenCB }</font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div>
<div><font face="&#39;courier new&#39;, monospace">%%</font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">Exp   : &#39;let&#39; Var &#39;=&#39; Exp &#39;in&#39; Exp  { Let $2 $4 $6 }</font></div>


<div><font face="&#39;courier new&#39;, monospace">      | Exp1                    { Exp1 $1 }</font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div>
<div><font face="&#39;courier new&#39;, monospace">Exp1  : Exp1 &#39;+&#39; Term           { Plus $1 $3 }</font></div><div><font face="&#39;courier new&#39;, monospace">      | Exp1 &#39;-&#39; Term           { Minus $1 $3 }</font></div>


<div><font face="&#39;courier new&#39;, monospace">      | Term                    { Term $1 }</font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div>
<div><font face="&#39;courier new&#39;, monospace">Term  : Term &#39;*&#39; Factor         { Times $1 $3 }</font></div><div><font face="&#39;courier new&#39;, monospace">      | Term &#39;/&#39; Factor         { Div $1 $3 }</font></div>


<div><font face="&#39;courier new&#39;, monospace">      | Factor                  { Factor $1 }</font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div>
<div><font face="&#39;courier new&#39;, monospace">Factor :: { Factor }</font></div><div><font face="&#39;courier new&#39;, monospace">      : int                     { Int $1 }</font></div>
<div><font face="&#39;courier new&#39;, monospace">      | ident                   { Var $1 }</font></div><div><font face="&#39;courier new&#39;, monospace">      | &#39;(&#39; Exp &#39;)&#39;             { Brack $2 }</font></div>


<div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">Var :: { Factor }</font></div><div><font face="&#39;courier new&#39;, monospace">      : ident                   { Var $1 }</font></div>


<div><font face="&#39;courier new&#39;, monospace">      | &#39;let&#39;                   { Var &quot;let&quot; }</font></div></div><div><br></div><div>Here &#39;Var&#39; should be able to represent a &#39;let&#39; identifier, as well as a keyword. Happy accepts the grammar but it does not parser the expected &#39;let let = x in let&#39;.</div>


<div><br></div><div>I have attached the full Happy grammar.</div><div><br></div><div>I don&#39;t think this is an LR thing, but could be wrong.</div><div><br></div><div>Many thanks in advance,</div><div><br></div><div>Aaron</div>


<div><br></div><div><br></div></div>
</blockquote></div><br>