簡體   English   中英

有限域中的計算器語法

[英]Grammar of calculator in a finite field

除了一件事之外,我還有一個工作的計算器:一元運算符“-”。

必須在兩種不同的情況下對它進行評估和處理:

  1. 當還有這樣的表達時-(3 + 3)
  2. 如果沒有:-3

對於情況1,我想得到一個后綴輸出3 3 +-對於情況2,我想在這個字段中得到這個令牌的正確值,所以例如在Z10中它是10-3 = 7。

我目前的想法:

E:  ...
    |   '-' NUM %prec NEGATIVE      { $$ = correct(-yylval); appendNumber($$);          }
    |   '-' E %prec NEGATIVE        { $$ = correct(P-$2); strcat(rpn, "-");                                 }
    |   NUM     { appendNumber(yylval); $$ = correct(yylval); }

在NUM是令牌的情況下,但顯然編譯器說有沖突,reduce / reduce是因為在某些情況下E也可以是NUM,盡管它可以正常工作,但我想擺脫編譯器警告。

必須在兩種不同的情況下對它進行評估和處理:

不,不是。 情況並不明顯。

- E- NUM均不正確。 正確的語法如下:

primary
    : NUM
    | '-' primary
    | '+' primary /* for completeness */
    | '(' expression ')'
    ;

通常,這應該實現為兩個規則(偽代碼,我不知道野牛語法):

這是表達式的“終端”元素的可能規則。 自然地,用括號括起來的表達式會導致遞歸到最高規則:

Element => Number
           | '(' Expression ')'

一元減號(以及一元加號!)在生產堆棧(語法規則)中僅處於較高級別:

Term =>    '-' Element
           | '+' Element
           | Element

自然地,它可以分解成所有可能的組合,例如'-' Number'-' '(' Expression ')' ,同樣帶有'+'並且完全沒有任何一元運算符。

假設我們要加/減和乘/除。 然后,其余語法將如下所示:

Expression => Expression '+' MultiplicationExpr
              | Expression '-' MultiplicationExpr
              | MultiplicationExpr

MultiplicationExpr => MultiplicationExpr '*' Term
                      | MultiplicationExpr '/' Term
                      | Term

為了完整性:

碼頭:

  • Number

非終端:

  • Expression
  • Element
  • Term
  • MultiplicationExpr

Number是一個終端,應匹配這樣的正則表達式[0-9]+ 換句話說,它解析減號-始終為正整數(或零)。 負整數是通過匹配令牌的'-' Number序列來計算的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM