এটি এমন একটি প্রশ্নের ধারাবাহিক অংশ যা অ্যাবস্ট্রাকশন প্রকল্প নামে একটি প্রকল্পকে কেন্দ্র করে, যার লক্ষ্য ফ্রেমওয়ার্ক আকারে ভাষা ডিজাইনে ব্যবহৃত ধারণাগুলি বিমূর্ত করা।
স্ট্রাকচারাল টাইপ সম্পর্কিত এটির সাথে সম্পর্কিত অন্য একটি পৃষ্ঠা এখানে দেখা যাবে । কাঠামো এবং পোস্টের যথাযথ স্থান সম্পর্কে তদন্তের সাথে সম্পর্কিত মেটা-বিষয় এখানে পাওয়া যাবে ।
একটি ভাষা বিকাশ ফ্রেমওয়ার্ক ব্যবহার করা কত সহজ হওয়া উচিত?
আমি বড় আকারের কোড জেনারেশন ফ্রেমওয়ার্ক লিখেছি যাতে ভাষা-নির্দিষ্ট সংকলকটিতে ফলাফল পাঠানোর ক্ষমতাও অন্তর্ভুক্ত ছিল। ব্যবহারের স্বাচ্ছন্দ্যের বিষয়টি এরকম একটি কাঠামোর উদাহরণ থেকে উঠে আসে: কোডডোম বা কোড ডকুমেন্ট অবজেক্ট মডেল।
এটি মাইক্রোসফ্ট দ্বারা রচিত একটি কাঠামো যা সাধারণ কোড কাঠামোগুলি বর্ণনা করে, তবে সাধারণত অনেক কিছু বাদ পড়ে (অভিব্যক্তি জবরদস্তি) এবং নির্দিষ্ট কিছু নির্মাণের উপস্থাপনে কিছুটা বিমূর্ত হতে থাকে, আপনি যা করছেন তার উপর ভিত্তি করে খারাপ কোড নির্মূল করতে: CodeDOM দুর্বল emitting ঘাঁটা PrivateImplementationType
উপর CodeMemberMethod
যখন টাইপ ব্যবহৃত একটি জেনেরিক ইন্টারফেস ছিল। কোডডোম ছিল আমার প্রথম কোড জেনারেটর লেখার মূল কারণ।
ফ্রেমওয়ার্কটি সহজ করার জন্য আমি যা করতে চাইছি তা হ'ল আপনার কিছু করার দরকার পরিমান হ্রাস করা এবং সেই ক্রিয়াগুলি তৈরি করা নির্দিষ্ট ধরণের বিরুদ্ধে ক্রিয়ায় মনোনিবেশ করা।
আমি যে ফ্রেমওয়ার্কটি লিখছি তা কীভাবে কাজ করছে তার একটি তুলনা করে এখানে দেখুন:
//Truncated...
/* *
* From a project that generates a lexer, this is the
* state->state transition character range selection logic.
* */
var nextChar = nextMethod.Parameters.Add(new TypedName("currentChar", typeof(char).GetTypeReference()));
//...
char start = rangeElement.B.Value.Start;
char end = rangeElement.B.Value.End;
/* *
* 'start' <= nextChar && nextChar <= 'end'
* */
currentExpression = start.LessThanOrEqualTo(nextChar).LogicalAnd(nextChar.LessThanOrEqualTo(end));
ভার্সেস কোডডোম:
//Truncated...
var nextChar = new CodeVariableReferenceExpression("nextChar");
//...
var start = new CodePrimitiveExpression(rangeElement.B.Value.Start);
var end = new CodePrimitiveExpression(rangeElement.B.Value.End);
currentExpression = new CodeBinaryOperatorExpression(new CodeBinaryOperatorExpression(start, CodeBinaryOperatorType.LessThanOrEqual, nextChar), CodeBinaryOperatorType.BooleanAnd, new CodeBinaryOperatorExpression(nextChar, CodeBinaryOperatorType.LessThanOrEqual, end));
কাঠামোর কেন্দ্রবিন্দু ভাষা উত্সাহীদের পাশাপাশি কোড বা অ্যাপ্লিকেশন তৈরিতে আগ্রহী is সংকলন, কোড উত্পন্নকরণ, এবং ভাষা বিকাশের উপর তার ফোকাস দেওয়া, কাঠামোর ব্যবহারের স্বাচ্ছন্দ্যে বা কাঁচা শক্তির উপর ফোকাস করা উচিত?
আমার প্রাথমিক লক্ষ্যটি এই জাতীয় সরঞ্জামগুলির প্রাপ্যতা বৃদ্ধি করা, যাতে ডোমেনে আগ্রহী তাদের নিজস্ব ভাষা কেন্দ্রিক প্রকল্পগুলিতে কাজ শুরু করার আগে ভাষা তত্ত্বের ডোমেনটিতে প্রচুর অভিজ্ঞতার প্রয়োজন হয় না।
প্রদত্ত যে আমি কাঠামোর লেখক, "ব্যবহারযোগ্যতা" সম্পর্কে আমার দৃষ্টিভঙ্গি পক্ষপাতদুষ্ট। সুতরাং, আমি অন্যটি জিজ্ঞাসা করতে হবে যদি ফোকাস এবং লক্ষ্য প্রকল্পের সাথে সম্পর্কিত নয় এমন অন্যদের বোঝায়।