কেবল বন্ধনী নয়, কীওয়ার্ড দ্বারা সংজ্ঞায়িত ব্লকগুলি ফরোয়ার্ড সেক্সপকে সনাক্ত করুন


10

একটি ভাষা (জুলিয়া) যে ব্লক যেমন কীওয়ার্ড দ্বারা সংজ্ঞায়িত করেছেন for..end, begin..endপাশাপাশি প্রথম বন্ধনী, একটি ভালো উপায় যেমন একটি ব্লক উপর লাফালাফি করা কি? এছাড়াও, endশুধুমাত্র একটি ব্লক কীওয়ার্ড নয়, অন্যান্য স্থানে ব্যবহৃত বৈধ শনাক্তকারীও।

একটি উপায় হ'ল ব্লক-স্টার্টিং / ক্লোজিং রেজেক্সটি সন্ধান করা এবং সমস্ত স্ট্রিং, মন্তব্য এবং endগুলি ইত্যাদি বাদ দেওয়া , তবে এটি কিছুটা অক্ষম এবং কিছুটা কুরুচিপূর্ণ।

ইমাক্সের নিজস্ব সিনট্যাক্স পার্সিং করার কোনও উপায় কি এই জাতীয় ব্লক কীওয়ার্ডগুলি সনাক্ত forward/backward-sexpকরতে পারে , যাতে এটি স্বয়ংক্রিয়ভাবে কাজ করবে এবং যাতে কেউ দ্রুত বর্তমান ব্লকের সূচনাটি যেমন, আউটপুট থেকে বলতে পারে syntax-ppss?

[দ্রষ্টব্য: আমি নিজে ফাইলটি বিশ্লেষণ করতে কিছু মনে করি না, তবে সে ক্ষেত্রে আমি এখনও আমার ইলেসকে বাকী ইম্যাকগুলিতে কীভাবে যুক্ত করতে হবে তা জানতে চাই]]


1
আপনি এটি একবার দেখতে পারেন ruby-modeযা রুবীর জন্য অনুরূপ কিছু করে। আরেকটি বিকল্প হ'ল স্মার্টপ্যারেনগুলি হুক করা , এটি রুবি মোডের জন্য একটি বিশেষ কনফিগারেশন রয়েছে যা আপনি একটি সূচনা পয়েন্ট হিসাবে ব্যবহার করতে পারেন
ইকবাল আনসারী

উত্তর:


9

আপনি বিল্ট-ইন লাইব্রেরি এসএমআইই (সিম্পল-মাইন্ডেড ইন্ডেন্টেশন ইঞ্জিনের জন্য দাঁড়িয়ে) দেখতে পারেন। নাম সত্ত্বেও, ইন্ডেন্টেশন এটি সরবরাহ করে এমন একটি বৈশিষ্ট্য। ruby-modeসেক্সপ মুভমেন্ট এবং ইনডেন্টেশন সরবরাহ করতে এই পদ্ধতিটি অনেকগুলি মোড (সহ একটি মন্তব্যে উল্লিখিত) ব্যবহার করে ।

কোনও ভাষার জন্য এসএমআইই স্থাপন করা মোটামুটি দ্বি-পদক্ষেপের কাজ:

  • আপনার ভাষার জন্য ব্যাকরণটি সংজ্ঞায়িত করুন, একসাথে টোকেন শনাক্তকারী একটি লিক্সার সাথে;
  • ইন্ডেন্টেশন নিয়ম সংজ্ঞায়িত করুন

আপনার উদ্দেশ্যে, কেবল প্রথম পদক্ষেপের প্রয়োজন হবে!

সামগ্রিকভাবে, পার্সার এটি ইম্যাক্সে দুর্দান্তভাবে প্লাগ করে সংজ্ঞায়িত করে। উদাহরণস্বরূপ, show-parensএসএমআইই ব্যাকরণে সংজ্ঞায়িত প্যারেন-জাতীয় অভিব্যক্তিগুলি হাইলাইট করবে (কমপক্ষে ইমাসের সাম্প্রতিক পর্যায়ে পর্যাপ্ত সংস্করণে)।

নোট করুন যে আপনি এখনও syntax-ppssঘেরের পরিবেশ সম্পর্কে তথ্য পেতে ব্যবহার করতে সক্ষম হবেন না , কারণ এটি আপনাকে কেবল সিনট্যাক্স-টেবিল পার্সারের ফলাফলই দেবে। তবে সেক্সপ মুভমেন্ট ফাংশন (উদাহরণস্বরূপ up-listঅনুসরণ করা backward-sexp) প্রতিস্থাপন হতে পারে।


2

আমি এই জন্য একটি লাইব্রেরি তৈরি

একবার সংজ্ঞায়িত হয়ে গেলে, একগুচ্ছ কমান্ড উপলভ্য, পিছনে, অনুলিপি পাওয়া যায় etc.

সিউডো কোড - - সংজ্ঞায়িত

(put 'MY-FORM 'beginning-op-at
           (lambda () MY-FORWARD-MOVE-CODE))

(put 'MY-FORM 'end-op-at
     (lambda () MY-BACKWARD-MOVE-CODE))

হয়ে গেলে এটি উপলব্ধ হওয়া উচিত, অর্থাত অনুলিপি করে ফিরে আসা উচিত

(defun MY-FORM-atpt (&optional arg)
  " "
  (interactive "p")
  (ar-th 'MY-FORM arg))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.