مسئولین پارک علموفناوری پردیس تصمیم دارند تا در سری رویداد بعدی المپیکفناوری، یک مسیر راه جدید برای زبانهای برنامهنویسی بومی به ویژه زبان برنامه نویسی آقای هاشمی برگزار کنند. نیما که مسئول طراحی محتوای این مسیر راه جدید و ویژه و تولید داخلی است، به دلیل کمتر شناخته شده بودن زبان برنامه نویسی آقای هاشمی، دسترسی به یک سینتکس هایلایتر (Syntax Highlighter) مناسب برای ژینگول و خوشگل کردن کدهای رویداد را ندارد و از شما برای پیاده سازی این کد هایلایتر کمک میخواهد!

جزئیات پروژه
پروژهی اولیه را از این لینک دانلود کنید.
ساختار فایلها
src
├── CommonMark
│ ├── CommonMarkConverter.php
│ └── Parser.php
├── Languages
│ ├── Hashemi
│ │ ├── HashemiLanguage.php
│ │ ├── Injections
│ │ │ └── JsonInjection.php
│ │ └── Patterns
│ │ ├── HmBuiltinPattern.php
│ │ ├── HmDoubleQuoteValuePattern.php
│ │ ├── HmFunctionCallPattern.php
│ │ ├── HmKeywordPattern.php
│ │ ├── HmMultilineCommentPattern.php
│ │ ├── HmNumberPattern.php
│ │ ├── HmOperatorPattern.php
│ │ ├── HmSinglelineCommentPattern.php
│ │ └── HmTripleDoubleQuoteStringPattern.php
├── Themes
│ ├── DefaultTheme.php
│ └── ThemeManager.php
└── Tokens
├── GroupTokens.php
├── TokenAnalyzer.php
└── TokenValidator.php
راهاندازی پروژه
برای اجرای پروژه، باید php و composer را از قبل نصب کرده باشید.
- پروژهی اولیه را دانلود و از حالت فشرده خارج کنید.
- دستور
composer installرا در پوشهی اصلی پروژه برای نصب نیازمندیها اجرا کنید. - دستور
php -S localhost:8000 -t tests/را در پوشهی اصلی پروژه اجرا کنید. پروژه از طریق آدرس http://localhost:8000 در دسترس خواهد بود.
تست پروژه
برای تست پروژه لازم است تا به مسیر /tests در مرورگر خود بروید. این صفحه یک فایل کد هاشمی را که از قبل در پروژه برای تست شما قرار داده شده هایلایت کرده و به شما نمایش میدهد.
- شما میتوانید با مقایسه کد هایلایت شده در صفحهی لود شده با کدهای هایلایت شده در تصاویر استفاده شده در سوال از درستی کارکرد کد خود اطمینان حاصل کنید.
- تست کد با استفاده از مقایسه خروجی کد هایلایت شده توسط پروژه آپلود شده توسط شما و کد هایلایت شده توسط داوری خودکار سوال مورد ارزیابی قرار خواهد گرفت.
پروژه اصلی tempestphp/highlight
در این سوال از نسخه 2.10.2 پروژه آماده کد هایلایتر tempestphp/highlight استفاده کرده و با توسعهی آن، زبان برنامه نویسی آقای هاشمی را نیز به آن اضافه خواهیم کرد. شما در این سوال قرار است تا با توجه به توضیحات ساختارهای گفته شده، با استفاده از عبارات باقاعده (Regular expressions) نواحی و اجزای مختلف یک کد را تشخیص داده و به هستهی اصلی این کد هایلایتر بگویید تا با توکن تایپ (TokenType) مناسب آن را برای شما هایلایت کند.
برسی بیشتر ساختار کد هایلایتر tempestphp/highlight (مهم، حتما مطالعه شود!)
tempestphp/highlight (مهم، حتما مطالعه شود!)برسی بیشتر ساختار نسخه 2.10.2 کد هایلایتر tempestphp/highlight
ساختار این کد هایلایتر به این شکل است که سه مفهوم اصلی به صورت languages، injections و patterns را از پیش پیادهسازی کرده است. در این بخش به برسی این بخشها میپردازیم و سپس به سراغ مواردی میرویم که از شما انتظار داریم تا در این سوال پیادهسازی کنید:
- ساختار الگوها (Patterns):
یک الگو (Pattern) نمایانگر قسمتی از کد است که باید هایلایت (Highlight) شود. یک الگو میتواند هدفش یک کلمه کلیدی مانند
returnیاclassباشد یا میتواند هر قسمتی از کد باشد، مانند یک کامنت:/* this is a comment */یا حتی فراخوانی یک تابع. هر الگو با یک کلاس ساده نمایش داده میشود که یک عبارت باقاعده (Regular expression) و یکTokenTypeدارد. عبارت Regex برای تطبیق محتوای مرتبط با این الگوی خاص استفاده میشود، در حالی کهTokenTypeیک مقدار از نوع enum است که تعیین میکند چگونه آن الگوی خاص هایلایت شود. برای برسی مثالهای بیشتر از این لینک اقدام کنید.
توجه داشته باشید که در این سوال شما صرفا قرار است تا از TokenType های پیشفرض استفاده کنید و نیازی به پیادهسازی جدیدی برای این مورد نیست. در هر بخش TokenType مربوطه به شما داده میشود تا آن را در ساختار کد قرار دهید.
-
ساختار تزریقها (Injections): ساختار بعدی مربوط به بخش تزریقها (Injections) میباشد. از تزریقها برای هایلایت کردن زبانهای مختلف در یک بلوک کد استفاده میشوند. برای مثال: HTML میتواند شامل CSS باشد که باید به شیوه درست در کنار HTML هایلایت شود. برای برسی مثالهای بیشتر از این لینک اقدام کنید. توجه داشته باشید که در این سوال شما صرفا قرار است تا در قالب
jfarzandدر کدهای زبان هاشمی خود از ساختار Json استفاده کنید. -
ساختار زبانها (Languages): آخرین ساختار در این کد هایلایتر، ساختار زبانها (Languages) میباشد که همان نماینده زبانهای برنامهنویسی است به صورت کلاسهایی همراه با پیادهسازی الگوها (Patterns) و تزریقها (Injections) میباشد. برای برسی مثالهای بیشتر از این لینک اقدام کنید. زبانی که شما در این سوال به سراغ آن خواهید رفت زبان برنامهنویسی آقای هاشمی (
HashemiLanguage) خواهد بود.
برسی بیشتر یک مثال مهم در پیاده سازی الگوها (Patterns) (مهم، حتما مطالعه شود!)
در این بخش به برسی یک مثال مهم از شیوه تشخیص و هایلایت کردن الگوها (Patterns) مشخص شده در هر کدام از بخشهای یک زبان میپردازیم. به مثال زیر از پیادهسازی هایلایت کردن namespace ها در php دقت کنید:
use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\Tokens\TokenType;
final readonly class NamespacePattern implements Pattern
{
use IsPattern;
public function getPattern(): string
{
return 'namespace (?<match>[\w\\\\]+)';
}
public function getTokenType(): TokenType
{
return TokenType::TYPE;
}
}
- در مثال بالا یک الگوی جدید با نام
NamespacePatternایجاد شده است که مسئول هایلایت کردن namespace ها میباشد. همانطور که مشاهده میکنید در تابعgetPatternیک عبارت باقاعدهreturnشده است که نمایانگر انتخابگر آن ساختار خاص (در اینجاnamespaceها) در کد میباشد. همچنین در تابعgetTokenTypeیک Enum از نوعTokenTypeبرگردانده میشود. در هر بخش مقدارTokenTypeای که باید در این ساختارreturnکنید به شما معرفی میشود. - این Regex ها باید شامل یک گروه با نام match باشند که به این صورت نوشته میشود:
(?<match>…). این گروه نمایانگر بخشی از کد است که در واقع هایلایت خواهد شد.
توجه داشته باشید که هر الگو باید یک گروه تطبیق (Capture Group) نامگذاریشده در Regex داشته باشد که نام آن "match" باشد. هسته هایلایتر محتوایی که درون این گروه تطبیق پیدا کرده است را هایلایت خواهد کرد.
برای مثال، این regex namespace (?<match>[\w\\\\]+) میگوید که هر خطی که با کلمه namespace شروع شود باید در نظر گرفته شود، اما تنها بخشی که درون گروه نامگذاریشده (?<match>…) قرار دارد هایلایت میشود اما خود واژه namespace چون در گروه match در نظر گرفته نشده است هایلایت نخواهد شد.
افزودن زبان برنامه نویسی جدید به tempestphp/highlight
شما باید پوشه Hashemi که کدهای مربوط به هایلایتر زبان هاشمی در آن قرار دارد را مطابق با مستندات این زبان و توضیحات گفته شده در بخش زیر کامل و در پایان این بخش آن را آپلود کنید. توجه کنید که هایلایتر شما حتما باید در ساختار زیر عمل کند تا نمره کامل را دریافت کند. همچنین شما تنها مجاز به ویرایش فایلهای موجود هستید و نمیتوانید فایلهای جدیدی را به این بخش اضافه کنید.
ساختار کامنتهای تکخطی در زبان هاشمی و پیادهسازی کلاس HmSinglelineCommentPattern
HmSinglelineCommentPatternساختار کامنتهای تکخطی در زبان برنامهنویسی آقای هاشمی مطابق با مستندات این زبان، مانند بسیاری از زبان های دیگر به صورت زیر میباشد:
// yek comment
شما باید کلاس HmSinglelineCommentPattern را به صورت زیر در فایلی با همین نام پیادهسازی کنید تا کد هایلایتر بتواند کامنتهای تک خطی را با استفاده از TokenType مربوط به کامنت یعنی COMMENT رنگی کند.
<?php
declare(strict_types=1);
namespace Tempest\Highlight\Languages\Hashemi\Patterns;
use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\Tokens\TokenTypeEnum;
final readonly class HmSinglelineCommentPattern implements Pattern
{
use IsPattern;
public function getPattern(): string
{
return ""; // TODO: Implement
}
public function getTokenType(): TokenTypeEnum
{
return TokenTypeEnum::TYPE; // TODO: Implement
}
}
در نهایت در صورتی که کد شما به درستی کار کند، باید مطابق تصویر زیر بخش مربوط به کامنتهای تکخطی را به درستی هایلایت کند.

