Эта статья предлагается к удалению. |
В этой статье сравнивается более 50 языков программирования по основным свойствам синтаксиса.
Выражения в языках программирования в широком смысле могут быть подразделены на 4 типа по синтаксической структуре:
Как правило в языках программирования имеются следующие соглашения по операторам:
Разделитель операторов используется для демаркации границы между двумя отдельными операторами. Терминатор операторов используется для маркировки конца отдельного оператора. Языки, которые интерпретируют конец строки как конец оператора называются однострочными[1] языками программирования.
«Продолжение строки» — это соглашение для однострочных языков о ситуациях, когда символ окончания строки может быть неправильно интерпретирован как окончание оператора. В таких языках «продолжение строки» позволяет оператору охватывать более одной строки.
Язык | Разделитель-терминатор операторов | Дополнительный разделитель[2] |
---|---|---|
ABAP | разделитель — точка '.' | |
Ада (Ada) | терминатор — точка с запятой ';' | |
Алгол (ALGOL) | разделитель — точка с запятой ';' | |
Алгол 68 (ALGOL 68) | разделитель — точка с запятой ';' и запятая ','[3] | |
APL | терминатор — новая строка | разделитель — ⋄ |
AppleScript | терминатор — новая строка | |
AutoHotkey | терминатор — новая строка | |
Бейсик (BASIC) | терминатор — новая строка | разделитель — двоеточие ':' |
Boo | терминатор — новая строка | |
Си (C) | терминатор — точка с запятой ';' | разделитель выражений — запятая ',' |
C++ | терминатор — точка с запятой ';' | разделитель выражений — запятая ',' |
C# | терминатор — точка с запятой ';' | |
Кобол (COBOL) | разделитель — пробел, иногда точка '.', имеется возможность разделять запятыми ',' и точками с запятыми ';'. | |
Cobra | терминатор — новая строка | |
CoffeeScript | терминатор — новая строка | |
D | терминатор — точка с запятой ';' | |
Eiffel | терминатор — новая строка | точка с запятой ';' |
Erlang | разделитель — двоеточие ':', терминатор — точка '.' | |
F# | терминатор — новая строка | точка с запятой ';' |
Фортран (Fortran) | терминатор — новая строка | точка с запятой ';' |
Форт (Forth) | терминатор определений слов — точка с запятой ';' | |
GFA BASIC | терминатор — новая строка | |
Go | разделитель — точка с запятой ';' (вставляется компилятором) | |
Haskell (в do-нотации) | разделитель — новая строка | |
Haskell (в do-нотации, при использовании скобок) | разделитель — точка с запятой ';' | |
Java | терминатор — точка с запятой ';' | |
JavaScript | разделитель — точка с запятой ';' (иногда неявно делится по новой строке) | |
Kotlin | разделитель — точка с запятой ';' (иногда неявно делится по новой строке) | |
Lua | разделитель — пробел (возможна точка с запятой ';') | |
Mathematica | разделитель — точка с запятой ';' | |
MATLAB | терминатор — новая строка | точка с запятой ';' или запятая ','[4] |
Object Pascal (Delphi) | разделитель — точка с запятой ';' | |
Objective-C | терминатор — точка с запятой ';' | |
OCaml | разделитель — точка с запятой ';' | |
Паскаль (Pascal) | разделитель — точка с запятой ';' | |
Perl | разделитель — точка с запятой ';' | |
Perl 6 | разделитель — точка с запятой ';' | |
PHP | терминатор — точка с запятой ';' | |
Pick Basic | терминатор — новая строка | разделитель — точка с запятой ';' |
PowerShell | терминатор — новая строка | разделитель — точка с запятой ';' |
Пролог (Prolog) | терминатор — точка '.' | |
Python | терминатор — новая строка | точка с запятой ';' |
Ruby | терминатор — новая строка | точка с запятой ';' |
Rust | терминатор операторов — точка с запятой ';' | разделитель выражений — запятая ',' |
Scala | терминатор — новая строка (возможна точка с запятой ';') | точка с запятой ';' |
Seed7 | разделитель — точка с запятой ';' (возможность использовать как терминатор) | |
Симула (Simula) | разделитель — точка с запятой ';' | |
S-Lang | разделитель — точка с запятой ';' | |
Smalltalk | разделитель — точка '.' | |
Standard ML | разделитель — точка с запятой ';' | |
Swift | разделитель — точка с запятой ';' (вставляется компилятором) | |
Visual Basic | терминатор — новая строка | разделитель — двоеточие ':' |
Visual Basic .NET | терминатор — новая строка | разделитель — двоеточие ':' |
Wolfram | разделитель — точка с запятой ';' | |
Xojo | терминатор — новая строка | |
Язык | Разделитель-терминатор операторов | Дополнительный разделитель[2] |
Операция продолжения строки обычно происходит на стадии лексического анализа: как правило символ новой строки не добавляет токен в соотв. список, если было обнаружено продолжение строки.
\
dnl
%
'
, а затем вставить символ -
в 7 м столбце (на той же позиции, на которой использовался символ *
для комментария)Импорт библиотеки — это способ добавить внешние (возможно откомпилированные) процедуры, программы или пакеты. Импорты классифицируют по уровню (модуль, пакет, класс, процедура,…) и по синтаксису (директивы, атрибуты,…)
#include file="filename"
#include "filename"
, #include <filename>
COPY filename.
load "filename"
include 'filename'
require("filename")
Import["filename"]
addpath(directory)
[10]#import "filename"
, #import <filename>
require "filename";
include "filename";
, require "filename";
include [filename] program
, #include [filename] program
source(""filename"")
include!( "filename");
with package
#include filename
use Package.Name
import package.module;
, import altname = package.module;
load module
, load module.submodule
use module
, use module, only : identifier
import altname "package/name"
import Module
, import qualified Module as M
import package.*
import altname from "modname";
, import "modname";
require("modname")
<<name
IMPORT module
@import module;
uses unit
use Module;
, use Module qw(import options);
import module
, from module import *
mod modname;
, #[path = "filename"] mod altname;
, extern crate libname;
, extern crate libname as altname;
library("package")
import package._
, import package
import module
import class
import package.class
import class from "modname";
, import {class} from "modname";
, import {class as altname} from "modname";
use Namespace\ClassName;
, use Namespace\ClassName as AliasName;
from module import class
import package.class
, import package.{ class1 => alternativeName, class2 }
, import package._
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
use Module ('symbol');
use function Namespace\function_name;
, use Namespace\function_name as function_alias_name;
from module import function
use module::submodule::symbol;
, use module::submodule::{symbol1, symbol2};
, use module::submodule::symbol as altname;
import package.class.function
, import package.class.{ function => alternativeName, otherFunction }
use const Namespace\CONST_NAME;
Вышеуказанные операторы также могут быть разделены на 2 группы — являются ли они синтаксическим удобством (просто добавляют элементам краткое название, при этом элементы всё равно доступны по своему полному названию), либо нужны для доступа к коду (без этого оператора доступ к элементам невозможен даже при наличии полного имени).
import altname "package/name"
import altname from "modname";
import module
Блок представляет собой способ группировки двух или более отдельных операторов, выражений или иных элементов кода, которые должны представлять собой целое..
{
… }
for
и loop
, передача блоков как аргументов), Rust, Scala, S-Lang, Swift, Windows PowerShell, Haskell (в do-нотации), AutoHotkeyсм. также Curly bracket programming language
(
… )
[
… ]
begin
… end
do
… end
do
… done
for
и while
), Visual Basic, Фортран, TUTOR (тело блока обязано быть с отступом), Visual Prologdo
… end
end
(напр. if
… end
):if
, while
, until
, def
, class
, module
), OCaml (циклы for
и while
), MATLAB (операторы if
и switch
, циклы for
и while
, предложение try
, блоки package
, classdef
, properties
, methods
, events
и function
), Lua (then
/ else
и function
)begin
…)do
…)if
… end if
if
… fi
, do
… done
, case
… esac
;begin
… end
, (
… )
, if
… fi
, do
… od
repeat
… until
IF
… END-IF
, PERFORM
… END-PERFORM
и т. д. для операторов; … .
для предложений.If
… End If
, For
… Next
, Do
… Loop
If
… EndIf
, For
… EndFor
, While
… EndWhile
Комментарии подразделяются по:
Как правило эти комментарии простираются до символа перевода строки, и используют оговоренную последовательность токенов для индикации начала комментария.
Примеры:
Как правило многострочные комментарии используют оговоренные последовательности символов для маркировки начала и конца комментария. В этом контексте символы пустого места или перевода строки игнорируются.
Примеры:
Символ | Языки |
---|---|
comment ~ ; |
Алгол 60, Симула |
¢ ~ ¢ ,# ~ # , co ~ co ,comment ~ comment |
Алгол 68[13][14] |
/* ~ */ |
ActionScript, AutoHotkey, Си, Си++, C#, D[15] Go, Java, JavaScript, Kotlin, Objective-C, PHP, ПЛ/1, Rexx, Rust (могут быть вложенными), Scala (могут быть вложенными), SAS, SASS, SQL, Swift, Visual Prolog, CSS |
#cs ~ #ce |
AutoIt[16] |
/+ ~ +/ |
D (могут быть вложенными)[15] |
/# ~ #/ |
Cobra (могут быть вложенными) |
<# ~ #> |
Powershell |
=begin ~ =cut |
Perl |
#`( ~ ) |
Perl6 (можно использовать любые скобки — (), <>, {}, [], зеркальные пары символов Юникода, а также символы Юникода со свойствами Ps/Pe/Pi/Pf) |
=begin ~ =end |
Ruby |
#<TAG> ~ #</TAG> , #stop ~ EOF ,#iffalse ~ #endif , #ifntrue ~ #endif ,#if false ~ #endif , #if !true ~ #endif |
S-Lang[17] |
{- ~ -} |
Haskell (могут быть вложенными) |
(* ~ *) |
ML, Mathematica, Object Pascal (Delphi), Паскаль, Seed7, Applescript, OCaml (могут быть вложенными), Standard ML (могут быть вложенными), Maple, Newspeak, F# |
{ ~ } |
Object Pascal (Delphi), Паскаль |
|# ~ #| |
Curl |
%{ ~ %} |
MATLAB[12] (символы должны быть в отдельной строке) |
#| ~ |# |
Лисп, Scheme, Racket (во всех трёх могут быть вложенными). |
--[[</code> ~ <code>]] ,--[=[ ~ ]=] |
Lua (первая форма может включаться во вторую) |
" ~ " |
Smalltalk |
(comment ~ ) |
Clojure |
C
' в первом столбце указывает на то, что строка является комментарием . Столбцы с 1-го по 5-й могут содержать число, являющееся меткой. Столбцы с 73-го по 80-й игнорируются и могут быть комментарием; ранее в этих местах наносился номер перфокарты, что позволяло отсортировать их в случае падения колоды. В Фортране 90 правило отступов было упразднено и были добавлены однострочные комментарии с использованием символа !
.*
или /
строка являлась комментарием. До версии Кобол 2002 если строка содержала в 7-м столбце символ D
или d
— это обозначало отладочную строку, которая могла игнорироваться в зависимости от режима компилирования./#
… #/
» похожие на встречающиеся в Си-подобных языках «/*
… */
», однако с некоторыми отличиями. Символ #
используется в однострочной форме комментариев «#
…» и многострочные комментарии могут быть вложенными, что удобно при комментировании больших кусков кода.|foo# ... #foo|
.=
, при условии, что такое же их число используется и в закрывающей последовательности; это позволяет реализовать множественное вложение комментариев и текстовых констант если все они используют различное количество знаков =
в обрамляющих тегах: --[[comment --[=[ nested comment ]=] ]]
. Lua игнорирует первый перенос строки, который следует сразу за открывающим тегом.#`(...)
.[18] Фактически Perl 6 позволяет использовать любые пары скобок после #`
(напр. #`(...)
, #`[...]
, #`{...}
, #`<...>
, и даже более сложные #`{{...}}
являются полноценными комментариями). Скобки также можно вкладывать внутри комментариев (напр. в конструкции #`{ a { b } c }
комментарий продолжается до последней закрывающей скобки)."""
. На самом деле они создают не комментарий, а пустой оператор с текстовой константой, который Python игнорирует (за исключением случая, когда текстовая константа — первый оператор в теле модуля, класса или функции; см docstring)#<tag>
и #</tag>
. Имя тега может быть любой алфавитно-цифровой последовательностью символов и указывать на способ обработки кода. Например, #<latex>
может указывать на документацию в формате LaTeX.#;
.*
) вся строка считается комментарием, а кавычками ("
) начинается комментарий до конца строки. Комментарии в ABAP невозможны между операторами EXEC SQL
и ENDEXEC
поскольку в SQL имеется другое применение этим символам. В большинстве диалектов SQL вместо этого используется двойной дефис (--
).Существует большое разнообразие способов объявления комментариев в исходном коде.
BlockComment
курсивом указывает многострочное тело комментария.
InlineComment
курсивом указывает однострочное тело комментария.
Язык | Однострочный комментарий | Многострочный комментарий |
---|---|---|
Ада, Eiffel, Euphoria, Occam, SPARK, ANSI SQL, и VHDL | -- InlineComment |
|
Алгол 60 (ALGOL 60) | comment BlockComment; | |
Алгол 68 (ALGOL 68) | ¢ BlockComment ¢
| |
APL | ⍝ InlineComment |
|
AppleScript | -- InlineComment |
(* BlockComment *) |
Язык ассемблера (разн.) | ; InlineComment только один пример (в большинстве ассемблеров есть только комментарии-строки) |
|
AutoHotkey | ; InlineComment |
/* BlockComment */ |
AWK, Bash, Bourne shell, C shell, Maple, R, Tcl, и Windows PowerShell | # InlineComment |
<# BlockComment #> |
Бейсик (BASIC) разл. диалекты: | 'InlineComment (not all dialects)
|
|
Си (K&R, ANSI/C89/C90), CHILL, ПЛ/1 (PL/I) и REXX | /* BlockComment */ | |
C (C99), C++, Go и JavaScript | // InlineComment |
/* BlockComment */ |
C# | // InlineComment /// InlineComment (XML комментарий-документация) |
/* BlockComment */ /** BlockComment */ (XML комментарий-документация) |
Кобол (COBOL) от I до Кобол 85 | * InlineComment (* в столбце 7) |
|
Кобол 2002 | *> InlineComment |
|
Curl | || InlineComment |
|# BlockComment #|
|
Cobra | # InlineComment |
/# BlockComment #/ (вкладываемые) |
D | // InlineComment /// Documentation InlineComment (en:ddoc комментарии) |
/* BlockComment */ /** Documentation BlockComment */ (en:ddoc комментарии)
|
DCL | $! InlineComment |
|
ECMAScript (JavaScript, ActionScript и т. д.) | // InlineComment |
/* BlockComment */ |
Форт (Forth) | \ InlineComment |
( BlockComment ) (одно и многострочные)
|
Фортран от I Фортран77 | C InlineComment (C в первом столбце) |
|
Фортран 90 | ! InlineComment |
|
Haskell | -- InlineComment |
{- BlockComment -} |
Java | // InlineComment |
/* BlockComment */
|
Лисп (Lisp) и Scheme | ; InlineComment |
#| BlockComment |# |
Lua | -- InlineComment |
--[==[ BlockComment]==] (варьируемое количество знаков =) |
Maple | # InlineComment |
(* BlockComment *) |
Mathematica | (* BlockComment *) | |
Matlab | % InlineComment |
%{ Отметьте: оба символа процент-скобка должны быть единственными не пустыми символами (пробелами, табуляциями и др.) на своих строках. |
Object Pascal (Delphi) | // InlineComment |
(* BlockComment *) { BlockComment } |
OCaml | (* BlockComment (* вкладываемые *) *) | |
Паскаль (Pascal), Модула-2, Модула-3 (Modula-2,3), Оберон (Oberon) и ML: | (* BlockComment *) | |
Perl и Ruby | # InlineComment |
=begin (=end в Ruby) (POD комментарий-документация)
|
Perl 6 | # InlineComment |
#`{
|
PHP | # InlineComment // InlineComment |
/* BlockComment */ /** документация BlockComment */ (PHP комментарий-документация) |
PILOT | R:InlineComment |
|
PLZ/SYS | ! BlockComment ! | |
PL/SQL and TSQL | -- InlineComment |
/* BlockComment */ |
Python | # InlineComment |
''' BlockComment ''' (Комментарий-документация если это первая строка модуля, класса, метода или функции) |
Rust | // InlineComment
|
/* BlockComment */ (вкладываемый)
|
SAS | * BlockComment; /* BlockComment */ | |
Seed7 | # InlineComment |
(* BlockComment *) |
Симула (Simula) | comment BlockComment; ! BlockComment; | |
Smalltalk | "BlockComment" | |
Smarty | {* BlockComment *} | |
Standard ML | (* BlockComment *) | |
TeX, LaTeX, PostScript, Erlang, Elixir and S-Lang | % InlineComment |
|
Texinfo | @c InlineComment
|
|
TUTOR | * InlineComment command $$ InlineComment |
|
Visual Basic | ' InlineComment Rem InlineComment |
|
Visual Basic .NET | ' InlineComment
|
|
Visual Prolog | % InlineComment |
/* BlockComment */ |
Wolfram | (* BlockComment *) | |
Xojo | ' InlineComment // InlineComment rem InlineComment |
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .