मेरा अनुमान है कि यह है कि आप this in the parser कम पड़ रहा है:
case '/':
if (IS_BEG()) {
lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
return tREGEXP_BEG;
}
if ((c = nextc()) == '=') {
set_yylval_id('/');
lex_state = EXPR_BEG;
return tOP_ASGN;
}
नोट दूसरा if
में nextc()
जांच। संदर्भ, tOP_ASGN
is के लिए:
%token <id> tOP_ASGN /* +=, -= etc. */
तो यह ऑपरेटर असाइन टोकन प्रयोग किया जाता है।
यह पता चलता है कि कि /=/
में
'='.scan /=/
डिवाइड असाइन ऑपरेटर (/=
) एक स्टार्ट-regex-शाब्दिक (/
) द्वारा पीछा के रूप में देखा जा रहा है।
आप इस बात से (एक अलग तरह की) मुसीबत होगा:
' ='.scan/=/
लेकिन इस:
' ='.scan(/ =/)
वहाँ अक्सर है अस्पष्टता एक विधि कॉल कोष्ठक नहीं है जब । इस मामले में, मुझे लगता है कि ऑपरेटर प्राथमिकता नियम लागू होते हैं और यह वह नहीं है जो आप उम्मीद कर रहे हैं।
मैं अपने सभी विधि कॉल पर ब्रांड्स डालता हूं क्योंकि मैं चिंता करने के लिए बहुत पुराना और क्रैकी हूं कि पार्सर कैसे व्यवहार कर रहा है।
स्रोत
2012-10-09 17:12:04
मुझे लगता है कि यह इसे ("=" स्कैन)/(= /) –
के रूप में पार्स कर रहा है यह नोट करना कि '"=" स्कैन/\ =/'भी काम करता है। –
@FrederickCheung: मुझे लगता है कि '(' = 'स्कैन)/= (/)' और यह है कि पार्सर में op = विशेष मामला गलत अनुमान लगा रहा है। शायद नहीं। –