ساختار کامنتهای چندخطی در زبان هاشمی و پیادهسازی کلاس HmMultilineCommentPattern
HmMultilineCommentPatternساختار کامنتهای چندخطی در زبان برنامهنویسی آقای هاشمی مطابق با مستندات این زبان، مانند بسیاری از زبان های دیگر به صورت زیر میباشد:
/*
in teke az code pardazesh nakhahad shod
*/
/**
* baraye neveshtan e mostanadat
*/
شما باید کلاس HmMultilineCommentPattern را به صورت زیر در فایلی با همین نام پیادهسازی کنید تا کد هایلایتر بتواند کامنتهای چندخطی را با استفاده از TokenType مربوط به کامنت یعنی COMMENT رنگی کند.
<?php
declare(strict_types=1);
namespace Tempest\Highlight\Languages\Hashemi\Patterns;
use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\Tokens\TokenTypeEnum;
final readonly class HmMultilineCommentPattern implements Pattern
{
use IsPattern;
public function getPattern(): string
{
return ""; // TODO: Implement
}
public function getTokenType(): TokenTypeEnum
{
return TokenTypeEnum::TYPE; // TODO: Implement
}
}
در نهایت در صورتی که کد شما به درستی کار کند، باید مطابق تصویر زیر بخش مربوط به کامنتهای چندخطی را به درستی هایلایت کند.

