带括号的语法

发布于 2024-09-19 16:06:28 字数 885 浏览 4 评论 0原文

我有这个语法,需要修改它以允许括号,如: (-1) 和 -(1*5) 可能 1+(2*5) 以及一元减号。

有人对如何做到这一点有任何建议吗?

<expr> ::= <term> | <expr> <op1> <term>
<term> ::= <darg> |<term> <op2> <darg>
<darg> ::= <digit> | <darg> <digit>    
<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<op1> ::= + | -
<op2> ::= * | /

看起来会是这样的:

<expr> ::= <term> | <expr> <op1> <term>
<term> ::= <unary> |<term> <op2> <unary>
<unary> ::= <darg> | -<darg> | -<unary><darg>
<darg> ::= <digit> | <darg> <digit> | <paren>
<paren> ::= (<expr>)
<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<op1> ::= + | -
<op2> ::= * | /

I have this grammar and need to modify it to allow parenthesis like: (-1) and -(1*5) possibly 1+(2*5) as well as unary the unary minus sign.

Does anyone have any suggestions of how to do so?

<expr> ::= <term> | <expr> <op1> <term>
<term> ::= <darg> |<term> <op2> <darg>
<darg> ::= <digit> | <darg> <digit>    
<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<op1> ::= + | -
<op2> ::= * | /

It seems like it would be something like this:

<expr> ::= <term> | <expr> <op1> <term>
<term> ::= <unary> |<term> <op2> <unary>
<unary> ::= <darg> | -<darg> | -<unary><darg>
<darg> ::= <digit> | <darg> <digit> | <paren>
<paren> ::= (<expr>)
<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<op1> ::= + | -
<op2> ::= * | /

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

友欢 2024-09-26 16:06:28

试试这个:

<expr>  ::= <term> | <term> <op1> <expr> 
<term>    ::= <unary> | <term> <op2> <unary> 
<unary>  ::= <value> | <op1> <value>
<darg> ::= <digit> | <darg> <digit> 
<digit> ::=  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<op1> ::= + | -
<op2> ::= * | /
<value>       ::= <darg> | ( <expr> )

这对我有用。

Try This:

<expr>  ::= <term> | <term> <op1> <expr> 
<term>    ::= <unary> | <term> <op2> <unary> 
<unary>  ::= <value> | <op1> <value>
<darg> ::= <digit> | <darg> <digit> 
<digit> ::=  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<op1> ::= + | -
<op2> ::= * | /
<value>       ::= <darg> | ( <expr> )

This worked for me.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文