مقایسه زبانهای برنامهنویسی (نحو)
این مقایسه زبانهای برنامهنویسی، ویژگیهای نحو زبان را برای بیش از ۵۰ زبان برنامهنویسی رایانه مقایسه میکند.
عبارات
[ویرایش]هنگامی که زبان برنامهنویسیای دارای عبارت است، معمولاً قراردادهایی برای موارد زیر دارد:
- جداکننده عبارات
- پایان دهندههای عبارات
- ادامه خط
یک جداکننده عبارت، مرز بین دو عبارت دیگر را مشخص میکند. پایان دهنده عبارت، پایان یک عبارت را تعریف میکند. زبانهایی که انتهای خط را به عنوان پایان یک عبارت در نظر میگیرند، زبانهای «خط گرا» نامیده میشوند.
«ادامه خط» قراردادی در زبانهای خط گرا است که در آن کاراکتر خط جدید میتواند به اشتباه به عنوان یک پایان دهنده عبارت تفسیر شود. در چنین زبانهایی با یک دستور اجازه میدهند که یک عبارت در چندین خط نوشته شوند.
ادامه خط
[ویرایش]ادامه خط بهطور کلی به عنوان بخشی از تحلیل واژگانی انجام میشود. یک خط جدید معمولاً منجر به اضافه شدن یک نشانه به جریان نشانه میشود، مگر اینکه ادامه خط تشخیص داده شود.
فضای خالی – زبانهایی که نیازی به ادامه ندارند
- ایدا - خطوط با نقطه ویرگول خاتمه مییابند
- سی شارپ - خطوط با نقطه ویرگول خاتمه مییابند
- جاوا اسکریپت - خطوط با نقطه ویرگول خاتمه مییابند (که ممکن است استنباط شود)
- لوآ
- اکمل
امپرسند به عنوان آخرین کاراکتر خط
بک اسلش به عنوان آخرین کاراکتر خط
- bash[۱] و سایر پوستههای یونیکس
- پیش پردازنده C و C++
- مثمتیکا و ولفرم
- پایتون[۲]
- روبی
- جاوا اسکریپت - فقط در رشتههای تک یا دو نقل قول
بکتیک به عنوان آخرین کاراکتر خط
خط فاصله به عنوان آخرین کاراکتر خط
زیرخط به عنوان آخرین کاراکتر خط
- اوتوات
- کبرا
- ویژوال بیسیک
- Xojo
جداکننده کاما به عنوان آخرین کاراکتر خط
- روبی (نظر ممکن است به دنبال جداکننده باشد)
جداکننده براکت چپ به عنوان آخرین کاراکتر خط
- فایل بچ: شروع یک بلوک پرانتزی میتواند ادامه خط را مجاز کند[۳]
- روبی: پرانتز چپ، کروشه چپ، یا آکولاد چپ
اپراتور به عنوان آخرین شیء خط
- روبی (نظر ممکن است به دنبال اپراتور باشد)
اپراتور به عنوان اولین کاراکتر خط ادامهدار
- اوتوهاتکی: هر عملگر عبارتی به جز ++ و -- و همچنین کاما یا نقطه[۴]
بک اسلش به عنوان کاراکتر اول خط ادامهدار
برخی از شکلهای نظر درون خطی به عنوان ادامه خط عمل میکند
- توربو اسمبلر:
\
- ام۴:
dnl
- تک:
%
[پایان و شروع] با استفاده از نقل قولهای معمولی
- پیش پردازنده C و C++: رشته بهطور معمول به پایان میرسد و با شروع با یک نقل قول در خط بعدی ادامه مییابد.
کتابخانهها
[ویرایش]وارد کردن کتابخانه راهی برای خواندن عبارات، برنامهها یا بستههای خارجی، احتمالاً کامپایل شدهاست. وارد کردن یک کتابخانه را میتوان بر اساس سطح (ماژول، بسته، کلاس، عبارات،...) و بر اساس نحو (نام دستورالعمل، ویژگیها) طبقهبندی کرد.
وارد کردن فایل
addpath( directory )
متلب[۵]COPY filename.
کوبول:-include(" filename ").
پرولوگ#include file=" filename "
ایاسپی#include " filename "
اوتوهاتکی، اوتوات، سی، سی پلاس پلاس#include < filename >
اوتوهاتکی، اوتوات، سی، سی پلاس پلاس#import " filename "
آبجکتیو-سی#import < filename >
آبجکتیو-سیImport["filename"]
زبان Mathematica و Wolframinclude 'filename'
فرترنinclude " filename ";
پیاچپیinclude [filename] program
، پیک بیسیک#include [filename] program
پیک بیسیکinclude!(" filename ");
راستload " filename "
روبیload %filename
ردrequire(" filename ")
لوآrequire " filename ";
پرل، پی اچ پیrequire "filename"
روبیsource(""filename"")
آر
وارد کردن بسته
#include filename
سی، سی پلاس پلاس#[path = " filename "] mod altname;
راست@import module;
آبجکتیو-سی<< name
مثمتیکا و ولفرم:-use_module(module).
پرولوگfrom module import *
پایتونextern crate libname;
راستextern crate libname as altname;
راستmod modname;
راستlibrary(" package ")
آرIMPORT module
اوبرونimport altname " package/name "
گو:import package.module;
دیimport altname = package.module;
دیimport Module
هسکلimport qualified Module as M
هسکلimport package .
*
جاوا، متلب، کاتلینimport " modname ";
جاوا اسکریپتimport altname from " modname ";
جاوا اسکریپتimport package
اسکالاimport package.
_
اسکالاimport module
سوئیفتimport module
پایتونrequire(" modname ")
لوآrequire "gem"
روبیuse module
فرترن ۹۰+use module, only: identifier
فرترن ۹۰ +use Module;
پرلuse Module qw( import options );
پرلuse Package .
Name
کبراuses unit
پاسکالwith package
ایدا
وارد کردن کلاس
from module import class
پایتونimport package . class
جاوا، متلب، کاتلینimport class from " modname ";
جاوا اسکریپتimport { class } from " modname ";
جاوا اسکریپتimport { class as altname } from " modname ";
جاوا اسکریپتimport package . class
، اسکالاimport package .{ class1 => alternativeName, class2 }
اسکالاimport package .
_
اسکالاuse Namespace\ClassName;
پی اچ پیuse Namespace\ClassName as AliasName;
پی اچ پی
وارد کردن رویه/تابع
from module import function
پایتونimport package.module: symbol;
دیimport package.module: altsymbolname = symbol;
دیimport Module ( function )
هسکلimport function from "modname";
جاوا اسکریپتimport { function } from " modname ";
جاوا اسکریپتimport { function as altname } from " modname ";
جاوا اسکریپتimport package . function
متلبimport package . class . function
اسکالاimport package . class .{ function => alternativeName, otherFunction }
اسکلاuse Module ('symbol');
پرلuse function Namespace\function_name;
پی اچ پیuse Namespace\function_name as function_alias_name;
پی اچ پیuse module:: submodule:: symbol;
راستuse module:: submodule::{ symbol1, symbol2 };
راستuse module:: submodule:: symbol as altname;
راست
راحتی نحوی
برای دسترسی به کد مورد نیاز است
import altname " package/name "
گوimport altname from " modname ";
جاوا اسکریپتimport module
پایتون
بلوکها
[ویرایش]بلوک نمادی برای گروهی از دو یا چند عبارت یا دیگر واحدهای کد است که به گونهای مرتبط هستند که یک کل را تشکیل میدهند.
آکولاد {
. . . }
- سی، سی پلاس پلاس، آبجکتیو-سی، گو، جاوا، جاوا اسکریپت / اکما اسکریپت، سی شارپ، دی، پرل، پی اچ پی (حلقههای
for
&loop
، یا ارسال یک بلوک به عنوان آرگومان)، R، Rust، اسکالا، S- Lang، سوئیفت، پاورشل، هسکل، اوتوهاتکی
پرانتز (
. . . )
کروشه [
. . . ]
begin
… end
do
… end
- پیال/۱، آرایایکسایکس
do
… done
- Bash، ویژوال بیسیک، فرترن، ویژوال پرولوگ، TUTOR
do
… end
X … end
(مثلاً if
… end
):
- روبی (
if
،while
،until
،def
،class
، دستوراتmodule
)، اکمل (حلقههایfor
&while
)، متلب (شرطهایif
&switch
، حلقههایfor
&while
، عبارتtry
،package
،classdef
،properties
،methods
،events
، و بلوکهایfunction
)، لوآ (then
/else
وfunction
)
(begin
. . .)
(progn ...)
(do
. . .)
تو رفتگی
- زبانهای قوانین آفساید: بو، کبرا، کافه اسکریپت، اف شارپ، هسکل (در صورت حذف پرانتزها)، لایو اسکریپت، اوکام، پایتون، Nemerle، نیم، اسکالا (اختیاری، مانند Nemerle)
- زبانهای نوشتار آزاد: اکثر نوادگان الگول (از جمله سی، پاسکال و پرل). زبانهای لیسپ
سایر
- ایدا، ویژوال بیسک، سید۷:
if
…end if
- ایپیال
:If
. . .:EndIf
یا:If
. . .:End
- بش و پوسته بورن و پوسته کرن:
if
…fi
,do
…done
,case
…esac
; - الگول۶۸:
begin
…end
,(
…)
,if
…fi
,do
…od
- لوآ، پاسکال، Modula-2, سید۷:
repeat
…until
- کوبول:
IF
. . .END-IF
،PERFORM
. . .END-PERFORM
، و غیره برای عبارات..
برای جملات. - ویژوال بیسیک دات نت:
If
. . .End If
،For
. . .Next
،Do
. . .Loop
- اسمال بیسیک:
If
. . .EndIf
،For
. . .EndFor
,While
. . .EndWhile
نظرات
[ویرایش]نظرات را میتوان بر اساس موارد زیر طبقهبندی کرد:
- سبک (داخلی/بلاک)
- قوانین تجزیه (نادیده گرفته شده / درون یابی / ذخیره شده در حافظه)
- بازگشتی (تودرتو/غیر تودرتو)
- موارد استفاده (رشتههای اسنادی / نظرات پرتاب کننده / سایر موارد)
نظرات درون خطی
[ویرایش]نظرات درون خطی معمولاً آنهایی هستند که از یک کاراکتر دلخواه یا دنباله ای از نشانهها برای نشان دادن شروع یک نظر و از خط جدید (یا پایان حط) برای نشان دادن پایان یک نظر استفاده میکنند.
مثالها:
نماد | زبانها |
---|---|
C
|
فرترن I تا فرترن ۷۷ (C در ستون ۱) |
REM
|
بیسیک، فایلهای بچ |
::
|
فایلهای بچ، COMMAND.COM، خط فرمان |
NB.
|
جی; از مخفف متداول (از لحاظ تاریخی) Nota bene، لاتین به معنای "خوب توجه داشته باشید"(note well). |
⍝
|
ایپیال |
#
|
پوسته بورن و سایر پوستههای یونیکس، کبرا، پرل، پایتون، روبی، سید۷، پاورشل، پیاچپی، آر، ساخت، میپل، الیکسیر، جولیا، نیم[۶] |
%
|
تک، پرولوگ، متلب،[۷] ارلنگ، S-Lang، ویژوال پرولوگ، پست اسکریپت |
//
|
اکشن اسکریپت، سی (C99)، سی پلاس پلاس، سی شارپ، دی، اف شارپ، گو، جاوا، جاوا اسکریپت، کاتلین، آبجت پاسکال (دلفی)، آبجکتیو-سی، پیاچپی، راست، اسکالا، ساس، سوئیفت، Xojo |
'
|
مانکی، ویژوال بیسیک، ویبی اسکریپت، اسمال بیسیک، گامباس، Xojo |
!
|
فرترن، بیسیک پلاس، اینفور، پیک بیسک |
;
|
اسمبلی اکس۸۶, اوتوهاتکی، اوتوات، Lisp, لیسپ معمولی، کلوژر، ریبل، رد، Scheme |
--
|
ایفوریا، هسکل، اسکیوال، ایدا، اپل اسکریپت، ایفل، لوآ، ویاچدیال، اسجیامال، PureScript, الم |
*
|
اسمبلر S/360 (* در ستون ۱)، کوبول I تا کوبول ۸۵، PAW، فرترن IV تا فرترن ۷۷ (* در ستون ۱)، پیک بیسیک، جیایاماس (* در ستون ۱) |
||
|
کرل |
"
|
ویم، آباپ |
\
|
فورث |
*>
|
کوبول ۹۰ |
بلوک نظرات
[ویرایش]کامنتهای بلوک معمولاً آنهایی هستند که از یک جداکننده برای نشان دادن ابتدای یک نظر و از یک جداکننده دیگر برای نشان دادن پایان یک نظر استفاده میکنند. در این زمینه، کاراکترهای فضای خالی و خط جدید به عنوان جداکننده محسوب نمیشوند.
مثالها:
نماد | زبانها |
---|---|
comment ~ ;
|
الگول ۶۰، سیمولا |
¢ ~ ¢ ،# ~ # , co ~ co ,comment ~ comment
|
الگول۶۸[۸][۹] |
/* ~ */
|
اکشن اسکریپت، اوتوهاتکی، سی، سی++، سی شارپ، دی،[۱۰] گو، جاوا، جاوا اسکریپت، کاتلین، آبجکتیو-سی، پیاچپی، PL/I، پرولوگ، رکس، راست (قابل تودرتو)، اسکالا (قابل تودرتو), ساس (SAS)، ساس (SASS)، اسکیوال، سوئیفت (میتواند تودرتو باشد) ویژوال پرولوگ، سیاساس |
#cs ~ #ce
|
اوتوات[۱۱] |
/+ ~ +/
|
دی (میتواند تو در تو باشد)[۱۰] |
/# ~ #/
|
کبرا (قابل تودرتو است) |
< # ~ # >
|
پاورشل |
<! -- ~ -- >
|
اچتیامال، اکسامال |
=begin ~ =cut
|
پرل |
#`( ~ )
|
راکو |
=begin ~ =end
|
روبی |
#< TAG > ~ #</ TAG > , #stop ~ EOF ,#iffalse ~ #endif ~ #ifntrue #endif #if false ~ #endif , #if !true ~ #endif
|
S-Lang[۱۲] |
{- ~ -}
|
هسکل (می توان تودرتو) |
(* ~ *)
|
دلفی، امال، مثمتیکا، آبجکت پاسکال، پاسکال، سید۷، Applescript، OCaml (قابل تودرتو)، استاندارد امال (قابل تودرتو)، Maple، نیواسپیک، اف شارپ |
{ ~ }
|
دلفی، آبجکت پاسکال، پاسکال، رد |
{# ~ #}
|
نونجاکس، ترکه |
{{! ~ }}
|
سبیل، دسته |
{{! -- ~ --}}
|
هندلبارس (نمیتوان تودرتو باشد، اما ممکن است حاوی {{ و }} )باشد)
|
|# ~ #|
|
کرل |
%{ ~ %}
|
MATLAB[۷] (نمادها باید در یک خط جداگانه باشند) |
#| ~ |#
|
لیسپ، اسکیم، راکت (در هر سه قابل تودرتو هستند). |
#= ~ =#
|
جولیا[۱۳] |
#[ ~ ]#
|
نیم[۱۴] |
-- [[ ~ ]] ،--[=[ ~ ]=] ،--[= . . =[ ~ ]= . . . =]
|
لوآ (پرانتزها میتوانند هر تعداد منطبق = کاراکتر داشته باشند؛ میتوانند در جداکنندههای غیر منطبق تو در تو قرار گیرند) |
" ~ "
|
اسمالتاک |
(comment ~ )
|
کلوژر |
جستارهای وابسته
[ویرایش]- نحو سی
- نحو سی پلاس پلاس
- زبانهای برنامه نویسی براکت، خانواده وسیعی از نحو زبانهای برنامه نویسی
- نحو جاوا
- نحو جاوا اسکریپت
- نحو و معنای پیاچپی
- نحو و معناشناسی پایتون
- ↑ Bash Reference Manual, 3.1.2.1 Escape Character
- ↑ Python Documentation, 2. Lexical analysis: 2.1.5. Explicit line joining
- ↑ https://ss64.com/nt/syntax-brackets.html
- ↑ "Scripts - Definition & Usage | AutoHotkey".
- ↑ For an M-file (MATLAB source) to be accessible by name, its parent directory must be in the search path (or current directory).
- ↑ "Nim Manual".
- ↑ ۷٫۰ ۷٫۱ "Mathworks.com". Archived from the original on 21 November 2013. Retrieved 25 June 2013. خطای یادکرد: برچسب
<ref>
نامعتبر؛ نام «Mathworks.com» چندین بار با محتوای متفاوت تعریف شده است. (صفحهٔ راهنما را مطالعه کنید.). - ↑ "Algol68_revised_report-AB.pdf on PDF pp. 61–62, original document pp. 121–122" (PDF). Retrieved 27 May 2014.
- ↑ "HTML Version of the Algol68 Revised Report AB". Archived from the original on 17 March 2013. Retrieved 27 May 2014.
- ↑ ۱۰٫۰ ۱۰٫۱ "DLang.org, Lexical". Retrieved 27 May 2014.
- ↑ "AutoItScript.com Keyword Reference, #comments-start". Retrieved 27 May 2014.
- ↑ "slang-2.2.4/src/slprepr.c – line 43 to 113". Retrieved 28 May 2014.
- ↑ "Punctuation · The Julia Language".
- ↑ "Nim Manual".