ساختار کلمات کلیدی در زبان هاشمی و پیادهسازی کلاس HmKeywordPattern
HmKeywordPatternکلمات کلیدی در هر زبان برنامهنویسی، کلماتی هستند که توسط این زبانها برای اعمال مختلف رزرو شدهاند. در زبان برنامهنویسی هاشمی، کلمات ta، bede، bebin، age، bood، na?، zirsakht جزو کلمات کلیدی به حساب میآیند.
شما باید کلاس HmKeywordPattern را به صورت زیر در فایلی با همین نام پیادهسازی کنید تا کد هایلایتر بتواند کلماتکلیدی را با استفاده از TokenType مربوط به آن یعنی KEYWORD رنگی کند.
<?php
declare(strict_types=1);
namespace Tempest\Highlight\Languages\Hashemi\Patterns;
use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\Tokens\TokenTypeEnum;
final readonly class HmKeywordPattern implements Pattern
{
use IsPattern;
public function getPattern(): string
{
return ""; // TODO: Implement
}
public function getTokenType(): TokenTypeEnum
{
return TokenTypeEnum::TYPE; // TODO: Implement
}
}
در نهایت در صورتی که کد شما به درستی کار کند، باید مطابق تصویر زیر بخش مربوط به کلماتکلیدی را به درستی هایلایت کند.

