This is the alternative C block style L syntax. In this syntax blocks are enclosed in curley braces { } rather than the construct specific keywords used in the normal syntax. The compiler itself is written in this C style sytax because this made the hand translation from C++ to L easier when bootstrapping.
token 'first' '[]' 'bool' 'byte' 'char' 'int' 'long' 'word' 'ptr' 'ref' '+'
token '&' 'assert' '=' '@' '&&' '!' '||' 'break' 'case' 'cast' 'catch'
token 'class' '>' ')' ']' ':' ',' 'const'
token char-literal C-string-literal double-literal 'false' int-literal
token 'null' string-literal 'true' 'continue' 'default' '/' 'do' '.' 'else'
token '}' ';' 'enum' end-of-file '==' 'extends' 'finally' 'for' 'foreach' '>='
token 'get' '>' identifier 'if' 'import' '<=' '<' 'method' '%' '*' 'namespace' 'native' '!='
token 'new' 'line-break' '~' '=~' '!~' '<' '(' '[' '|'
token 'pragma' 'private' 'protected' 'public' 'return' 'set' '<<' '>>'
token '{' 'static' 'struct' '-' 'super' 'switch' 'then' 'this' 'thread' 'throw'
token 'try' 'use' 'var' 'vector' 'void' 'while' '^' 'implements' 'interface' 'proc'

ROOT:
		package 
		;

package:
		class_list 
		;

class_thing:
		class 
		| interface 
		| struct 
		| namespace 
		| use 
		| enumeration 
		| import 
		| pragma 
		;

pragma:
		'pragma' identifier_list ';' 
		;

class_list:
		class_thing 
		| class_list class_thing 
		;

namespace:
		'namespace' name '{' '}' 
		| 'namespace' name '{' class_list '}' 
		;

use:
		'use' name ';' 
		;

class_specifiers:
		access_specifiers 
		| (empty)
		;

import:
		'import' name ';' 
		| 'import' constant_string ';' 
		;

struct:
		class_specifiers 'struct' identifier class_body 
		;

class:
		class_specifiers 'class' identifier generic implements class_body 
		| class_specifiers 'class' identifier generic 'extends' name generic_super implements class_body 
		;

interface:
		class_specifiers 'interface' identifier generic class_body 
		| class_specifiers 'interface' identifier generic 'extends' name generic_super class_body 
		;

implements:
		'implements' type_list 
		| (empty)
		;

generic:
		'<' plain_identifier_list '>' 
		| (empty)
		;

generic_super:
		'<' type_list '>' 
		| (empty)
		;

enumeration:
		class_specifiers 'enum' identifier '{' identifier_list '}' 
		| class_specifiers 'enum' identifier '{' '}' 
		;

class_body:
		'{' '}' 
		| '{' class_body_declarations '}' 
		;

class_body_declarations:
		class_body_declaration 
		| class_body_declarations class_body_declaration 
		;

class_body_declaration:
		field_declaration 
		| method_declaration 
		| native_declaration 
		| access_specifiers field_declaration 
		| access_specifiers method_declaration 
		| access_specifiers native_declaration 
		| enumeration 
		| pragma 
		;

field_declaration:
		type identifier_list ';' 
		;

native_declaration:
		'native' type identifier declare_arguments ';' 
		;

normal_method_declaration:
		type identifier declare_arguments method_body 
		;

accessor_declaration:
		'get' type identifier method_body 
		| 'set' type identifier '=' identifier method_body 
		;

indexer_declaration:
		'get' type '[' argument_declaration ']' method_body 
		| 'set' type '[' argument_declaration ']' '=' identifier method_body 
		;

indexed_accessor_declaration:
		'get' type identifier '[' argument_declaration ']' method_body 
		| 'set' type identifier '[' argument_declaration ']' '=' identifier method_body 
		;

method_declaration:
		normal_method_declaration 
		| accessor_declaration 
		| indexer_declaration 
		| indexed_accessor_declaration 
		;

method_body:
		block_statement 
		| ';' 
		;

declare_arguments:
		'(' declare_argument_list ')' 
		| '(' ')' 
		;

declare_argument_list:
		argument_declaration 
		| declare_argument_list ',' argument_declaration 
		;

argument_declaration:
		type identifier 
		;

expression:
		expressionX 
		;

expressionX:
		expressionX '&&' expression0 
		| expressionX '||' expression0 
		| expression0 
		;

expression0:
		'!' expression0 
		| expressionA 
		;

expressionA:
		expressionA '==' expressionB 
		| expressionA '!=' expressionB 
		| expressionA '>' expressionB 
		| expressionA '<' expressionB 
		| expressionA '>=' expressionB 
		| expressionA '<=' expressionB 
		| expressionA '=~' expressionB 
		| expressionA '!~' expressionB 
		| expressionB 
		;

expressionB:
		expressionB '&' expressionC 
		| expressionB '|' expressionC 
		| expressionB '^' expressionC 
		| expressionC 
		;

expressionC:
		expressionC '<<' expression1 
		| expressionC '>>' expression1 
		| expression1 
		;

expression1:
		expression1 '+' expression2 
		| expression1 '-' expression2 
		| expression2 
		;

expression2:
		expression2 '*' expression3 
		| expression2 '/' expression3 
		| expression2 '%' expression3 
		| expression3 
		;

expression3:
		unary_expression 
		| '~' expression3 
		;

access_specifiers:
		access_specifiers access_specifier 
		| access_specifier 
		;

access_specifier:
		'public' 
		| 'private' 
		| 'protected' 
		| 'static' 
		| 'const' 
		;

ident_assign:
		identifier 
		| identifier '=' expression 
		;

plain_identifier_list:
		identifier 
		| plain_identifier_list ',' identifier 
		;

identifier_list:
		ident_assign 
		| identifier_list ',' ident_assign 
		;

empty_statement:
		';' 
		;

method_call_statement:
		method_call 
		;

labelled_statement:
		identifier ':' loop_statement 
		| loop_statement 
		;

loop_statement:
		foreach_statement 
		| for_statement 
		| do_statement 
		| while_statement 
		;

do_statement:
		'do' statement 'while' '(' expression ')' ';' 
		;

foreach_statement:
		'foreach' '(' type identifier ';' expression ')' statement 
		| 'foreach' '(' 'var' identifier ';' expression ')' statement 
		;

for_statement:
		'for' '(' within_for_statement expression ';' very_simple_statement ')' statement 
		| 'for' '(' within_for_statement ';' very_simple_statement ')' statement 
		| 'for' '(' within_for_statement expression ';' ')' statement 
		| 'for' '(' within_for_statement ';' ')' statement 
		;

switch_statement:
		'switch' '(' expression ')' '{' case_list '}' 
		| 'switch' '(' expression ')' '{' '}' 
		;

case_list:
		case 
		| case_list case 
		| default 
		| case_list default 
		;

case:
		'case' expression_list ':' block_statement_list 
		;

default:
		'default' ':' block_statement_list 
		;

if_then_statement:
		'if' '(' expression ')' statement 
		;

if_then_else_statement:
		'if' '(' expression ')' statement_inner 'else' statement 
		;

if_then_else_statement_inner:
		'if' '(' expression ')' statement_inner 'else' statement_inner 
		;

while_statement:
		'while' '(' expression ')' statement 
		;

while_statement_inner:
		'while' '(' expression ')' statement_inner 
		;

return_statement:
		'return' ';' 
		| 'return' expression ';' 
		;

throw_statement:
		'throw' expression ';' 
		;

try_statement:
		'try' block_statement catches 
		| 'try' block_statement finally 
		| 'try' block_statement catches finally 
		;

catches:
		catch_clause 
		| catches catch_clause 
		;

catch_clause:
		'catch' '(' argument_declaration ')' block_statement 
		;

finally:
		'finally' block_statement 
		;

break_statement:
		'break' 
		| 'break' identifier 
		;

continue_statement:
		'continue' 
		| 'continue' identifier 
		;

statement:
		simple_statement 
		| if_then_statement 
		| if_then_else_statement 
		| labelled_statement 
		| switch_statement 
		;

