`সিনট্যাক্স-পিপিএসএস-কোন ভাষার জন্য উপযুক্ত?


12

বর্তমান বাফারটি কীভাবে সংশোধন করা হয়েছে তা দেখে আমি কোনও মন্তব্যে বিন্দু কিনা তা সনাক্ত করার একটি উপায় দেখছিলাম।

স্মার্টপ্যারেন সংজ্ঞা দেয় sp-point-in-comment, যা নির্ভর করে syntax-ppss। তবে এটি মনে হয় syntax-ppssএবং এটি parse-partial-sexpএস-এক্সপ্রেশন না ব্যবহার করেও নির্বিচারে ভাষার জন্য ব্যবহার করা যেতে পারে।

উদাহরণস্বরূপ, এই পাইথন:

x = 1
# I'm a comment
y = 2

মন্তব্যের ভিতরে পয়েন্ট স্থাপন এবং মূল্যায়ন (if (nth 4 (syntax-ppss)) 'comment 'not-comment)সঠিকভাবে কাজ করে।

কি syntax-ppssকোনো প্রোগ্রামিং মোডের জন্য কাজ করে? কেন ডকাস্টারিংগুলি এস-এক্সপ্রেশন নিয়ে আলোচনা করে?


1
আমি এটি পুরোপুরি অন্বেষণ করেছি তা নয়, তবে এখনও আমি এমন একটি ভাষা খুঁজে পেয়েছি যাতে এটি কার্যকর হয় না। এমনকি লেটেক্সের মতো পাঠ্য-উত্পন্ন মোডেও এটি আমার পক্ষে ভাল কাজ করেছে।
মালবারবা

উত্তর:


13

ঠিক আছে, এস-এক্সপ্রেশনগুলি মূলত "অ্যাবস্ট্রাক্ট সিনট্যাক্স", এই অর্থে যে এগুলি কেবল বিমূর্ত সিনট্যাক্স গাছের জন্য একটি কংক্রিট বাক্য গঠন এবং এইভাবে যে কোনও ভাষা এস-এক্সপ্রেশন হিসাবে উপস্থাপিত হতে পারে এবং এস-এক্সপ্রেশন কমান্ড দিয়ে ম্যানিপুলেটেড হতে পারে। সুতরাং, syntax-ppss"সেক্সপ্স" এর কথা বলা কেবল বিমূর্ত সিনট্যাক্স ট্রি সম্পর্কে কথা বলার লিস্প উপায়।

ব্যবহারিকভাবে, যদিও syntax-ppssসাধারণত কোনও মোডের জন্য কাজ করে না। এটি মূলত লিস্প-জাতীয় ভাষাগুলিতে লক্ষ্যবস্তু এবং যদি কোনও ভাষার কংক্রিট ভাষা সেক্সপ্স থেকে খুব বেশি বিচ্যুত হয় তবে ভাষাটি ম্যানিপুলেট করার জন্য সেক্সপ কমান্ডগুলি ব্যবহার করা আর বেশি অর্থবোধ করে না। এটি কাজ করবে, তবে বিমূর্ত প্রতিনিধিত্ব এবং কংক্রিট সিনট্যাক্সের মধ্যে খুব বড় ব্যবধান থাকবে যা সর্বাধিক আদেশকে পাল্টা স্বজ্ঞাত করে তুলবে।

তবে এর অন্তর্নিহিত কিছু অবকাঠামোগুলি syntax-ppssমোটামুটি জেনেরিক। প্রধান মোডগুলি সাধারণত এটিতে প্লাগ করার জন্য কঠোর চেষ্টা করে, কারণ এটি তাদের অনেকগুলি অন্তর্নির্মিত ইমাসাসের বৈশিষ্ট্যগুলির সাথে দুর্দান্তভাবে কাজ করে এবং স্মার্টপারেন্সের মতো অন্যান্য 3 য় পক্ষের প্যাকেজগুলির জন্য জেনেরিক ইন্টারফেস সরবরাহ করে।

উল্লেখযোগ্যভাবে, স্ট্রিং এবং মন্তব্যের জন্য সিনট্যাক্স টেবিলেরsyntax-ppss উপর নির্ভর করে । সিনট্যাক্স টেবিলগুলি তাদের সিনট্যাক্টিক শ্রেণীর দ্বারা পৃথক অক্ষরগুলিকে শ্রেণীবদ্ধ করে। জোড়াযুক্ত ডিলিমিটার, স্ট্রিং ডিলিমিটার এবং মন্তব্য চরিত্রগুলির জন্য ক্লাস রয়েছে।

স্ট্রিং এবং মন্তব্যের কাঠামো প্রায় সমস্ত প্রোগ্রামিং ভাষায় মোটামুটি একই রকম: স্ট্রিংগুলি সাধারণত বিশেষ ডিলিমিটারগুলিতে সাধারণত বদ্ধ থাকে। মন্তব্যে এছাড়াও বিশেষ সীমানা থাকতে পারে বা একটি নির্দিষ্ট অক্ষর দিয়ে শুরু হয়ে লাইনের শেষ পর্যন্ত প্রসারিত হতে পারে। এই স্ট্রাকচারগুলি সহজেই সিনট্যাক্স টেবিলগুলিতে ক্যাপচার করা যায় এবং প্রায় সমস্ত বড় মোডগুলি যথাযথ সিনট্যাক্স টেবিলগুলি সংজ্ঞায়িত করে, যদি কেবল ইমাসের সিনট্যাকটিক দুর্গ থেকে লাভ হয়।

সুতরাং, syntax-ppssপ্রায় কোনও ভাষায় স্ট্রিং এবং মন্তব্যের জন্য ভাল কাজ করে তবে অন্যান্য বৈশিষ্ট্যগুলির সমর্থন এবং "উপযোগিতা" পরিবর্তিত হয়।


4

@ লুনারিওরনের উত্তরের সাথে যুক্ত করে আমার মনে হয় সিনট্যাক্স-পিপিএস কেবলমাত্র ইমাসের সিনট্যাক্স টেবিল সিস্টেমের দৃ the়তার উপর নির্ভর করে, যা বেশিরভাগ ভাষায় মন্তব্য এবং স্ট্রিংয়ের জন্য কাজ করে। তবে ভাষার যদি সিনট্যাক্স থাকে যে সিনট্যাক্স টেবিলটি ক্যাপচার করতে পারে না এবং মোডটি সঠিক জায়গায় সিনট্যাক্স বৈশিষ্ট্য যুক্ত করতে পার্সার তৈরি syntax-ppssনা করে ব্যর্থ হয় would

এটি চেষ্টা করুন html-mode:

<p class="aa" id='bb'>"cc" 'dd'</p>

এবং নিম্নলিখিত কমান্ড কল:

(defun inside-string-p (&optional pos)
  "Return non-nil if inside string, else nil.
This depends on major mode having setup syntax table properly."
  (interactive)
  (let ((result (nth 3 (syntax-ppss pos))))
    (print result)
    result))

কেবল আ আ সত্য, তবে বিবিও সত্য হওয়া উচিত।

ভিতরে থাকলে nxml-mode, এর কোনওটিই সত্য হয় না, তবে কমপক্ষে আ সত্য হওয়া উচিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.