ساختار توابع پیشساخته در زبان هاشمی و پیادهسازی کلاس HmBuiltinPattern
HmBuiltinPatternتوابع پیشساخته در زبان برنامهنویسی آقای هاشمی مانند سایر زبانهای برنامهنویسی، مسئولیت انجام برخی موارد حیاتی از جمله چاپ یا پردازش برخی رشتههای متنی را دارند. در زبان هاشمی توابع پیشساخته به صورت کلمات azinja، bechap و jfarzand میباشند.
شما باید کلاس HmBuiltinPattern را به صورت زیر در فایلی با همین نام پیادهسازی کنید تا کد هایلایتر بتواند توابع پیشساخته را با استفاده از TokenType مربوط به آن یعنی TYPE رنگی کند.
<?php
declare(strict_types=1);
namespace Tempest\Highlight\Languages\Hashemi\Patterns;
use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\Tokens\TokenTypeEnum;
final readonly class HmBuiltinPattern implements Pattern
{
use IsPattern;
public function getPattern(): string
{
return ""; // TODO: Implement
}
public function getTokenType(): TokenTypeEnum
{
return TokenTypeEnum::TYPE; // TODO: Implement
}
}
در نهایت در صورتی که کد شما به درستی کار کند، باید مطابق تصویر زیر بخش مربوط به توابع پیشساخته را به درستی هایلایت کند.

ساختار فراخوانی و تعریف توابع در زبان هاشمی و پیادهسازی کلاس HmFunctionCallPattern
HmFunctionCallPatternفراخوانیها و تعریف توابع در زبانبرنامه نویسی هاشمی به شکل زیر میباشد:
bebin jam(alef, be) {
javab = alef + be;
bede javab;
}
bebin azinja() {
ye_adad = 100;
ye_adad_dige = 200;
natije = jam(ye_adad, ye_adad_dige);
bechap(natije);
}
- منظور از هایلایت کردن تعاریف توابع در مثال بالا، هایلایت کردن عبارت
jamدر خط اول (هنگام تعریف تابع) و در خط هشتم (در فراخوانی تابع) میباشد.
شما باید کلاس HmFunctionCallPattern را به صورت زیر در فایلی با همین نام پیادهسازی کنید تا کد هایلایتر بتواند تعریف و فراخوانی توابع را با استفاده از TokenType مربوط به آن یعنی PROPERTY رنگی کند.
<?php
declare(strict_types=1);
namespace Tempest\Highlight\Languages\Hashemi\Patterns;
use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\Tokens\TokenTypeEnum;
final readonly class HmFunctionCallPattern implements Pattern
{
use IsPattern;
public function getPattern(): string
{
return ""; // TODO: Implement
}
public function getTokenType(): TokenTypeEnum
{
return TokenTypeEnum::TYPE; // TODO: Implement
}
}
در نهایت در صورتی که کد شما به درستی کار کند، باید مطابق تصویر زیر بخش مربوط به فراخوانی و تعریف توابع را به درستی هایلایت کند.

ساختار استفاده از اعداد در زبان هاشمی و پیادهسازی کلاس HmNumberPattern
HmNumberPatternساختار دیگری که شما باید در این هایلایتر پیادهسازی کنید مربوط به بخش استفاده از اعداد در این زبان میباشد. اعداد میتوانند در بخشهای مختلف کد از جمله در شرطها، در مقداردهی متغیرها و در فراخوانی توابع استفاده شوند. در زبان هاشمی تنها از اعداد صحیح، اعداد اعشاری و نمایش اعداد به صورت نمادگذاری علمی پشتیبانی میشود.
bebin factorial(n) {
age (n < 1) bood {
bede 1;
}
bede factorial(n-1) * n;
}
bebin tarkib(k, n) {
soorat = factorial(n);
makhraj = factorial(k) * factorial(n-k);
javab = soorat / makhraj;
bede javab;
}
bebin azinja() {
f = tarkib(5, 2);
bechap(f);
}
- مثالی از استفاده از اعداد در فراخوانی توابع، شرط ها و ... در زبان برنامه نویسی هاشمی
شما باید کلاس HmNumberPattern را به صورت زیر در فایلی با همین نام پیادهسازی کنید تا کد هایلایتر بتواند تعریف و فراخوانی توابع را با استفاده از TokenType مربوط به آن یعنی NUMBER رنگی کند.
<?php
declare(strict_types=1);
namespace Tempest\Highlight\Languages\Hashemi\Patterns;
use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\Tokens\TokenTypeEnum;
final readonly class HmNumberPattern implements Pattern
{
use IsPattern;
public function getPattern(): string
{
return ""; // TODO: Implement
}
public function getTokenType(): TokenTypeEnum
{
return TokenTypeEnum::TYPE; // TODO: Implement
}
}
در نهایت در صورتی که کد شما به درستی کار کند، باید مطابق تصویر زیر بخش مربوط به استفاده از اعداد را به درستی هایلایت کند.

