Programming language တွေကိုလေ့လာတဲ့အခါ ဒီမှာလုံးဝ မမြင်ရတာကတော့ Language semantic ဆိုတာ ဘာမှန်းသိအောင်ကိုသင်မပေးတာ ရှိလို.ရှိမှန်းတောင်မသိတာမျိုး။
Syntax လောက်နဲ.တင်တိုင်ပတ်တယ်ဆိုတာ အဲ့တာ။ တကယ်တမ်းက Syntax တောင် subset လောက်ကိုပဲ ပြကြတာများတယ်။ အချိန်ကုန်တာကိုး။ နောက် misconception တခုက ဘာလဲဆိုတော့ Dynamic language တွေသင်ရင် လွယ်တယ်ထင်နေတာ။
အဖြစ်လောက်သင်ရင်တော့လွယ်တယ်။ ဒါပေသိ သေသေချာချာနားလည်အောင် လေ့လာမယ်ဆိုရင်တော့ static language တွေထပ် ပိုမစားသာဘူး။
ဆိုချင်တာက တခါတလေ အွန်လိုင်းမှာတွေပါလိမ့်မယ် JS မှာ ဘာနဲ.ဘာနဲ.ပေါင်း ဘာကြီးရတယ်ဟ ဘယ်လိုဖြစ်တယ်ပေါ့။
တကယ်တမ်းက သူတို.ရဲ. Spec ကိုသာဖတ်ထားရင် language semantic ကိုသာနားလည်ရင် ဥပမာ အပေါင်းဆိုပါစို. တကယ်တမ်းက လူတွေတွေးနေသလို ပေါင်းတယ်ကွာ ဆိုပြီးပေါင်းချတာမဟုတ်ဘူး သူ.မှာ တဆင့်ခြင်း လိုက်နာရတဲ့ semantic rule တွေ အဆင့်ဆင့်ရှိတယ်။ အောက်က ဟာက ECMA Script Sepciciation ကနေ ထုတ်ထားတာ JavaScript မှာ အပေါင်းဆိုတာ ဘယ်လိုအလုပ်လုပ်သွားလဲဆိုတာ
10 ဆင့်ရှိတယ်။
1. Let lref be the result of evaluating AdditiveExpression.
2. Let lval be ? GetValue(lref).
3. Let rref be the result of evaluating MultiplicativeExpression. 4. Let rval be ? GetValue(rref).
5. Let lprim be ? ToPrimitive(lval).
6. Let rprim be ? ToPrimitive(rval).
7. If Type(lprim) is String or Type(rprim) is String, then
a. Let lstr be ? ToString(lprim). b. Let rstr be ? ToString(rprim).
c. Return the String that is the result of concatenating lstr and rstr. 8. Let lnum be ? ToNumber(lprim).
9. Let rnum be ? ToNumber(rprim).
10. Return the result of applying the addition operation to lnum and rnum.
အဲ့ဒီ 10 ချက်အတိုင်းတဆင်ချင်းလုပ်သွားရတယ်။ အဲ့ဒီထဲက ဥပမာ နံပါတ် ၂ ဆိုရင် GetValue ဆိုတာ procedure သက်သက်ရှိတယ်။ ဥပမာ primitive type လား object လား အဲ့အပေါ်မူတည်ပြီး အဆင့်အဆင့်ဘာလုပ်ရမယ်ဆိုတာကို ဆုံးဖြတ်ရတယ်။သူ.မှာလဲ ၆ ဆင့်လောက်ရှိတယ်။
အဲ့တော့ အပေါင်းတောင် လွယ်သလားမေးရင် မလွယ်ဘူးပေါ့လို.ပဲဖြေရမယ်။ Programming language semantic ဆိုတာ အဲ့တာမျိုးကိုခေါ်တာ။
Semantic ရှိလို.သာ code တွေ language တွေရဲ. meaning ကိုအတိအကျ ပြောနိုင်မယ်။ Compiler, Implementation တွေကလိုက်နာနိုင်မယ်။ မဟုတ်ရင် syntax လောက်နဲ.တိုင်ပတ်နေတာပါပဲ။ ပေါင်းတယ်ဆိုတာ သချာင်္ကသင်သလို ဂဏန်း ၂လုံးပေါင်းတယ်လေ ဆိုပြီးတော့ မပြီးပါ။