擅长:python、mysql、java
<p>您的语法在这里缺少两件事:优先规则和递归子表达式(即括号)。典型的表达式语法通过将表达式分解为一系列<em>术语</em>&;<em>因子</em>来实现这一点,如下所示:</p>
<pre><code>expression : term ( ( Add | Subtract ) term )* ;
term : factor ( ( Multiply | Divide ) factor )* ;
factor : number | '(' expression ')' ;
</code></pre>
<p>有很多关于这背后的理论和实践的教程和书籍,所以我不会在这里重复这个细节(试试<a href="http://homepage.divms.uiowa.edu/~jones/compiler/spring13/notes/10.shtml" rel="nofollow noreferrer">this one</a>或<a href="http://www.cs.man.ac.uk/~pjj/farrell/comp4.html" rel="nofollow noreferrer">this one</a>)。你知道吗</p>
<blockquote>
<blockquote>
<p>I need grammar to deal with (1 + 3) * 3 = 12 problem and 1 + 3 * 3 = 12</p>
</blockquote>
</blockquote>
<p>这里您的意思是<em>加</em>应该比<em>乘</em>具有更高的优先级(因此不是典型的<a href="https://www.mathsisfun.com/operation-order-bodmas.html" rel="nofollow noreferrer">BODMAS</a>优先级规则),您确定这是您想要的吗?如果是这样的话,我希望你能看到如何在你的语法中重做上述内容,给你想要的优先权。你知道吗</p>