ساختار عملگرها در زبان هاشمی و پیادهسازی کلاس HmOperatorPattern
HmOperatorPatternعملگرها در زبان آقای هاشمی در سه دستهبندی به شکل عملگرهای عددی -+%/*، عملگرهای منطقی به صورتهای ==، <=، >=، !=، <، > و عملگر انتساب = باشد. توجه کنید که عملگرهای دو کاراکتری، مثلا == باید به صورت یکجا به عنوان یک عملگر در نظر گرفته شود و نه به صورت دو عملگر = و =.
age (1==1) bood {
bechap("doroste");
} na? {
bechap("dorost nist, ye fekri barash bokon");
}
adadeMan = 0;
majmoo = 0;
ta (adadeMan<11) bood {
majmoo = majmoo + adadeMan;
adadeMan = adadeMan + 1;
}
- مثالی از انواع استفادهها از عملگرها در بخشهای مختلف زبان هاشمی
شما باید کلاس HmOperatorPattern را به صورت زیر در فایلی با همین نام پیادهسازی کنید تا کد هایلایتر بتواند عملگرهای مختلف را با استفاده از TokenType مربوط به آن یعنی OPERATOR رنگی کند.
<?php
declare(strict_types=1);
namespace Tempest\Highlight\Languages\Hashemi\Patterns;
use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\Tokens\TokenTypeEnum;
final readonly class HmOperatorPattern implements Pattern
{
use IsPattern;
public function getPattern(): string
{
return ""; // TODO: Implement
}
public function getTokenType(): TokenTypeEnum
{
return TokenTypeEnum::TYPE; // TODO: Implement
}
}
در نهایت در صورتی که کد شما به درستی کار کند، باید مطابق تصویر زیر بخش مربوط به استفاده از عملگرها را به درستی هایلایت کند.

ساختار رشتهها در زبان هاشمی و پیادهسازی کلاسHmDoubleQuoteValuePattern
HmDoubleQuoteValuePatternرشتهها در زبان برنامهنویسی آقای هاشمی به صورت DoubleQuote ( " " ) مورد استفاده قرار میگیرند. شما باید هایلایتر این مورد را به صورتی پیادهسازی کنید که محتوای درون این دو علامت نقلقول به صورت درستی هایلایت شوند.
nam = "Mr ";
famil = "Hashemi";
tedadeBache = 3;
moteahel = 1==1;
mabda = "Kazeroon";
maghsad = "Neishaboor";
bebin azinja() {
bechap("Dorood Jahan");
}
- مثالی از رشتهها در زبان هاشمی
شما باید کلاس HmDoubleQuoteValuePattern را به صورت زیر در فایلی با همین نام پیادهسازی کنید تا کد هایلایتر بتواند رشتههای مختلف را با استفاده از TokenType مربوط به آن یعنی VALUE رنگی کند.
<?php
declare(strict_types=1);
namespace Tempest\Highlight\Languages\Hashemi\Patterns;
use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\Tokens\TokenTypeEnum;
final readonly class HmDoubleQuoteValuePattern implements Pattern
{
use IsPattern;
public function getPattern(): string
{
return ""; // TODO: Implement
}
public function getTokenType(): TokenTypeEnum
{
return TokenTypeEnum::TYPE; // TODO: Implement
}
}
در نهایت در صورتی که کد شما به درستی کار کند، باید مطابق تصویر زیر بخش مربوط به استفاده از رشتهها را به درستی هایلایت کند.

ساختار رشتههای چندخطی در زبان هاشمی و پیادهسازی کلاسHmTripleDoubleQuoteStringPattern
HmTripleDoubleQuoteStringPatternرشتههای چندخطی در زبان برنامهنویسی آقای هاشمی به صورت TripleDoubleQuote ( """ """ ) مورد استفاده قرار میگیرند. شما باید هایلایتر این مورد را به صورتی پیادهسازی کنید که محتوای درون این سهتاییهای علامت نقلقول به صورت درستی هایلایت شوند.
bebin azinja() {
matn_toolani = """شعر از مولانا
خنک آن قمار بازی که بباخت آنچه بودش
بنماند هیچش الا هوس قمار دیگر
""";
bechap(matn_toolani);
}
- مثالی از رشتهها در زبان هاشمی
شما باید کلاس HmTripleDoubleQuoteStringPattern را به صورت زیر در فایلی با همین نام پیادهسازی کنید تا کد هایلایتر بتواند رشتههای بلند مختلف را با استفاده از TokenType مربوط به آن یعنی VALUE رنگی کند.
<?php
declare(strict_types=1);
namespace Tempest\Highlight\Languages\Hashemi\Patterns;
use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\Tokens\TokenTypeEnum;
final readonly class HmTripleDoubleQuoteStringPattern implements Pattern
{
use IsPattern;
public function getPattern(): string
{
return ""; // TODO: Implement
}
public function getTokenType(): TokenTypeEnum
{
return TokenTypeEnum::TYPE; // TODO: Implement
}
}
در نهایت در صورتی که کد شما به درستی کار کند، باید مطابق تصویر زیر بخش مربوط به استفاده از رشتههای بلند را به درستی هایلایت کند.

ساختار تزریق Json در زبان هاشمی و پیادهسازی کلاس JsonInjection
JsonInjectionهمانطور که پیشتر در بخش برسی بیشتر کد هایلایتر به تزریقها اشاره کردیم، در زبان برنامهنویسی آقای هاشمی میتوان از Json در بین کدهای هاشمی به شکل زیر و با استفاده از jfarzand پیادهسازی کرد:
bebin azinja() {
object = jfarzand("""{"name":"Mr.Hashemi"}""");
bechap(object.name);
bechap(object.x);
}
- مثالی از تزریق Json در زبان هاشمی
شما باید کلاس JsonInjection را به صورت زیر در فایلی با همین نام پیادهسازی کنید تا کد هایلایتر بتواند تزریقهای مختلف Json را در زبان هاشمی را هایلایت کند. در ساختار تزریقها نیازی به TokenType نیست و شما باید در ساختار زیر صرفا از هایلایتر از پیش ساخته شدهی Json درون همین پکیج استفاده کنید.
<?php
declare(strict_types=1);
namespace Tempest\Highlight\Languages\Hashemi\Injections;
use Tempest\Highlight\Highlighter;
use Tempest\Highlight\Injection;
use Tempest\Highlight\IsInjection;
final readonly class JsonInjection implements Injection
{
use IsInjection;
public function getPattern(): string
{
return ""; // TODO: Implement
}
public function parseContent(string $content, Highlighter $highlighter): string
{
return $highlighter->parse($content, 'json');
}
}
در نهایت در صورتی که کد شما به درستی کار کند، باید مطابق تصویر زیر بخش مربوط به استفاده از تزریق Json را به درستی هایلایت کند.

آنچه باید آپلود کنید
- توجه: مطالعه بخش "برسی بیشتر یک مثال مهم در پیاده سازی الگوها (Patterns)" از اهمیت بالایی از جهت نحوه پیادهسازی الگوهای مختلف دارد، لذا در خواندن آن کوشا باشید.
- توجه: داوری این سوال در تستهای مختلف کدهایی شامل ساختارهای مختلف را به صورت ترکیبی به هایلایتر شما میدهد. دریافت نمره بیشتر از سوال با نسبتی از سوال که ساختار آنها را کاملا پیادهسازی کردهاید رابطه مستقیم دارد.
- توجه: تنها فایلهایی از پروژه هایلایتر شما در سیستم داوری مورد پذیرش قرار خواهد گرفت که در بخش "ساختار فایلها" به صورت رنگی مشخص شده است. سایر تغییرات در سایر فایلها بیتاثیر خواهند بود.
- توجه: پس از اعمال تغییرات، کل پروژه به غیر از پوشهی
vendorرا ZIP کرده و آپلود کنید. - توجه: نام فایل ZIP اهمیتی ندارد.
ارسال پاسخ برای این سؤال