Сравнение языков программирования (синтаксис)
В этом сравнении языков программирования сравниваются особенности синтаксиса (формата) более чем 50 языков программирования.
Выражения
[ редактировать ]языка программирования Выражения можно разделить на четыре синтаксические структуры:
- префиксная запись
- Лисп
(* (+ 2 3) (expt 4 5))
- инфиксная запись
- Фортран
(2 + 3) * (4 ** 5)
- суффикс, постфикс или обратная польская запись
- Форт
2 3 + 4 5 ** *
- математическое обозначение
- РЕпетитор
(2 + 3)(45) $$ note implicit multiply operator
Заявления
[ редактировать ]Когда в языках программирования есть операторы , они обычно имеют соглашения для:
- разделители операторов;
- терминаторы операторов; и
- продолжение строки
Разделитель операторов разграничивает границу между двумя отдельными операторами. Терминатор оператора определяет конец отдельного оператора. Языки, которые интерпретируют конец строки как конец оператора, называются «строчно-ориентированными» языками.
«Продолжение строки» — это соглашение в строко-ориентированных языках, где символ новой строки потенциально может быть ошибочно интерпретирован как признак завершения оператора. В таких языках это позволяет одному оператору занимать более одной строки.
Язык | Разделитель-терминатор операторов | Вторичный сепаратор-терминатор [1] |
---|---|---|
АБАП | период разделен | |
Есть | точка с запятой заканчивается | |
АЛГОЛ | точка с запятой, разделенная | |
АЛГОЛ 68 | точка с запятой и запятая разделены [2] | |
АПЛ | новая строка прекращена | [Direct_function ⋄] разделенный вторичный |
AppleScript | новая строка прекращена | |
Автогорячая клавиша | новая строка прекращена | |
БАЗОВЫЙ | новая строка прекращена | разделенная двоеточием |
Бу | новая строка прекращена | |
С | точка с запятой завершает операторы | запятая разделяет выражения |
С++ | точка с запятой завершает операторы | запятая разделяет выражения |
С# | точка с запятой заканчивается | |
КОБОЛ | разделяются пробелами, иногда точкой, при необходимости разделяются запятыми и точками с запятой. | |
Кобра | новая строка прекращена | |
Кофескрипт | новая строка прекращена | |
CSS | точка с запятой заканчивается | |
Д | точка с запятой заканчивается | |
Эйфелева | новая строка прекращена | точка с запятой |
Эрланг | отделилась толстая кишка, менструация закончилась | |
Ф# | новая строка прекращена | точка с запятой |
Фортран | новая строка прекращена | точка с запятой |
Форт | точки с запятой завершают определения слов. пробел прекращает использование слов | |
БАЗОВЫЙ ГФА | новая строка прекращена | |
Идти | через точку с запятой (вставляется компилятором) | |
Haskell (в do-нотации) | новая строка разделена | |
Haskell (в do-нотации, когда используются фигурные скобки) | точка с запятой, разделенная | |
Ява | точка с запятой заканчивается | |
JavaScript | разделяются точкой с запятой (но часто вставляются как знак завершения оператора) | |
Котлин | разделяются точкой с запятой (но иногда неявно вставляются в новую строку) | |
Два | разделяются пробелами (точка с запятой необязательно) | |
Математика также называется Вольфрам | точка с запятой, разделенная | |
МАТЛАБ | новая строка прекращена | точка с запятой или запятая [3] |
Свинка также называется М | новая строка завершает область действия строки, что наиболее близко к «инструкции», которую имеет M. | пробел разделяет/оканчивает команду, позволяя следовать другой команде |
Nim | новая строка прекращена | |
Объектный Паскаль ( Делфи ) | точка с запятой, разделенная | |
Цель-C | точка с запятой заканчивается | |
OCaml | точка с запятой, разделенная | |
Паскаль | точка с запятой, разделенная | |
Перл | точка с запятой, разделенная | |
PHP | точка с запятой заканчивается | |
Выберите базовый | новая строка прекращена | точка с запятой, разделенная |
PowerShell | новая строка прекращена | точка с запятой, разделенная |
Пролог | через запятую (союз), через точку с запятой (дизъюнкция), точка в конце (предложение) | |
Питон | новая строка прекращена | точка с запятой |
Р | новая строка прекращена [4] | точка с запятой [4] |
Раку | точка с запятой, разделенная | |
Красный | разделены пробелами | |
Руби | новая строка прекращена | точка с запятой |
Ржавчина | точка с запятой заканчивается | запятая разделяет выражения |
Скала | завершение новой строки (точка с запятой необязательно) | точка с запятой |
Сид7 | через точку с запятой (допускается завершение через точку с запятой) | |
начало | точка с запятой, разделенная | |
Сленг | точка с запятой, разделенная | |
Смолток | период разделен | |
Стандартный ML | точка с запятой, разделенная | |
Быстрый | через точку с запятой (вставляется компилятором) | |
V (Vlang) | новая строка прекращена | через запятую или точку с запятой |
Визуальный Бейсик | новая строка прекращена | разделенная двоеточием |
Визуальный Бейсик .NET | новая строка прекращена | разделенная двоеточием |
Вольфрам Язык | точка с запятой, разделенная | |
Содзё | новая строка прекращена | |
Зиг | точка с запятой заканчивается | |
Язык | Разделитель-терминатор операторов | Вторичный сепаратор-терминатор [1] |
Продолжение линии
[ редактировать ]Продолжение строки обычно выполняется как часть лексического анализа : переход на новую строку обычно приводит к добавлению токена в поток токенов, если только не обнаружено продолжение строки.
- Пробелы – языки, которым не нужны продолжения.
- Ада – строки заканчиваются точкой с запятой
- C# – строки заканчиваются точкой с запятой
- JavaScript – строки заканчиваются точкой с запятой (что можно предположить)
- Два
- OCaml
- Амперсанд как последний символ строки
- Обратная косая черта в качестве последнего символа строки
- бить [5] и другие оболочки Unix
- C , C++ препроцессор
- Математика , Язык Wolfram
- Питон [6]
- Руби
- JavaScript – только внутри строк в одинарных или двойных кавычках.
- Обратный апостроф в качестве последнего символа строки
- Дефис как последний символ строки
- Подчеркивание в качестве последнего символа строки
- Многоточие (как три точки – ни одного специального символа)
- MATLAB : Токен с многоточием не обязательно должен быть последним символом в строке, но все последующие символы будут игнорироваться. [7] (По сути, он начинает комментарий, который продолжается ( т.е. включает) первый последующий символ новой строки. Сравните это со встроенным комментарием, который продолжается до первого последующего символа новой строки.)
- Разделитель-запятая в качестве последнего символа строки
- Ruby (комментарий может следовать за разделителем)
- Левая скобка-разделитель в качестве последнего символа строки
- Пакетный файл : запуск блока в скобках позволяет продолжить строку. [8]
- Ruby: левая скобка, левая квадратная скобка или левая фигурная скобка.
- Оператор как последний объект строки
- Ruby (комментарий может следовать за оператором)
- Оператор как первый символ продолжения строки
- AutoHotkey : любые операторы выражений, кроме ++ и --, а также запятая или точка. [9]
- Обратная косая черта в качестве первого символа продолженной строки
- Некоторые формы встроенных комментариев служат продолжением строки.
- Турбо Ассемблер :
\
- м4 :
dnl
- ТеХ :
%
- Позиция персонажа
- Fortran 77 : строка без комментариев является продолжением предыдущей строки без комментариев, если в столбце 6 появляется какой-либо символ, не являющийся пробелом. Строки комментариев не могут быть продолжены.
- COBOL : Строковые константы могут быть продолжены, не заканчивая исходную строку в предложении PICTURE с помощью
'
, затем вставив-
в столбце 7 (та же позиция, что и*
для комментариев используется.) - TUTOR : Строки, начинающиеся с табуляции (после любых отступов, требуемых контекстом), продолжают предыдущую команду.
- [Конец и начало] с использованием обычных кавычек
- Препроцессор C , C++ : строка заканчивается обычным образом и продолжается, начиная с кавычки в следующей строке.
Библиотеки
[ редактировать ]Этот раздел нуждается в расширении . Вы можете помочь, добавив к нему . ( декабрь 2009 г. ) |
Импорт . библиотеки пакетов — это способ чтения внешних, возможно, скомпилированных подпрограмм, программ или Импорт можно классифицировать по уровню (модуль, пакет, класс, процедура...) и по синтаксису (имя директивы, атрибуты...).
- Импорт файла
addpath(directory)
МАТЛАБ [10]COPY filename.
КОБОЛ:-include("filename").
Пролог#include file="filename"
АСП#include "filename"
, AutoHotkey , AutoIt , C , C++#include <filename>
AutoHotkey , AutoIt , C , C++#import "filename"
, Цель-C#import <filename>
Цель-CImport["filename"]
Математика , Язык Wolframinclude 'filename'
Фортранinclude "filename";
PHPinclude [filename] program
, выберите базовый#include [filename] program
Выберите базовыйinclude!("filename");
Ржавчинаload "filename"
Рубиload %filename
Красныйrequire('filename')
Дваrequire "filename";
Перл , PHPrequire "filename"
Рубиsource(""filename"")
Р@import("filename");
Зиг
- Импорт пакетов
#include filename
С , С++#[path = "filename"] mod altname;
, Ржавчина@import module;
Цель-C<<name
Математика , Язык Wolfram:-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.*
Java , MATLAB , Котлинimport "modname";
JavaScript :import altname from "modname";
, JavaScript :import package
Скалаimport package._
, Скалаimport module
Быстрыйimport module
V (Vlang)import module
, Питонrequire('modname')
Два :require "gem"
, Рубиuse module
, Фортран 90 +use module, only : identifier
Фортран 90+use Module;
, Перлuse Module qw(import options);
Перлuse Package.Name
Кобраuses unit
Паскальwith package
Есть@import("pkgname");
Зиг
- Импорт классов
from module import Class
Питонimport package.class
Java , MATLAB , Котлинimport class from "modname";
, JavaScriptimport {class} from "modname";
, JavaScriptimport {class as altname} from "modname";
JavaScriptimport package.class
, Скалаimport package.{ class1 => alternativeName, class2 }
, Скалаimport package._
Скалаuse Namespace\ClassName;
, PHPuse Namespace\ClassName as AliasName;
PHP
- Импорт процедур/функций
from module import function
Питон :import package.module : symbol;
, Д :import package.module : altsymbolname = symbol;
Д :import Module (function)
Хаскелл :import function from "modname";
, JavaScript :import {function} from "modname";
, JavaScript :import {function as altname} from "modname";
JavaScript :import package.function
МАТЛАБ :import package.class.function
, Скала :import package.class.{ function => alternativeName, otherFunction }
Скала :use Module ('symbol');
Перл :use function Namespace\function_name;
, PHP :use Namespace\function_name as function_alias_name;
PHP :use module::submodule::symbol;
, Ржавчина :use module::submodule::{symbol1, symbol2};
, Ржавчина :use module::submodule::symbol as altname;
Ржавчина :
- Постоянный импорт
use const Namespace\CONST_NAME;
PHP
Вышеупомянутые утверждения также можно классифицировать по тому, являются ли они синтаксическим удобством (позволяют ссылаться на вещи по более короткому имени, но на них все равно можно ссылаться по некоторому полному имени без импорта) или действительно ли они необходимы для доступа к код (без которого невозможно получить доступ к коду даже при полных именах).
- Синтаксическое удобство
- Требуется для доступа к коду
import altname "package/name"
Идтиimport altname from "modname";
JavaScriptimport module
Питон
Блоки
[ редактировать ]Блок — это обозначение группы из двух или более операторов, выражений или других единиц кода, которые связаны таким образом, что составляют единое целое.
- Фигурные скобки (они же фигурные скобки)
{
...}
- Языки программирования в фигурных скобках : C , C++ , Objective-C , Go , Java , JavaScript / ECMAScript , V (Vlang) , C# , D , Perl , PHP (
for
&loop
циклы или передать блок в качестве аргумента), R , Rust , Scala , S-Lang , Swift , PowerShell , Haskell (в do-нотации), AutoHotkey , Zig
- Круглые скобки
(
...)
- Пакетный файл , F# (облегченный синтаксис), [11] OCaml , Пролог , Стандартное машинное обучение
- Квадратные скобки
[
...]
begin
...end
- Ада , АЛГОЛ , F# (многословный синтаксис), [11] Паскаль , Руби (
for
,do/while
&do/until
циклы), OCaml , SCL , Simula , Erlang .
do
...end
do
...done
- Баш (
for
&while
циклы), F# (подробный синтаксис) [11] Visual Basic , Fortran , TUTOR (с обязательным отступом тела блока), Visual Prolog
do
...end
- Lua , Ruby (передавать блоки в качестве аргументов,
for
цикл), Seed7 (заключает тела цикла междуdo
и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
блоки), Луа (then
/else
&function
)
- (
begin
...)
- (прога...)
- (
do
...)
- Отступ
- Языки внесторонних правил : Boo , Cobra , CoffeeScript , F# , Haskell (в do-нотации, если фигурные скобки опущены), LiveScript , occam , Python , Nemerle (необязательно; пользователь может использовать синтаксис, чувствительный к пробелам, вместо фигурных скобок). синтаксис фигурных скобок, если они того пожелают), Nim , Scala (необязательно, как в Nemerle)
- Языки свободной формы : большинство потомков АЛГОЛА (включая C , Pascal и Perl ); Лисп языки
- Другие
- Ада , Visual Basic , Seed7 :
if
...end if
- АПЛ :
:If
...:EndIf
или:If
...:End
- Bash , sh и ksh :
if
...fi
,do
...done
,case
...esac
; - АЛГОЛ 68 :
begin
...end
,(
...)
,if
...fi
,do
...od
- Lua , Паскаль , Модуль-2 , Seed7 :
repeat
...until
- КОБОЛ :
IF
...END-IF
,PERFORM
...END-PERFORM
и т. д. для заявлений; ....
для предложений. - Visual Basic.Net :
If
...End If
,For
...Next
,Do
...Loop
- Малый базовый :
If
...EndIf
,For
...EndFor
,While
...EndWhile
Комментарии
[ редактировать ]Комментарии можно классифицировать по:
- стиль (встроенный/блочный)
- правила синтаксического анализа (игнорируются/интерполируются/сохраняются в памяти)
- рекурсивность (вложенная/невложенная)
- использует ( строки документации /одноразовые комментарии/другое)
Встроенные комментарии
[ редактировать ]Встроенные комментарии обычно используют символ новой строки для обозначения конца комментария и произвольный разделитель или последовательность токенов для обозначения начала комментария.
Примеры:
Символ | Языки |
---|---|
C | От Фортрана I до Фортрана 77 (C в столбце 1) |
REM | БЕЙСИК , Пакетные файлы , Visual Basic |
:: | Пакетные файлы , COMMAND.COM , cmd.exe |
NB. | Дж ; от (исторически) распространенной аббревиатуры Nota bene , что на латыни означает «хорошо замечать». |
⍝ | АПЛ ; Мнемоника заключается в том, что глиф (черта, перечеркнутая ботинком) напоминает настольную лампу и, следовательно, «освещает» вышеизложенное. |
# | Boo , оболочка Bourne и другие оболочки UNIX , Cobra , Perl , Python , Ruby , Seed7 , PowerShell , PHP , R , Make , Maple , Elixir , Julia , Nim [12] |
% | ТеХ , Пролог , MATLAB , [13] Эрланг , S-Lang , Визуальный Пролог , PostScript |
// | ActionScript , Boo , C (C99) , C++ , C# , D , F# , Go , Java , JavaScript , Kotlin , Object Pascal ( Delphi ), Objective-C , PHP , Rust , Scala , Sass , Swift , Xojo , V (Vlang) ) , Зиг |
' | Обезьяна, Visual Basic , VBScript , Small Basic , Gambas , Xojo |
! | Фактор , Фортран , Базовый Плюс, Информ, Выбор Базового |
; | Большинство языков ассемблера , AutoHotkey , AutoIt , Lisp , Common Lisp , Clojure , PGN , Rebol , Red , Scheme |
-- | Euphoria , Haskell , SQL , Ada , AppleScript , Eiffel , Lua , VHDL , SGML , PureScript , Elm |
* | Ассемблер S/360 (* в столбце 1), от COBOL I до COBOL 85, PAW , от Fortran IV до Fortran 77 (* в столбце 1), Pick Basic , GAMS (* в столбце 1) |
|| | Завиток |
" | Вимскрипт , ABAP |
\ | Форт |
*> | КОБОЛ 90 |
Блокировать комментарии
[ редактировать ]Блочные комментарии — это, как правило, те, в которых используется разделитель для обозначения начала комментария и другой разделитель для обозначения конца комментария. В этом контексте пробелы и символы новой строки не считаются разделителями. В примерах символ ~ обозначает комментарий; и символы, окружающие его, воспринимаются интерпретаторами/компиляторами как разделители.
Примеры:
Символ | Языки |
---|---|
comment ~ ; | АЛГОЛ 60 , ПОХОЖИЙ |
¢ ~ ¢ , # ~ # , co ~ co , comment ~ comment | АЛГОЛ 68 [14] [15] |
/* ~ */ | ActionScript, AutoHotkey , C, C++, C#, D, [16] Go, Java , JavaScript , Kotlin , Objective-C , PHP , PL/I , Prolog , Rexx , Rust (может быть вложенным), Scala (может быть вложенным), SAS , SASS, SQL, Swift (может быть вложенным), V (Vlang) , Визуальный Пролог , CSS |
#cs ~ #ce | АвтоИт [17] |
/+ ~ +/ | D (может быть вложенным) [16] |
/# ~ #/ | Кобра (может быть вложенной) |
<# ~ #> | PowerShell |
<!-- ~ --> | HTML , XML |
=begin ~ =cut | Perl (простая старая документация) |
#`( ~ ) | Raku (символами в скобках могут быть (), <>, {}, [], любые символы Юникода с зеркальным отображением BiDi или символы Юникода со свойствами Ps/Pe/Pi/Pf) |
=begin ~ =end | Руби |
#<TAG> ~ #</TAG> , #stop ~ EOF , #iffalse ~ #endif , #ifntrue ~ #endif , #if false ~ #endif , #if !true ~ #endif | Сленг [18] |
{- ~ -} | Haskell (может быть вложенным) |
(* ~ *) | Delphi , ML , Mathematica , Object Pascal , Pascal , Seed7 , AppleScript , OCaml (может быть вложенным), Standard ML (может быть вложенным), Maple , Newspeak , F# |
{ ~ } | Delphi, Объект Паскаль, Паскаль, PGN , Красный |
{# ~ #} | Нунджакс, Твиг |
{{! ~ }} | Усы , Руль |
{{!-- ~ --}} | Рули (не могут быть вложенными, но могут содержать {{ и }} ) |
|# ~ #| | Завиток |
%{ ~ %} | МАТЛАБ [13] (символы должны быть в отдельной строке) |
#| ~ |# | Lisp , Scheme , Racket (может быть вложенным во все три). |
#= ~ =# | Юлия [19] |
#[ ~ ]# | Nim [20] |
--[[ ~ ]] , --[=[ ~ ]=] , --[= ... =[ ~ ]= ... =] | Lua (скобки могут содержать любое количество совпадающих символов =; могут быть вложены в несовпадающие разделители) |
" ~ " | Смолток |
(comment ~ ) | Клоджур |
#If COMMENT Then ~ #End If [а] | Визуальный Бейсик .NET |
#if COMMENT ~ #endif [б] | С# |
' comment _ или REM comment _ [с] | Классический Visual Basic , VBA , VBScript |
Уникальные варианты
[ редактировать ]- Фортран
- Отступы строк в Фортране 66/77 имеют большое значение. Фактический оператор находится в столбцах с 7 по 72 строки. Любой символ, не являющийся пробелом, в столбце 6 указывает, что эта строка является продолжением предыдущей строки. А '
C
' в столбце 1 означает, что вся эта строка является комментарием. Столбцы с 1 по 5 могут содержать число, служащее меткой. Столбцы с 73 по 80 игнорируются и могут использоваться для комментариев; во времена перфокарт эти столбцы часто содержали порядковый номер, чтобы колоду карт можно было отсортировать в правильном порядке, если кто-то случайно уронил карты. В Фортране 90 отпала необходимость в правиле отступов и были добавлены встроенные комментарии, используя!
символ в качестве разделителя комментариев.
- КОБОЛ
- В коде фиксированного формата отступы строк имеют большое значение. Столбцы 1–6 и столбцы с 73 игнорируются. Если
*
или/
находится в столбце 7, то эта строка является комментарием. До COBOL 2002, еслиD
илиd
находился в столбце 7, он будет определять «строку отладки», которая будет игнорироваться, если только компилятору не будет дано указание скомпилировать ее.
- Кобра
- Cobra поддерживает блокировку комментариев с помощью «
/#
...#/
"что похоже на"/*
...*/
" часто встречается в языках на основе C, но с двумя отличиями.#
символ повторно используется из формы однострочного комментария "#
...", а комментарии к блокам могут быть вложенными, что удобно для комментирования больших блоков кода.
- Завиток
- Curl поддерживает блокировку комментариев с пользовательскими тегами, как в
|foo# ... #foo|
.
- Два
- Как и в случае с необработанными строками, между квадратными скобками может быть любое количество знаков равенства при условии, что открывающий и закрывающий теги имеют одинаковое количество знаков равенства; это позволяет вложенность, если во вложенных блочных комментариях/необработанных строках используется другое количество знаков равенства, чем в их заключающем комментарии:
--[[comment --[=[ nested comment ]=] ]]
. Lua отбрасывает первую новую строку (если она есть), которая следует непосредственно за открывающим тегом.
- Перл
- Блочные комментарии в Perl считаются частью документации и называются Plain Old Documentation (POD). Технически в Perl нет соглашения о включении блочных комментариев в исходный код, но POD обычно используется в качестве обходного пути.
- PHP
- PHP поддерживает комментарии в стандартном стиле C/C++, но также поддерживает стиль Perl.
- Питон
- Использование тройных кавычек для закомментирования строк источника на самом деле не образует комментарий. [21] Заключенный текст становится строковым литералом, который Python обычно игнорирует (за исключением случаев, когда это первый оператор в теле модуля, класса или функции; см. docstring ).
- Эликсир
- Приведенный выше трюк, используемый в Python, также работает в Elixir, но компилятор выдаст предупреждение, если заметит это. Чтобы подавить предупреждение, нужно будет добавить сигил
~S
(что предотвращает интерполяцию строк) в строку в тройных кавычках, что приводит к окончательной конструкции~S""" ... """
. Кроме того, Elixir поддерживает ограниченную форму блочных комментариев как официальную функцию языка, но, как и в Perl, эта конструкция полностью предназначена для написания документации. В отличие от Perl, его нельзя использовать в качестве обходного пути, поскольку он ограничивается определенными частями кода и выдает ошибки или даже подавляет функции, если они используются где-то еще. [22]
- Раку
- Раку использует
#`(...)
для обозначения комментариев к блоку. [23] Раку фактически позволяет использовать любые «правые» и «левые» парные скобки после#`
(т.е.#`(...)
,#`[...]
,#`{...}
,#`<...>
и даже более сложное#`{{...}}
все действительные комментарии блока). Скобки также могут быть вложены в комментарии (т.е.#`{ a { b } c }
переходит к последней закрывающей скобке).
- Руби
- Блокировка комментариев в Ruby открывается по адресу
=begin
линия и закрывается в=end
линия.
- Сленг
- Область линий, заключенная в
#<tag>
и#</tag>
разделители игнорируются интерпретатором. Имя тега может представлять собой любую последовательность буквенно-цифровых символов, которая может использоваться для указания способа расшифровки вложенного блока. Например,#<latex>
может указывать на начало блока документации в формате LaTeX.
- Схема и рэкет
- Следующий полный синтаксический компонент (s-выражение) можно закомментировать с помощью
#;
.
- АБАП
ABAP поддерживает два разных типа комментариев. Если первым символом строки, включая отступ, является звездочка ( *
) вся строка считается комментарием, а одинарная двойная кавычка ( "
) начинает встроенный комментарий, который действует до конца строки. Комментарии ABAP между операторами невозможны. EXEC SQL
и ENDEXEC
потому что в Native SQL эти символы используются по-другому. В большинстве диалектов SQL двойное тире ( --
) можно использовать вместо этого.
- Эзотерические языки
- Многие эзотерические языки программирования следуют соглашению, согласно которому любой текст, не выполняемый указателем инструкции (например, Befunge ) или иным образом не имеющий значения (например, Brainfuck ), считается «комментарием».
Сравнение комментариев
[ редактировать ]Существует множество стилей синтаксиса для объявления комментариев в исходном коде. BlockComment
здесь курсив используется для обозначения стиля блочного комментария. InlineComment
Здесь курсив используется для обозначения стиля встроенных комментариев.
Язык | Встроенный комментарий | Заблокировать комментарий |
---|---|---|
Ада , Эйфель , Эйфория , Оккам , СПАРК , ANSI SQL и VHDL | -- InlineComment | |
АЛГОЛ 60 | comment BlockComment; | |
АЛГОЛ 68 | ¢ BlockComment ¢
| |
АПЛ | ⍝ InlineComment | |
AppleScript | -- InlineComment | (* BlockComment *) |
Язык ассемблера (варьируется) | ; InlineComment один пример (большинство языков ассемблера используют только комментарии к строкам) | |
Автогорячая клавиша | ; InlineComment | /* BlockComment */ |
AWK , оболочка Bourne , оболочка C , Maple , PowerShell | # InlineComment | <# BlockComment #> |
Баш | # InlineComment | <<EOF : ' |
БЕЙСИК (различные диалекты): | 'InlineComment (не все диалекты)
| |
C (K&R, ANSI/C89/C90), ОХЛАЖДЕНИЕ , PL/I , REXX | /* BlockComment */ | |
C (C99) , C++ , Go , Swift , JavaScript , V (Vlang) | // InlineComment | /* BlockComment */ |
С# | // InlineComment /// InlineComment (комментарий к XML-документации) | /* BlockComment */ /** BlockComment */ (комментарий к XML-документации) #if COMMENT (директива компилятора) [б] |
КОБОЛ I — КОБОЛ 85 | * InlineComment (* в графе 7) | |
КОБОЛ 2002 | *> InlineComment | |
Завиток | || InlineComment | |# BlockComment #|
|
Кобра | # InlineComment | /# BlockComment #/ (нестабильный) |
Д | // InlineComment /// Documentation InlineComment ( комментарии в ddoc ) | /* BlockComment */ /** Documentation BlockComment */ ( комментарии в ddoc )
|
ДКЛ | $! InlineComment | |
ECMAScript ( JavaScript , ActionScript и т. д.) | // InlineComment | /* BlockComment */ |
Эликсир | # InlineComment | ~S""" @doc """ (Документация, работает только в модулях) @moduledoc (документация модуля) @typedoc (Типовая документация) |
Форт | \ InlineComment | ( BlockComment ) (однострочный и многострочный)
|
ФОРТРАН I — ФОРТРАН 77 | C InlineComment (С в столбце 1) | |
Фортран 90 и более поздние версии | ! InlineComment | #if 0 [д] |
Хаскелл | -- InlineComment | {- BlockComment -} |
Дж | NB. | |
Ява | // InlineComment | /* BlockComment */
|
Юлия | # InlineComment | #= BlockComment =# |
Лисп , Схема | ; InlineComment | #| BlockComment |# |
Два | -- InlineComment | --[==[ BlockComment]==] (переменное количество знаков =, вложенное с разделителями с разным количеством знаков =) |
Клен | # InlineComment | (* BlockComment *) |
Математика | (* BlockComment *) | |
Матлаб | % InlineComment | %{ Примечание. Оба символа процентных скобок должны быть единственными символами без пробелов в соответствующих строках. |
Nim | # InlineComment | #[ BlockComment ]# |
Объектный Паскаль | // InlineComment | (* BlockComment *) { BlockComment } |
OCaml | (* BlockComment (* nestable *) *) | |
Паскаль , Модуль-2 , Модуль-3 , Оберон , МЛ : | (* BlockComment *) | |
Перл , Руби | # InlineComment | =begin ( =end в Ruby) ( комментарий к документации POD )
|
ПГН , Красный | ; InlineComment | { BlockComment } |
PHP | # InlineComment // InlineComment | /* BlockComment */ /** Documentation BlockComment */ ( комментарии PHP-документа ) |
ПИЛОТ | R:InlineComment | |
ПЛЗ/СИС | ! BlockComment ! | |
ПЛ/SQL , ТSQL | -- InlineComment | /* BlockComment */ |
Пролог | % InlineComment | /* BlockComment */ |
Питон | # InlineComment | ''' BlockComment ''' ( строка документации в первой строке модуля, класса, метода или функции) |
Р | # InlineComment | |
Раку | # InlineComment | #`{
|
Ржавчина | // InlineComment
| /* BlockComment */ (нестабильный)
|
САС | * BlockComment; /* BlockComment */ | |
Сид7 | # InlineComment | (* BlockComment *) |
начало | comment BlockComment; ! BlockComment; | |
Смолток | "BlockComment" | |
Умник | {* BlockComment *} | |
Стандартный ML | (* BlockComment *) | |
TeX , LaTeX , PostScript , Эрланг , S-Lang | % InlineComment | |
Техинфо | @c InlineComment
| |
РЕпетитор | * InlineComment command $$ InlineComment | |
Визуальный Бейсик | ' InlineComment Rem InlineComment | ' BlockComment _ Rem BlockComment _ [с] |
Визуальный Бейсик .NET | ' InlineComment
| #If COMMENT Then |
Визуальный Пролог | % InlineComment | /* BlockComment */ |
Вольфрам Язык | (* BlockComment *) | |
Содзё | ' InlineComment // InlineComment rem InlineComment | |
Зиг | // InlineComment /// InlineComment //! InlineComment |
См. также
[ редактировать ]- Синтаксис Си
- Синтаксис С++
- Языки программирования с фигурными скобками — широкое семейство синтаксисов языков программирования.
- Синтаксис Java
- Синтаксис JavaScript
- Синтаксис и семантика PHP
- Синтаксис и семантика Python
Ссылки
[ редактировать ]- ^ Перейти обратно: а б Для нескольких операторов в одной строке
- ^ Три разных типа предложений, каждое из которых по-разному разделяет фразы и единицы:
- серийное предложение с использованием токена перехода (т. е. точки с запятой): начать a; б; c end – модули выполняются по порядку.
- дополнительное предложение с использованием and-also-token (а именно ","): Begin a, b, c end – порядок выполнения должен быть оптимизирован компилятором.
- параллельное предложение с использованием and-also-token (а именно ","): par Begin a, b, c end – модули должны выполняться в параллельных потоках.
- ^ точка с запятой – результат удаления оператора скрыт, запятая – результат отображается
- ^ Перейти обратно: а б Из определения языка R , раздел 3.2 Структуры управления: «Точка с запятой всегда указывает на конец оператора, в то время как новая строка может указывать на конец оператора. Если текущий оператор не является синтаксически полным, новые строки просто игнорируются оценщиком. "
- ^ Справочное руководство Bash , 3.1.2.1 Escape-символ
- ^ Документация Python , 2. Лексический анализ : 2.1.5. Явное соединение строк
- ^ «Mathworks.com» . Архивировано из оригинала 7 февраля 2010 года.
- ^ «Кробки/скобки — Windows CMD — SS64.com» . ss64.com .
- ^ «Скрипты — определение и использование | AutoHotkey» .
- ^ Чтобы M-файл (источник MATLAB) был доступен по имени, его родительский каталог должен находиться в пути поиска (или текущем каталоге).
- ^ Перейти обратно: а б с «Подробный синтаксис — F# | Microsoft Learn» . Microsoft Learn . 5 ноября 2021 г. Проверено 17 ноября 2022 г.
- ^ «Руководство Нима» . nim-lang.org .
- ^ Перейти обратно: а б «Mathworks.com» . Архивировано из оригинала 21 ноября 2013 года . Проверено 25 июня 2013 г.
- ^ «Algol68_revised_report-AB.pdf в формате PDF, стр. 61–62, исходный документ, стр. 121–122» (PDF) . Проверено 27 мая 2014 г.
- ^ «HTML-версия пересмотренного отчета Algol68 AB» . Архивировано из оригинала 17 марта 2013 года . Проверено 27 мая 2014 г.
- ^ Перейти обратно: а б «DLang.org, Лексический» . Проверено 27 мая 2014 г.
- ^ «Справочник по ключевым словам AutoItScript.com, #comments-start» . Проверено 27 мая 2014 г.
- ^ "slang-2.2.4/src/slprepr.c – строки с 43 по 113" . Проверено 28 мая 2014 г.
- ^ «Пунктуация · Язык Джулии» .
- ^ «Руководство Нима» . nim-lang.org .
- ^ «Совет по Python: вы можете использовать многострочные строки в качестве многострочных комментариев» , 11 сентября 2011 г., Гвидо ван Россум
- ^ «Написание документации — Эликсир v1.12.3» . Проверено 28 июля 2023 г.
- ^ «Документация Perl 6 (синтаксис)» . docs.perl6.org. Комментарии . Проверено 5 апреля 2017 г. .
- ^ «Использование препроцессора FPP» . Архивировано из оригинала 18 ноября 2022 года . Проверено 18 ноября 2022 г.
- ^ «Комментарии к Perl 6 POD» . 25 мая 2023 г.
- ^ «Perl 6 POD (сокращенные блоки)» . 25 мая 2023 г.
Примечания
[ редактировать ]- ^ Visual Basic .NET не поддерживает традиционные многострочные комментарии, но их можно эмулировать с помощью директив компилятора.
- ^ Перейти обратно: а б Хотя C# поддерживает традиционные блочные комментарии
/* ... */
для их имитации можно использовать директивы компилятора, как и в VB.NET. - ^ Перейти обратно: а б Символ продолжения строки
_
может использоваться для расширения однострочного комментария на следующую строку без необходимости ввода'
илиREM
снова. Это можно делать до 24 раз подряд. - ^ Фортран не поддерживает традиционные блочные комментарии, но некоторые компиляторы поддерживают директивы препроцессора в стиле C / C++ , позволяя программисту эмулировать многострочные комментарии. [24]