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
site design and content copyright (C) jeek 1995-2010  
[
13132
]