This comparison of programming languages (syntax) compares the features of language syntax (format) for over 50 various computer programming languages.
Contents
Expressions
Programming language expressions can be broadly classified in four classes(Paradigms??):
Statements
Programming language statements typically have conventions for:
A statement separator is used to demarcate boundaries between two separate statements. A statement terminator is used to demarcate the end of an individual statement. Line continuation is a convention in languages where the newline character could potentially be misinterpreted as a statement terminator. In such languages, it allows a single statement to span more than just one line.
Line continuation
Line continuation is generally done as part of lexical analysis: a newline normally results in a token being added to the token stream, unless line continuation is detected.
dnl
%
'
, then inserting a -
in column 7 (same position as the *
for comment is used.)Libraries
To import a library is a way to read external, possibly compiled, routines, programs or packages. Imports can be classified by level (module, package, class, procedure,...) and by syntax (directive name, attributes,...)
#include file="filename"
#include "filename"
, #include <filename>
COPY filename.
load "filename"
include 'filename'
require("filename")
Import["filename"]
addpath(directory)
#import "filename"
, #import <filename>
require "filename";
include "filename";
, require "filename";
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.*
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
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 package.function
use Module ('symbol');
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 }
The above statements can also be classified by whether they are a syntactic convenience (allowing things to be referred to by a shorter name, but they can still be referred to by some fully qualified name without import), or whether they are actually required to access the code (without which it is impossible to access the code, even with fully qualified names).
import package.*
, import package.class
open module
import altname "package/name"
import module
Blocks
A block is a notation for a group of two or more statements, expressions or other units of code that are related in such a way as to comprise a whole.
{
... }
for
& loop
loops, or pass a block as argument), Rust, Scala, S-Lang, Swift, Windows PowerShell, Haskell (in do-notation)(
... )
[
... ]
begin
... end
for
, do/while
& do/until
loops), OCaml, Simula, Erlang.do
... done
do
... end
for
loop), Seed7 (encloses loop bodies between do
and end
)end
(e.g. if
... end
):for
& while
loops), Ruby (if
, while
, until
, def
, class
, module
statements), OCaml (for
& while
loops), MATLAB (if
& switch
conditionals, for
& while
loops, try
clause, package
, classdef
, properties
, methods
, events
, & function
blocks), 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
, etc. for statements; ... .
for sentences.Comments
Comments can be classified by:
Inline comments
Inline comments are generally those that use a newline character to indicate the end of a comment, and an arbitrary delimiter or sequence of tokens to indicate the beginning of a comment.
Examples:
Block comments
Block comments are generally those that use a delimiter to indicate the beginning of a comment, and another delimiter to indicate the end of a comment. In this context, whitespace and newline characters are not counted as delimiters.
Examples:
Fortran
C
' in column 1 indicates that this entire line is a comment. Columns 1 though 5 may contain a number which serves as a label. Columns 73 though 80 are ignored and may be used for comments; in the days of punched cards, these columns often contained a sequence number so that the deck of cards could be sorted into the correct order if someone accidentally dropped the cards. Fortran 90 removed the need for the indentation rule and added inline comments, using the !
character as the comment delimiter.COBOL
*
or /
is in column 7, then that line is a comment. Until COBOL 2002, if a D
or d
was in column 7, it would define a "debugging line" which would be ignored unless the compiler was instructed to compile it.Cobra
/#
... #/
" which is like the "/*
... */
" often found in C-based languages, but with two differences. The #
character is reused from the single-line comment form "#
...", and the block comments can be nested which is convenient for commenting out large blocks of code.Curl
|foo# ... #foo|
.Lua
--[[comment --[=[ nested comment ]=] ]]
. Lua discards the first newline (if present) that directly follows the opening tag.Perl
PHP
Python
Ruby
S-Lang
#<tag>
and #</tag>
delimiters are ignored by the interpreter. The tag name can be any sequence of alphanumeric characters that may be used to indicate how the enclosed block is to be deciphered. For example, #<latex>
could indicate the start of a block of LaTeX formatted documentation.Scheme and Racket
#;
.ABAP
ABAP supports two different kinds of comments. If the first character of a line, including indentation, is an asterisk (*
) the whole line is considered as a comment, while a single double quote ("
) begins an in-line commet which acts until the end of the line. ABAP comments are not possible between the statements EXEC SQL
and ENDEXEC
because Native SQL has other usages for these characters. In the most SQL dialects the double dash (--
) can be used instead.
Esoteric languages
Comment comparison
There is a wide variety of syntax styles for declaring comments in source code. BlockComment
in italics is used here to indicate block comment style. InlineComment
in italics is used here to indicate inline comment style.