مقایسه زبان‌های برنامه‌نویسی (نحو)

این مقایسه زبان‌های برنامه‌نویسی، ویژگی‌های نحو زبان را برای بیش از ۵۰ زبان برنامه‌نویسی رایانه مقایسه می‌کند.

## عبارات
هنگامی که زبان برنامه‌نویسی‌ای دارای عبارت است، معمولاً قراردادهایی برای موارد زیر دارد:
* جداکننده عبارات
* پایان دهنده‌های عبارات
* ادامه خط

یک جداکننده عبارت، مرز بین دو عبارت دیگر را مشخص می‌کند. پایان دهنده عبارت، پایان یک عبارت را تعریف می‌کند. زبان‌هایی که انتهای خط را به عنوان پایان یک عبارت در نظر می‌گیرند، زبان‌های «خط گرا» نامیده می‌شوند.

«ادامه خط» قراردادی در زبان‌های خط گرا است که در آن کاراکتر خط جدید می‌تواند به اشتباه به عنوان یک پایان دهنده عبارت تفسیر شود. در چنین زبان‌هایی با یک دستور اجازه می‌دهند که یک عبارت در چندین خط نوشته شوند.

### ادامه خط
ادامه خط به‌طور کلی به عنوان بخشی از تحلیل واژگانی انجام می‌شود. یک خط جدید معمولاً منجر به اضافه شدن یک نشانه به جریان نشانه می‌شود، مگر اینکه ادامه خط تشخیص داده شود.

**[[نویسه فاصله خالی|فضای خالی]] – زبان‌هایی که نیازی به ادامه ندارند**
* ایدا - خطوط با نقطه ویرگول خاتمه می‌یابند
* سی شارپ - خطوط با نقطه ویرگول خاتمه می‌یابند
* جاوا اسکریپت - خطوط با نقطه ویرگول خاتمه می‌یابند (که ممکن است استنباط شود)
* لوآ
* اکمل

**[[امپرسند]] به عنوان آخرین کاراکتر خط**
* فرترن ۹۰, فرترن ۹۵, فرترن ۲۰۰۳, فرترن ۲۰۰۸

**[[بک‌اسلش|بک اسلش]] به عنوان آخرین کاراکتر خط**
* 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 و Wolfram
* `include '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 ''package'' .` `*` جاوا
* `import ''package'' . ''class''` جاوا
* `''open module''` اکمل

;
**برای دسترسی به کد مورد نیاز است**
* `import altname " ''package/name'' "` گو
* `import ''altname'' from " ''modname'' ";` جاوا اسکریپت
* `import ''module''` پایتون

## بلوک‌ها
**بلوک** نمادی برای گروهی از دو یا چند عبارت یا دیگر واحدهای کد است که به گونه‌ای مرتبط هستند که یک کل را تشکیل می‌دهند.

**آکولاد <code>{</code> . . . <code>}</code>**
* سی، سی پلاس پلاس، آبجکتیو-سی، گو، جاوا، جاوا اسکریپت / اکما اسکریپت، سی شارپ، دی، پرل، پی اچ پی (حلقه‌های `for` & `loop` ، یا ارسال یک بلوک به عنوان آرگومان)، R، Rust، اسکالا، S- Lang، سوئیفت، پاورشل، هسکل، اوتوهات‌کی

;
**پرانتز <code>(</code> . . . <code>)</code>**
* اکمل، پرولوگ، استاندارد ML

;
**کروشه <code>[</code> . . . <code>]</code>**
* اسمال‌تاک

;
‍‍‍‍‍‍‍‍‍**<code>begin</code> … <code>end</code>**
* ایدا، الگول، پاسکال، روبی، اکمل، اس‌سی‌ال، سیمولا، ارلنگ.

;
**<code>do</code> … <code>end</code>**
* پی‌ال/۱، آرای‌ایکس‌ایکس

;
**<code>do</code> … <code>done</code>**
* Bash، ویژوال بیسیک، فرترن، ویژوال پرولوگ، TUTOR

;
**<code>do</code> … <code>end</code>**
* لوآ، روبی، سید۷

;
**X … <code>end</code> (مثلاً <code>if</code> … <code>end</code>):**
* روبی (`if` ، `while` ، `until` ، `def` ، `class` ، دستورات `module`)، اکمل (حلقه‌های `for` & `while`)، متلب (شرط‌های `if` & `switch` ، حلقه‌های `for` & `while` ، عبارت `try` ، `package` ، `classdef` ، `properties` ، `methods` ، `events` ، و بلوک‌های `function`)، لوآ (`then` / `else` و `function`)

;
**(<code>begin</code> . . .)**
* اسکیم

;
**(progn ...)**
* لیسپ

;
**(<code>do</code> . . .)**
* کلوژور

;
**تو رفتگی**
* زبان‌های قوانین آف‌ساید: بو، کبرا، کافه اسکریپت، اف شارپ، هسکل (در صورت حذف پرانتزها)، لایو اسکریپت، اوکام، پایتون، 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`

## نظرات
نظرات را می‌توان بر اساس موارد زیر طبقه‌بندی کرد:
* سبک (داخلی/بلاک)
* قوانین تجزیه (نادیده گرفته شده / درون یابی / ذخیره شده در حافظه)
* بازگشتی (تودرتو/غیر تودرتو)
* موارد استفاده (رشته‌های اسنادی / نظرات پرتاب کننده / سایر موارد)

### نظرات درون خطی
نظرات درون خطی معمولاً آنهایی هستند که از یک کاراکتر دلخواه یا دنباله ای از نشانه‌ها برای نشان دادن شروع یک نظر و از خط جدید (یا پایان حط) برای نشان دادن پایان یک نظر استفاده می‌کنند.

مثال‌ها:

### بلوک نظرات
کامنت‌های بلوک معمولاً آنهایی هستند که از یک جداکننده برای نشان دادن ابتدای یک نظر و از یک جداکننده دیگر برای نشان دادن پایان یک نظر استفاده می‌کنند. در این زمینه، کاراکترهای فضای خالی و خط جدید به عنوان جداکننده محسوب نمی‌شوند.

مثال‌ها:

;

## جستارهای وابسته
* نحو سی
* نحو سی پلاس پلاس
* زبان‌های برنامه نویسی براکت، خانواده وسیعی از نحو زبان‌های برنامه نویسی
* نحو جاوا
* نحو جاوا اسکریپت
* نحو و معنای پی‌اچ‌پی
* نحو و معناشناسی پایتون

رده:مقایسه‌های زبان‌های برنامه‌نویسی