Note that there are some explanatory texts on larger screens.

plurals
  1. POHow can I write Bison rule with 0 or 1+ tokens without S/R conflicts?
    primarykey
    data
    text
    <p>If I defined tokens like normal <em>object access</em> :</p> <pre class="lang-cpp prettyprint-override"><code>[$_a-zA-Z]+[.] { return ACCESS; } [$_a-zA-Z]+ { return ID; } [+] { return PLUIS; } </code></pre> <p>And the Bison grammar rules:</p> <pre class="lang-cpp prettyprint-override"><code>Accesses : Accesses ACCESS { /*do something...*/ } | ACCESS { /*do something...*/ } Expression : Accesses ID PLUS Accesses ID { /*do something...*/ } </code></pre> <p>I want to allow such contents in source codes:</p> <pre class="lang-cpp prettyprint-override"><code>moduleA.valueB.valueC + valueD </code></pre> <p>In the example, if I don't put empty rule in <code>Accesses</code>, the single <code>ID</code> variable like <code>valueD</code> is illegal. But if I put the empty rule in, <code>Accesses</code> will cause seriously S/R conflicts, and texts it matched will become strange. </p> <p>And, I don't think duplicate the rules in <code>Expression</code> is a good idea, ex:</p> <pre class="lang-cpp prettyprint-override"><code>Expression : Accesses ID PLUS Accesses ID { /*do something...*/ } | ID PLUS Accesses ID { /*do something...*/ } | Accesses ID PLUS ID { /*do something...*/ } | ID PLUS ID { /*do something...*/ } </code></pre> <p>Can I find other ways to solve this problem ?</p> <p><strong>EDIT</strong>: Ok thanks to your answer noticed me this simple grammar got no conflicts. At least you let me know that the real problem may hide in somewhere else ( what a mess for a compiler newbie ! ). </p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload