diff --git a/README.md b/README.md index 5d11cb5..631b8bb 100644 --- a/README.md +++ b/README.md @@ -234,7 +234,7 @@ Bitwise operators `~` `|` `&` `^` have the same function as C/C++. 0x8^0x1; # xor ``` -Operators `=` `+=` `-=` `*=` `/=` `~=` are used in assignment expressions. +Operators `=` `+=` `-=` `*=` `/=` `~=` `^=` `&=` `|=` are used in assignment expressions. ```javascript a=b=c=d=1; @@ -243,6 +243,10 @@ a-=1; a*=1; a/=1; a~="string"; + +a^=0xff; +a&=0xca; +a|=0xba; ``` diff --git a/doc/README_zh.md b/doc/README_zh.md index 4eabb01..3a9cbd0 100644 --- a/doc/README_zh.md +++ b/doc/README_zh.md @@ -219,7 +219,7 @@ Nasal拥有基本的四种数学运算符 `+` `-` `*` `/`以及一个特别的 0x8^0x1; # 按位异或 ``` -赋值运算符`=` `+=` `-=` `*=` `/=` `~=`正如其名,用于进行赋值。 +赋值运算符`=` `+=` `-=` `*=` `/=` `~=` `^=` `&=` `|=`正如其名,用于进行赋值。 ```javascript a=b=c=d=1; @@ -228,6 +228,10 @@ a-=1; a*=1; a/=1; a~="string"; + +a^=0xff; +a&=0xca; +a|=0xba; ``` diff --git a/doc/nasal.ebnf b/doc/nasal.ebnf index c1a2334..a2f9e35 100644 --- a/doc/nasal.ebnf +++ b/doc/nasal.ebnf @@ -41,8 +41,17 @@ exprs::= ; calculation::= calculation '?' calculation ':' calculation - |or_expr - |calculation ('=' | '+=' | '-=' | '*=' | '/=' | '~=') calculation + |bitwise_or + |calculation ('=' | '+=' | '-=' | '*=' | '/=' | '~=' | '^=' | '&=' | '|=') calculation +; +bitwise_or::= + bitwise_xor '|' bitwise_xor +; +bitwise_xor::= + bitwise_and '^' bitwise_and +; +bitwise_and::= + or_expr '&' or_expr ; or_expr::= and_expr or and_expr diff --git a/main.cpp b/main.cpp index 976f9c3..74af311 100644 --- a/main.cpp +++ b/main.cpp @@ -32,14 +32,14 @@ std::ostream& help(std::ostream& out) { #endif <<"\nnasal