int が 2 つの数値の間にあるかどうかを確認します 質問する

int が 2 つの数値の間にあるかどうかを確認します 質問する

int が 2 つの数値の間にあるかどうかを調べようとする場合、なぜこれを実行できないのですか。

if(10 < x < 20)

その代わりに、

if(10<x && x<20)

少しオーバーヘッドがかかるようです。

ベストアンサー1

1 つの問題は、3 項リレーショナル構造によって深刻なパーサーの問題が発生する可能性があることです。

<expr> ::= <expr> <rel-op> <expr> |
           ... |
           <expr> <rel-op> <expr> <rel-op> <expr>

典型的な PGS を使用してこれらの生成物を含む文法を表現しようとすると、最初の の時点でシフト削減競合が発生することがわかります<rel-op>。解析では、2 項形式または 3 項形式が使用されているかどうかを判断する前に、任意の数のシンボルを先読みして、1 秒前があるかどうかを確認する必要があります<rel-op>。この場合、競合を単純に無視することはできません。そうすると、誤った解析が発生します。

この文法が致命的に曖昧だと言っているのではありません。しかし、これを正しく処理するにはバックトラッキング パーサーが必要だと思います。これは、高速コンパイルが大きなセールス ポイントであるプログラミング言語にとっては深刻な問題です。

おすすめ記事