यहाँ मैं जो कोशिश कर रहा हूं:
foreach_in.Rule = ToTerm ("foreach" ) + "(" + VARIABLE + "में" + list_obj + ")"; Foreach_as.Rule = ToTerm ("foreach") + "(" + list_obj + "के रूप में" + VARIABLE + ")"; For_loop.Rule = ToTerm ("for") + "(" + simple_assignment + ";" + तुलना + ";" + असाइनमेंट + ")"; If_condition.Rule = ToTerm ("यदि") + "(" + तुलना + ")"; If_else.Rule = if_condition + block + "else"; // & lt; - समस्या preset_directive.Rule = foreach_in | | Foreach_as | For_loop | If_else | if_condition; निर्देश। नियम = पूर्व निर्धारित_निर्देशिका | custom_directive; Directive_blk.Rule = निर्देश + ब्लॉक; लेकिन मुझे एक परिवर्तन-कम संघर्ष मिलता है मुझे पूरा यकीन नहीं है कि क्यों ... यह लालच से "अन्य" को पकड़ लेना चाहिए, अगर यह हो सकता है? यह बिल्कुल निश्चित नहीं है कि एक और ब्लॉक को परिभाषित करने के लिए कि यह केवल एक "if" ब्लॉक के बाद ही किया जा सकता है। मुझे लगता है कि एक if_else ब्लॉक कोड को अगर नोड और एक else नोड के साथ इष्टतम होगा क्योंकि तब मैं ' टी वापस जाने के लिए और पिछले भाई की जांच जब मैं एएसटी पार करने की कोशिश की है। यदि आप अधिक व्याकरण देखने की जरूरत है ... बस मुझे पता है एक "ब्लॉक" को मूल रूप से {blah} ( {} के बीच बयान का एक गुच्छा) के रूप में परिभाषित किया गया है।
इसे एक वैकल्पिक ब्लॉक:
custom_directive_kw.Rule = ToTerm ("custom_directive1") | "Custom_directive2"; Custom_directive.Rule = custom_directive_kw + free_args_opt; Foreach_in.Rule = ToTerm ("foreach") + "(" + + + "+" सूची +obj + "" ")" + ब्लॉक; Foreach_as.Rule = ToTerm ("foreach") + "(" + list_obj + "के रूप में" + चर + ")" + ब्लॉक; For_loop.Rule = ToTerm ("for") + "(" + simple_assignment + ";" + तुलना + ";" + असाइनमेंट + ")" + ब्लॉक; If_condition.Rule = ToTerm ("यदि") + "(" + तुलना + ")" + ब्लॉक + else_blk_opt; Else_blk.Rule = "else" + ब्लॉक; Else_blk_opt.Rule = else_blk | खाली; Preset_directive.Rule = foreach_in | Foreach_as | For_loop | if_condition; निर्देश। नियम = पूर्व निर्धारित_निर्देशिका | custom_directive; Directive_blk.Rule = डायरेक्टिव; यह पसंद नहीं है कि या तो अभी भी चेतावनी फेंकता है।
कोई बात नहीं ... विडंबना यह जादुई है PreferShiftHere () फ़ंक्शन जो कि चाल करता है। foreach_in.Rule = ToTerm ("foreach") + "(" + + + + "+ +" Foreach_as.Rule = ToTerm ("foreach") + "(" + list_obj + "के रूप में" + चर + ")" + ब्लॉक; For_loop.Rule = ToTerm ("for") + "(" + simple_assignment + ";" + तुलना + ";" + असाइनमेंट + ")" + ब्लॉक; If_condition.Rule = ToTerm ("यदि") + "(" + तुलना + ")" + ब्लॉक; If_else.Rule = if_condition + PreferShiftHere () + "और" + ब्लॉक; Preset_directive.Rule = foreach_in | Foreach_as | For_loop | If_else | if_condition; Directive_blk.Rule = preset_directive | custom_directive;
Comments
Post a Comment