within_for_statement:
		very_simple_statement ';' 
		| local_declaration 
		| ';' 
		;

very_simple_statement:
		assignment_statement 
		| method_call_statement 
		;

simple_statement:
		very_simple_statement ';' 
		| block_statement 
		| throw_statement 
		| return_statement 
		| try_statement 
		| break_statement ';' 
		| continue_statement ';' 
		| empty_statement 
		;

assignment_statement:
		assignment 
		;

statement_inner:
		simple_statement 
		| if_then_else_statement_inner 
		| while_statement_inner 
		;

local_declaration:
		untyped_declaration 
		| field_declaration 
		;

untyped_declaration:
		'var' identifier_list ';' 
		;

within_block_statement:
		local_declaration 
		| pragma 
		| statement 
		;

left_value:
		name 
		| pointer_access 
		| field_access 
		| vector_access 
		;

assignment:
		left_value '=' expression 
		;

expression_list:
		expression 
		| expression_list ',' expression 
		;

block_statement:
		'{' '}' 
		| '{' block_statement_list '}' 
		;

block_statement_list:
		within_block_statement 
		| block_statement_list within_block_statement 
		;

class_qualifier:
		'class' '<' type '>' 
		;

proc_ref:
		'proc' '(' type_list ')' '(' expression ')' 
		| 'proc' '(' ')' '(' expression ')' 
		;

field_access:
		primary '.' identifier 
		;

generic_type:
		type '<' type_list '>' 
		;

method_call:
		thing '(' ')' 
		| thing '(' expression_list ')' 
		| 'native' '.' identifier '(' ')' 
		| 'native' '.' identifier '(' expression_list ')' 
		;

name:
		simple_name 
		| qualified_name 
		;

simple_name:
		identifier 
		;

qualified_name:
		name '.' identifier 
		;

unary_expression:
		thing 
		| '-' unary_expression 
		;

thing:
		primary 
		| name 
		;

literal:
		constant_null 
		| constant_integer 
		| constant_string 
		| constant_cstring 
		| constant_char 
		| constant_double 
		| constant_boolean 
		;

primary:
		literal 
		| 'this' 
		| 'super' 
		| vector_list 
		| '(' expression ')' 
		| cast 
		| new 
		| proc_ref 
		| field_access 
		| method_call 
		| vector_access 
		| pointer_access 
		| class_qualifier 
		| generic_type 
		;

vector_list:
		'new' type '{' expression_list '}' 
		| 'new' type '{' expression_list ',' '}' 
		| '{' expression_list '}' 
		| '{' expression_list ',' '}' 
		;

pointer_access:
		'[' expression ']' 
		;

vector_access:
		name '[' expression ']' 
		| primary '[' expression ']' 
		;

cast:
		'cast' '<' type '>' '(' expression ')' 
		| 'cast' type '(' expression ')' 
		;

new:
		'new' type '[' expression ']' 
		| 'new' type '(' expression_list ')' 
		| 'new' type '(' ')' 
		;

identifier:
		identifier 
		;

constant_null:
		'null' 
		;

constant_integer:
		int-literal 
		;

constant_string:
		string-literal 
		;

constant_cstring:
		C-string-literal 
		;

constant_char:
		char-literal 
		;

constant_double:
		double-literal 
		;

constant_boolean:
		'true' 
		| 'false' 
		;

type:
		name 
		| base_type 
		| complex_type 
		;

complex_type:
		type '[]' 
		| type 'ptr' 
		| type 'ref' 
		| type 'proc' '(' type_list ')' 
		| type 'proc' '(' ')' 
		| generic_type 
		| type '<' '>' 
		;

type_list:
		type 
		| type_list ',' type 
		;

base_type:
		'int' 
		| 'long' 
		| 'word' 
		| 'bool' 
		| 'char' 
		| 'byte' 
		| 'void' 
		;

Generated by cutils 1.6 yyextract

warningJavascript is disabled in your browser. JavaScript is used on this site only for:
site design and content copyright (C) jeek 1995-2010     [ 13132 ]