8
コンパイラ理論の観点から、javacコンパイラはなぜx = x+++++y
という形式の文を受け入れず、x = x+++ ++y
を受け入れますか?javacが `x = x ++++++`を受け入れないのはなぜですか?
コンパイラ理論の観点から、javacコンパイラはなぜx = x+++++y
という形式の文を受け入れず、x = x+++ ++y
を受け入れますか?javacが `x = x ++++++`を受け入れないのはなぜですか?
++
は、Javaの字句解析のための有効なトークンであるため、声明x+++ ++y
はとしてトークンに解析されます:
(x)(++)(++)(+)(y)
上記:x+++++y
が無効にトークン化されるのに対し
(x)(++)(+)()(++)(y)
++
演算子は、(x++)
の結果ではない数値変数であるものにしか適用できないため、無効なjavaです。このタイプのトークン化は、maximal munchという概念の大きな例です。
から最長可能変換は、別の語彙の翻訳を希望しながら、結果が最終的に正しいプログラムを作成していない場合でも、各ステップで使用されています。
したがって、トークン化a、 - 、 - 、bが可能であっても、入力文字a - bは、文法的に正しいプログラムの一部ではないa、 - bとしてトークン化(§3.5)されます。文法的に正しいプログラムの一部。
ありがとうございました。 – DSF