gpt4 book ai didi

parsing - 如何在简单语法中添加括号作为最高优先级?

转载 作者:行者123 更新时间:2023-12-04 05:13:55 25 4
gpt4 key购买 nike

我正在尝试在我的语法中添加两件事:

  • 一元减号,即“-”和
  • 括号

  • 到目前为止,这是我的语法:
    <comp>  ::= <expr> | <comp> <op0> <expr>
    <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
    <op0> ::= > | < | =< | => | =
    <op1> ::= + | -
    <op2> ::= * | /

    我已经尝试了一切,但无法弄清楚这一点。我怎样才能使一元减号处于最高优先级,接下来是括号,然后是描述的其余运算符?

    最佳答案

    我正在添加一个名为 <new> 的新变量在您当前所讨论的语法中添加三个新的产生式规则来添加 Unary minus signParentheses :

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

    通过添加括号,您将在语法中添加两个新的终结符 { (, ) }
    另外,您可以添加 <new> ::= ( <new> )如果你想生成 (-7) , (7)((6+7))喜欢表达式。(这些是有效的表达式)

    我想通知您,如果您正在编写编译器,请改用歧义语法并在 YACC 工具中添加运算符优先级,以实现高效解析

    编辑 :

    如果你想添加像 -(7) 这样的表达式这是一个有效的表达。所以 <new> ::= -<new>而不是 <new> ::= <drag>

    关于parsing - 如何在简单语法中添加括号作为最高优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14554752/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com