Задача 1: Реализуйте поддержку унарного минуса

Задача 1: Реализуйте поддержку унарного минуса

<Digit> ::= [0-9]
<UnsignedInteger> ::= "0" | ([1-9] <Digit>*)
<UnaryMinus> ::= "-" <UnsignedInteger>
<Multiplier> ::= <UnsignedInteger> | <UnaryMinus>
<Multiplication> ::= ( <Multiplier> | <Multiplication> | <Division> ) "*" <Multiplier>
<Division> ::= ( <Multiplier> | <Multiplication> | <Division> ) "/" <Multiplier>
<Term> ::= <Multiplier> | <Multiplication> | <Division>
<Addition> ::= ( <Term> | <Addition> | <Subtraction> ) "+" <Term>
<Subtraction> ::= ( <Term> | <Addition> | <Subtraction> ) "-" <Term>
<Expression> ::= <Term> | <Addition> | <Subtraction>

Решение на гитхаб

Key Words for FKN + antitotal forum (CS VSU):

Допустимы несколько унарных минусов, идущие подряд

<Digit> ::= [0-9]
<UnsignedInteger> ::= "0" | ([1-9] <Digit>*)
<UnaryMinus> ::= "-"+ <Expression>
<Multiplier> ::= <UnsignedInteger> | <UnaryMinus>
<Multiplication> ::= ( <Multiplier> | <Multiplication> | <Division> ) "*" <Multiplier>
<Division> ::= ( <Multiplier> | <Multiplication> | <Division> ) "/" <Multiplier>
<Term> ::= <Multiplier> |  <Multiplication>  |  <Division> 
<Addition> ::=  ( <Term> | <Addition> | <Subtraction> ) "+" <Term> 
<Subtraction> ::=  ( <Term> | <Addition> | <Subtraction> ) "-" <Term> 
<Expression> ::= <Term> | <Addition> | <Subtraction>