گروه نرم افزاری هیلتن

مهندسی نرم افزار: الگو های طراحی

الگوی طراحی Interpreter



الگو Interpreter امکان توسعه دادن نوتیشن زبان ها را به ما می دهد. این الگو این امکان را می دهد که گرامر یک زبان را تعریف و به راحتی آن را گسترش داد. الگوی مفسر یا مترجم وقتی که کار زیاد مهم نباشد بهتر است استفاده شود، ولی گسترش و مقیاس پذیری خوبی دارد. این الگو طراحی در پرژه های بزرگ و کامپایلر زبان ها استفاده نمی شود. برای مثال یک مفسر برای یک ماشین حساب مهندسی پیاده سازی نمایید.

هدف

تعریف گرامر یک زبان به صورت شی گرا برای بیان دستورات زبان و فراهم کردن مفسری که بتواند دستورات زبان را تفسیرکند.

انگیزه

الگوی که به ما کمک کند که زبان های برنامه نویسی را پردازش کنیم. این الگو برای پردازش زبان برنامه نویسی مفید هست اما برای کامپایلری که مراحل چون تحلیل لغوی، تحلیل نحوی، .... مناسب نیست.

کاربرد

• برای تفسیر زبان

• گرامر زبان ساده است.

• می توان در زمان اجرا درخت گرامر زبان را تغییر داد.

ساختار

در زیر نمودار کلاس دیاگرام الگوی Interpreter را می توان مشاهده نمود

نمودار کلاس دیاگرام الگوی Interpreter

اجزا:

Abstract Expressions: کلاسی است که به صورت انتزاعی برای هر Token تعریف می شود.

Terminal Expressions: کلاسی که به ازای هر Token تعریف می شود.

None terminal Expression: کلاسی هست که برای هر None Terminal تعریف می شود.

Context :حاوی اطلاعاتی است که برای مفسر قابل دسترسی است.

الگو های مرتبط:

Composite: درخت گرامر انتزاعی نمونه ای از الگو Composite است.

Visitor: با استفاده از الگوی Visitor می توان عملیات مختلفی را روی درخت اجرا کنید.

پیامد

• کلاس Token میانی باید همه ی قوانین خود را پوشش بدهد.

• اگر Token های زبان زیاد هستند از الگوی Flyweight استفاده کنید.

نقاط قوت:

1-قوانین این الگو بسیار ساده است

2-می توان درخت گرامر را روی دیسک سخت ذخیره نمود و بعدا بار گزاری کنید.

نقاط ضعف:

1- برای زبان های که قوانین زیاد دارند مناسب نیست







گروه برنامه نویسی هیلتن

گروه برنامه نویسی هیلتن