/* * IDL to C++ sytax for SableCC(http://www.sable.mcgill.ca/SableCC/) * * Authors: Valentin Pavlov (fire@softhome.net) * Ivan Dachev (ivandachev@yahoo.com) * * Copyright ProSyst GmbH 1999. (http://www.prosyst.com) * * Please look at README.TXT for important changes and latest version * modifications. The BUGS.TXT contains list of known bugs. * * This software can be distributed under LGPL. * Please send all modifications (if) you made any to authors. * * Version 1.2 */ Package com.prosyst.idl2cpp; /********************************* * Begin Helpers ****************** *********************************/ Helpers ascii_character = [0..0xff]; ascii_small = ['a'..'z']; ascii_caps = ['A'..'Z']; unicode_character = [0..0xffff]; ht = 0x09; lf = 0x0a; ff = 0x0c; cr = 0x0d; sp = ' '; line_terminator = lf | cr | cr lf; input_character = [ascii_character - [cr + lf]]; uni_input_character = [unicode_character - [cr + lf]]; not_star = [input_character - '*'] | line_terminator; not_star_not_slash = [input_character - ['*' + '/']] | line_terminator; digit = ['0'..'9']; letter = ascii_small | ascii_caps | '_'; letter_or_digit = letter | digit; non_zero_digit = ['1'..'9']; hex_digit = ['0'..'9'] | ['a'..'f'] | ['A'..'F']; octal_digit = ['0'..'7']; decimal_numeral = '0' | non_zero_digit digit*; hex_numeral = '0' ('x' | 'X') hex_digit+; octal_numeral = '0' octal_digit+; exponent_part = ('e' | 'E') ('+' | '-')? digit+; fixed_type_suffix = 'd' | 'D'; single_character = [input_character - [''' + '\']]; wide_single_character = [uni_input_character - [''' + '\']]; octal_escape = '\' (octal_digit | octal_digit octal_digit | octal_digit octal_digit octal_digit); hex_escape = '\' ('x' | 'X') (hex_digit | hex_digit hex_digit); unicode_escape = '\' ('u' | 'U') ( hex_digit | hex_digit hex_digit | hex_digit hex_digit hex_digit | hex_digit hex_digit hex_digit hex_digit ); escape_sequence = '\n' | '\t' | '\v' | '\b' | '\r' | '\f' | '\a' | '\"' | '\' ''' | '\\' | octal_escape | hex_escape | unicode_escape; string_character = [input_character - ['"' + '\']] | escape_sequence; wide_string_character = [uni_input_character - ['"' + '\']] | escape_sequence; a = 'a' | 'A'; b = 'b' | 'B'; c = 'c' | 'C'; d = 'd' | 'D'; e = 'e' | 'E'; f = 'f' | 'F'; g = 'g' | 'G'; h = 'h' | 'H'; i = 'i' | 'I'; j = 'j' | 'J'; k = 'k' | 'K'; l = 'l' | 'L'; m = 'm' | 'M'; n = 'n' | 'N'; o = 'o' | 'O'; p = 'p' | 'P'; q = 'q' | 'Q'; r = 'r' | 'R'; s = 's' | 'S'; t = 't' | 'T'; u = 'u' | 'U'; v = 'v' | 'V'; w = 'w' | 'W'; x = 'x' | 'X'; y = 'y' | 'Y'; z = 'z' | 'Z'; /********************************* * Begin Tokens ******************* *********************************/ Tokens /********************* * Begin IDL Keywords * *********************/ abstract = a b s t r a c t; any = a n y; attribute = a t t r i b u t e; boolean = b o o l e a n; case = c a s e; char = c h a r; const = c o n s t; context = c o n t e x t; custom = c u s t o m; default = d e f a u l t; double = d o u b l e; enum = e n u m; exception = e x c e p t i o n; factory = f a c t o r y; false = f a l s e; fixed = f i x e d; float = f l o a t; in = i n; inout = i n o u t; interface = i n t e r f a c e; long = l o n g; module = m o d u l e; native = n a t i v e; octet = o c t e t; object = o b j e c t; oneway = o n e w a y; out = o u t; private = p r i v a t e; public = p u b l i c; raises = r a i s e s; readonly = r e a d o n l y; sequence = s e q u e n c e; short = s h o r t; string = s t r i n g; struct = s t r u c t; supports = s u p p o r t s; switch = s w i t c h; true = t r u e; truncatable = t r u n c a t a b l e; typedef = t y p e d e f; union = u n i o n; unsigned = u n s i g n e d; valuebase = v a l u e b a s e; valuetype = v a l u e t y p e; void = v o i d; wchar = w c h a r; wstring = w s t r i n g; /************************* * Additional used tokens * *************************/ l_parenthese = '('; r_parenthese = ')'; l_brace = '{'; r_brace = '}'; l_bracket = '['; r_bracket = ']'; semicolon = ';'; comma = ','; colon = ':'; doublecolon = '::'; assign = '='; lt = '<'; gt = '>'; tilde = '~'; plus = '+'; minus = '-'; star = '*'; div = '/'; bit_and = '&'; bit_or = '|'; bit_xor = '^'; mod = '%'; shift_left = '<<'; shift_right = '>>'; blank = (sp | ht | ff | line_terminator)*; traditional_comment = '/*' not_star+ '*'+ (not_star_not_slash not_star* '*'+)* '/'; documentation_comment = '/**' '*'* (not_star_not_slash not_star* '*'+)* '/'; end_of_line_comment = '//' input_character* line_terminator?; integer_literal = decimal_numeral | hex_numeral | octal_numeral; fixed_pt_literal = digit+ '.' digit* fixed_type_suffix | '.' digit+ fixed_type_suffix | digit+ fixed_type_suffix; floating_pt_literal = digit+ '.' digit* exponent_part? | '.' digit+ exponent_part? | digit+ exponent_part; character_literal = ''' (single_character | escape_sequence) '''; wide_character_literal = 'L' ''' (wide_single_character | escape_sequence) '''; string_literal = '"' string_character* '"'; wide_string_literal = 'L' '"' wide_string_character* '"'; identifier = letter letter_or_digit*; directive = ('#pragma' | '#include' | '#ifndef' | '#define' | '#endif' ) input_character* line_terminator; /********************************* * Begin Ignored Tokens *********** *********************************/ Ignored Tokens blank, traditional_comment, documentation_comment, end_of_line_comment, directive; /********************************* * Begin Production *************** *********************************/ Productions specification = definition+; definition = {type_dcl} type_dcl semicolon | {const_dcl} const_dcl semicolon | {except_dcl} except_dcl semicolon | {idl_interface} idl_interface semicolon | {idl_module} idl_module semicolon | {value} value semicolon; type_dcl = {type_declarator} type_declarator | {struct} struct_type | {union} union_type | {enum} enum_type | {identifier} native identifier; const_dcl = const const_type identifier assign or_expr; except_dcl = exception identifier l_brace member* r_brace; idl_interface = {interface_dcl} interface_dcl | {forward_dcl} forward_dcl; idl_module = module identifier l_brace definition+ r_brace; value = {value_dcl} value_dcl | {value_abs_dcl} value_abs_dcl | {value_box_dcl} value_box_dcl | {value_forward_dcl} value_forward_dcl; interface_dcl = interface_header l_brace export* r_brace; forward_dcl = abstract? interface identifier; interface_header = forward_dcl interface_inheritance_spec?; export = {type_dcl} type_dcl semicolon | {const_dcl} const_dcl semicolon | {except_dcl} except_dcl semicolon | {attr_dcl} attr_dcl semicolon | {op_dcl} op_dcl semicolon; interface_inheritance_spec = colon scoped_name comma_scoped_name*; scoped_name = {identifier} doublecolon? identifier | {scoped} scoped_name doublecolon identifier; value_forward_dcl = abstract? valuetype identifier semicolon; value_box_dcl = valuetype identifier type_spec; value_abs_dcl = abstract valuetype identifier value_inheritance_spec? l_brace export* r_brace; value_dcl = value_header l_brace value_element* r_brace; value_header = custom? valuetype identifier value_inheritance_spec?; value_inheritance_spec = {nosuport} colon truncatable? scoped_name comma_scoped_name* | {suport} supports scoped_name comma_scoped_name* | {msupport} colon truncatable? scoped_name comma_scoped_name* supports [support_scoped]:scoped_name [support_comma_support]:comma_scoped_name*; value_element = {export} export | {state_member} state_member | {init_dcl} init_dcl; state_member = {public} public type_spec declarators semicolon | {private} private type_spec declarators semicolon; init_dcl = factory identifier l_parenthese init_param_decls? r_parenthese semicolon; init_param_decls = init_param_decl comma_init_param_decl*; // *; I'think in IDL spec. the star is missing init_param_decl = in param_type_spec identifier; const_type = {long} long | {short} short | {longlong} signed_longlong_int | {ulong} unsigned_long_int | {ushort} unsigned_short_int | {ulonglong} unsigned_longlong_int | {char} char | {wchar} wchar | {boolean} boolean | {floating_pt_type} floating_pt_type | {string_type} string_type | {wide_string_type} wide_string_type | {fixed} fixed | {scoped_name} scoped_name | {octet} octet; or_expr = {xor_expr} xor_expr | {or} or_expr bit_or xor_expr; xor_expr = {and_expr} and_expr | {xor} xor_expr bit_xor and_expr; and_expr = {shift_expr} shift_expr | {and} and_expr bit_and shift_expr; shift_expr = {add_expr} add_expr | {shift_right} shift_expr shift_right add_expr | {shift_left} shift_expr shift_left add_expr; add_expr = {mult_expr} mult_expr | {plus} add_expr plus mult_expr | {minus} add_expr minus mult_expr; mult_expr = {unary_expr} unary_expr | {multiply} mult_expr star unary_expr | {divide} mult_expr div unary_expr | {mod} mult_expr mod unary_expr; unary_expr = {unary_operator} unary_operator primary_expr | {primary_expr} primary_expr; primary_expr = {scoped_name} scoped_name | {literal} literal | {or_expr} l_parenthese or_expr r_parenthese; literal = {integer} integer_literal | {string} string_literal | {char} character_literal | {float} floating_pt_literal | {boolean} boolean_literal | {wstring} wide_string_literal | {wchar} wide_character_literal | {fixed} fixed_pt_literal; type_spec = {simple_type_spec} simple_type_spec | {constr_type_spec} constr_type_spec; simple_type_spec = {base_type_spec} base_type_spec | {template_type_spec} template_type_spec | {scoped_name} scoped_name; base_type_spec = {float} floating_pt_type | {long} long | {short} short | {longlong} signed_longlong_int | {ulong} unsigned_long_int | {ushort} unsigned_short_int | {ulonglong} unsigned_longlong_int | {char} char | {wchar} wchar | {boolean} boolean | {octet} octet | {any} any | {object} object | {valuebase} valuebase; template_type_spec = {sequence} sequence_type | {string} string_type | {wstring} wide_string_type | {fixed} fixed_pt_type; constr_type_spec = {struct} struct_type | {union} union_type | {enum} enum_type; declarators = declarator comma_declarator*; declarator = {identifier} identifier | {array_declarator} array_declarator; struct_type = struct identifier l_brace member+ r_brace; member = type_spec declarators semicolon; union_type = union identifier switch l_parenthese switch_type_spec r_parenthese l_brace case_body+ r_brace; switch_type_spec = {long} long | {short} short | {longlong} signed_longlong_int | {ulong} unsigned_long_int | {ushort} unsigned_short_int | {ulonglong} unsigned_longlong_int | {char} char | {boolean} boolean | {enum} enum_type | {scoped} scoped_name; case_body = case_label+ type_spec declarator semicolon; case_label = {or_expr} case or_expr colon | {default} default colon; enum_type = enum [name]:identifier l_brace identifier comma_identifier* r_brace; sequence_type = {simple_positive} sequence lt simple_type_spec comma or_expr gt | {simple} sequence lt simple_type_spec gt; string_type = {positive} string lt or_expr gt | {simple} string; wide_string_type = {positive} wstring lt or_expr gt | {simple} wstring; array_declarator = identifier fixed_array_size+; fixed_array_size = l_bracket or_expr r_bracket; attr_dcl = readonly? attribute param_type_spec identifier comma_identifier*; op_dcl = oneway? op_type_spec identifier parameter_dcls raises_expr? context_expr?; op_type_spec = {param_type_spec} param_type_spec | {void} void; parameter_dcls = {param_dcl} l_parenthese param_dcl comma_param_dcl* r_parenthese | {empty} l_parenthese r_parenthese; param_dcl = param_attribute param_type_spec identifier; raises_expr = raises l_parenthese scoped_name comma_scoped_name* r_parenthese; context_expr = context l_parenthese string_literal comma_string_literal* r_parenthese; param_type_spec = {base} base_type_spec | {string} string_type | {wide} wide_string_type | {scoped} scoped_name; fixed_pt_type = fixed lt [first]:or_expr comma [exponent]:or_expr gt; unary_operator = {minus} minus | {plus} plus | {tilde} tilde; boolean_literal = {true} true | {false} false; param_attribute = {in} in | {out} out | {inout} inout; floating_pt_type = {float} float | {double} double | {lond_double} long double; unsigned_short_int = unsigned short; unsigned_long_int = unsigned long; unsigned_longlong_int = unsigned [left]:long [right]:long; signed_longlong_int = [left]:long [right]:long; comma_scoped_name = comma scoped_name; comma_identifier = comma identifier; comma_param_dcl = comma param_dcl; comma_declarator = comma declarator; comma_init_param_decl = comma init_param_decl; comma_string_literal = comma string_literal; type_declarator = typedef type_spec declarators;
This site has been last updated by the web master
on 2007/6/24.