Эта статья предлагается к удалению. |
В этой статье сравнивается более 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] programsource(""filename"")include!( "filename");with package#include filenameuse Package.Nameimport package.module;, import altname = package.module;load module, load module.submoduleuse module, use module, only : identifierimport altname "package/name"import Module, import qualified Module as Mimport package.*import altname from "modname";, import "modname";require("modname")<<nameIMPORT module@import module;uses unituse 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 packageimport moduleimport classimport package.classimport class from "modname";, import {class} from "modname";, import {class as altname} from "modname";use Namespace\ClassName;, use Namespace\ClassName as AliasName;from module import classimport 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.functionuse Module ('symbol');use function Namespace\function_name;, use Namespace\function_name as function_alias_name;from module import functionuse 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 … enddo … enddo … donefor и while), Visual Basic, Фортран, TUTOR (тело блока обязано быть с отступом), Visual Prologdo … endend (напр. 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 ifif … fi, do … done, case … esac;begin … end, ( … ), if … fi, do … odrepeat … untilIF … END-IF, PERFORM … END-PERFORM и т. д. для операторов; … . для предложений.If … End If, For … Next, Do … LoopIf … 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 | * InlineCommentcommand $$ InlineComment |
|
| Visual Basic | ' InlineCommentRem InlineComment |
|
| Visual Basic .NET | ' InlineComment
|
|
| Visual Prolog | % InlineComment |
/* BlockComment */ |
| Wolfram | (* BlockComment *) | |
| Xojo | ' InlineComment// InlineCommentrem InlineComment |
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .