[Contents]
[Prev] [Next] [Limbo Basics] [Limbo Programming] [Language Definition]

Syntax Summary

This section summarizes the grammar of Limbo above the lexical level; constants and identifiers are left undefined.

program:
	implement identifier; top-declaration-sequence

top-declaration-sequence:
	top-declaration
	top-declaration-sequence top-declaration

top-declaration:
	declaration
	identifier-list := expression;
	identifier-list = expression;
	(identifier-list) := expression;
	module-declaration
	function-definition
	adt-declaration

declaration:
	identifier-list : type;
	identifier-list : type = expression;
	identifier-list : con expression;
	identifier-list : import identifier;
	identifier-list : type type;
	include string-constant;

identifier-list:
	identifier
	identifier-list, identifier

expression-list:
	expression
	expression-list, expression


type:
	data-type
	function-type

data-type:
	byte
	int
	big
	real
	string
	tuple-type
	array of data-type
	list of data-type
	chan of data-type
	adt-type
	ref adt-type
	module-type
	module-qualified-type
	type-name

tuple-type:
	(data-type-list)

data-type-list:
	data-type
	data-type-list, data-type

adt-type:
	identifier
	module-qualified-type

module-type:
	identifier

module-qualified-type:
	identifier->identifier

type-name:
	identifier

function-type:
	fn function-arg-ret

function-arg-ret:
	(formal-arg-listopt)
	(formal-arg-listopt) : data-type

formal-arg-list:
	formal-arg
	formal-arg-list, formal-arg

formal-arg:
	nil-or-D-list : type
	nil-or-D : self refopt identifier
	*

nil-or-D-list:
	nil-or-D
	nil-or-D-list, nil-or-D

nil-or-D:
	identifier
	nil

module-declaration:
	identifier : module {mod-member-list};

mod-member-list:
	mod-member
	mod-member-list mod-member

mod-member:
	identifier-list : function-type;
	identifier-list : data-type;
	adt-declaration;
	identifier-list : con expression;
	identifier-list : type type;
adt-declaration:
	identifier : adt { adt-member-list };

adt-member-list:
	adt-member
	adt-member-list adt-member

adt-member:
	identifier-list : cyclicopt data-type;
	identifier-list : function-type;

function-definition:
	function-name-part function-arg-ret { statements }

function-name-part:
	identifier
	function-name-part.identifier

statements:
	(empty)
	statements declaration
	statements statement

statement:
	expression;
	;
	{ statements }
	if (expression) statement
	if (expression) statement else statement
	labelopt while (expression) statement
	labelopt do statement while (expression) ;
	labelopt for (expression; expression; expression) statement
	labelopt case expression { qual-statement-sequence }
	labelopt alt { qual-statement-sequence }
	break identifieropt;
	continue identifieropt;
	return expressionopt;
	spawn term (expression-listopt);
	exit ;

label:
	identifier :

qual-statement-sequence:
	qual-list =>
	qual-statement-sequence qual-list =>
	qual-statement-sequence statement
	qual-statement-sequence declaration

qual-list:
	qualifier
	qual-list or qualifier

qualifier:
	expression
	expression to expression
	*

expression:
	binary-expression
	lvalue-expression assignment-operator expression
	( lvalue-expression-list ) = expression
	send-expression
	declare-expression
	load-expression

binary-expression:
	monadic-expression
	binary-expression binary-operator binary-expression

binary-operator: one of
	* / % + - << >> < > <= >= == != & ^ | :: && ||

assignment-operator: one of
	= &= |= ^= <<= >>= += -= *= /= %=

lvalue-expression:
	identifier
	nil
	term [expression]
	term [expression : ]
	term.identifier
	(lvalue-expression-list)
	* monadic-expression

lvalue-expression-list:
	lvalue
	lvalue-expression-list, lvalue

monadic-expression:
	term
	monadic-operator monadic-expression
	array [expression] of data-type
	array [expression] of { init-list }
	list of { expression-list }
	chan of data-type
	data-type monadic-expression

term:
	identifier
	constant
	real-constant
	string-constant
	nil
	( expression-list )
	term.identifier
	term->term
	term (expression-listopt)
	term [expression]
	term [expression : expression]
	term [expression : ]
	term ++
	term --


monadic-operator: one of
	+ - ! ~ ref * <- hd tl len

init-list:
	element
	init-list, element

element:
	expression
	expression => expression
	* => expression

send-expression:
	expression <- = expression

declare-expression:
	lvalue-expression := expression

load-expression:
	load identifier expression



[Contents]
[Prev] [Next] [Limbo Basics] [Limbo Programming] [Language Definition]

Copyright © 1998, Lucent Technologies, Inc. All rights reserved.