ROSE
0.9.6a
|
Liao 4/13/2011. More...
Functions | |
Character check , without side effect on the current position | |
utility functions for checking characters, without changing the current position of the input string being parsed. | |
bool | afs_is_digit () |
Check if the current character is a digit. The current position of the input string remains unchanged either way. More... | |
bool | afs_is_identifier_char () |
Check if the current character is a legal identifier character, including letters, digits, '_' and '$' (For fortran). No side effect on the current position. More... | |
bool | afs_is_letter () |
Check if the current character is a letter. No side effect on the current position of the input string. More... | |
bool | afs_is_lower_letter () |
Check if the current character is a lower case letter. More... | |
bool | afs_is_upper_letter () |
Check if the current character is a upper case letter. More... | |
Match with side effects (set c_parsed_node and advance the current position of character) if successful. Return false and have no side effects if the match fails. | |
utility functions for matching string, whitespace, identifiers, const etc. Successful match will advance the current position. entry point, declarations, types Follow the order of http://www.antlr.org/grammar/1153358328744/C.g | |
ROSE_DLL_API bool | afs_match_char (char c) |
match a char, advance one position if successful. More... | |
ROSE_DLL_API bool | afs_match_substr (const char *substr, bool checkTrail=true) |
Match a sub string: a given sub c string from the input c string, again skip heading space/tabs if any. More... | |
ROSE_DLL_API bool | afs_skip_whitespace () |
Match and skip whitespace. More... | |
ROSE_DLL_API bool | afs_match_identifier () |
Match identifier, move to the next character if successful. The identifier could be a name of a type, function, variable, or label. The resolved identifier (type , variable name, function reference expression, or label name) is stored into c_parsed_node. More... | |
ROSE_DLL_API bool | afs_match_integer_const (int *result) |
Match an integer constant, store it into result. More... | |
ROSE_DLL_API bool | afs_match_translation_unit () |
Match a translation unit. Not yet implemented. More... | |
ROSE_DLL_API bool | afs_match_external_declaration () |
Match an external declaration. Not yet implemented. More... | |
ROSE_DLL_API bool | afs_match_function_definition () |
Match a function definition. Not yet implemented. More... | |
ROSE_DLL_API bool | afs_match_declaration () |
Match a declaration. Not yet implemented. More... | |
ROSE_DLL_API bool | afs_match_declaration_specifiers () |
Match declaration specifiers. Not yet implemented. More... | |
ROSE_DLL_API bool | afs_match_init_declarator_list () |
Match an init declarator list. Not yet implemented. More... | |
ROSE_DLL_API bool | afs_match_init_declarator () |
Match init declarator. Not yet implemented. More... | |
ROSE_DLL_API bool | afs_match_storage_class_specifier () |
Match a storage class specifier. Not yet implemented. More... | |
ROSE_DLL_API bool | afs_match_type_specifier () |
Match a type specifier : 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | struct_or_union_specifier | enum_specifier | type_id. The recognized type is stored in c_parsed_node. More... | |
ROSE_DLL_API bool | afs_match_specifier_qualifier_list (std::vector< SgNode * > &) |
Match a list of specifiers and qualifiers : : ( type_qualifier | type_specifier )+. More... | |
ROSE_DLL_API bool | afs_match_type_qualifier () |
Match a type qualifier : 'const' | 'volatile'. More... | |
ROSE_DLL_API bool | afs_match_type_name () |
Match a type name : specifier_qualifier_list abstract_declarator? More... | |
Expression | |
utility functions for parsing expressions and generate AST pieces for them. Successful match will advance the current position. The function names and grammars largely follow the conventions used in http://www.antlr.org/grammar/1153358328744/C.g. For example in the grammar shown, | means or, * means 0 or more repetition of the previous term , ? means 0 or 1 occurrence of the previous term. + means 1 or more occurrence. | |
ROSE_DLL_API bool | afs_match_argument_expression_list () |
Grammar: argument_expression_list : assignment_expression (',' assignment_expression)* one assignment_expression, followed by optionally arbitrary numbers of (',' assignment_expression), store SgExprListExp to c_parsed_node. More... | |
ROSE_DLL_API bool | afs_match_additive_expression () |
Grammar: additive_expression : (multiplicative_expression) ('+' multiplicative_expression | '-' multiplicative_expression)*. More... | |
ROSE_DLL_API bool | afs_match_multiplicative_expression () |
multiplicative_expression : (cast_expression) ('*' cast_expression | '/' cast_expression | '' cast_expression)* More... | |
ROSE_DLL_API bool | afs_match_cast_expression () |
cast_expression : '(' type_name ')' cast_expression | unary_expression More... | |
ROSE_DLL_API bool | afs_match_unary_expression () |
unary_expression : postfix_expression | INC_OP unary_expression | DEC_OP unary_expression | unary_operator cast_expression | SIZEOF unary_expression | SIZEOF '(' type_name ')' More... | |
ROSE_DLL_API bool | afs_match_postfix_expression () |
postfix_expression : primary_expression ( '[' expression ']' | '(' ')' | '(' argument_expression_list ')' | '.' IDENTIFIER | '->' IDENTIFIER | '++' | '–' )* More... | |
ROSE_DLL_API bool | afs_match_primary_expression () |
primary_expression : IDENTIFIER | constant | '(' expression ')' More... | |
ROSE_DLL_API bool | afs_match_constant () |
Only integer constant is supported for now. Full grammar is constant : HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | STRING_LITERAL | FLOATING_POINT_LITERAL. More... | |
ROSE_DLL_API bool | afs_match_expression () |
expression : assignment_expression (',' assignment_expression)*. Match one or more assignment_expression More... | |
ROSE_DLL_API bool | afs_match_constant_expression () |
constant_expression : conditional_expression More... | |
ROSE_DLL_API bool | afs_match_assignment_expression () |
assignment_expression : lvalue assignment_operator assignment_expression | conditional_expression More... | |
ROSE_DLL_API bool | afs_match_lvalue () |
lvalue: unary_expression More... | |
ROSE_DLL_API bool | afs_match_conditional_expression () |
conditional_expression : logical_or_expression ('?' expression ':' conditional_expression)? '?' means 0 or 1 occurrence More... | |
ROSE_DLL_API bool | afs_match_logical_or_expression () |
logical_or_expression : logical_and_expression ('||' logical_and_expression)* More... | |
ROSE_DLL_API bool | afs_match_logical_and_expression () |
logical_and_expression : inclusive_or_expression ('&&' inclusive_or_expression)* More... | |
ROSE_DLL_API bool | afs_match_inclusive_or_expression () |
inclusive_or_expression : exclusive_or_expression ('|' exclusive_or_expression)* More... | |
ROSE_DLL_API bool | afs_match_exclusive_or_expression () |
exclusive_or_expression : and_expression ('^' and_expression)* More... | |
ROSE_DLL_API bool | afs_match_and_expression () |
and_expression : equality_expression ('&' equality_expression)* More... | |
ROSE_DLL_API bool | afs_match_equality_expression () |
equality_expression : relational_expression (('=='|'!=') relational_expression)* More... | |
ROSE_DLL_API bool | afs_match_relational_expression () |
relational_expression : shift_expression (('<'|'>'|'<='|'>=') shift_expression)* More... | |
ROSE_DLL_API bool | afs_match_shift_expression () |
shift_expression : additive_expression (('<<'|'>>') additive_expression)* More... | |
Statement | |
utility functions to parse a few statements. Successful match will advance the current position. INCOMPLETE now, Don't use them yet! | |
ROSE_DLL_API bool | afs_match_statement () |
match any statement, not complete yet. Don't use it yet . : labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement More... | |
ROSE_DLL_API bool | afs_match_labeled_statement () |
Match labeled statement : IDENTIFIER ':' statement | 'case' constant_expression ':' statement | 'default' ':' statement. More... | |
ROSE_DLL_API bool | afs_match_compound_statement () |
Not yet implemented. Match compound statement: '{' declaration* statement_list? '}'. More... | |
ROSE_DLL_API bool | afs_match_expression_statement () |
Match expression statement: : ';' | expression ';'. More... | |
ROSE_DLL_API bool | afs_match_selection_statement () |
Match selection statement: IF '(' expression ')' statement | IF '(' expression ')' statement ELSE statement | SWITCH '(' expression ')' statement. More... | |
ROSE_DLL_API bool | afs_match_iteration_statement () |
Match an iteration statement: : 'while' '(' expression ')' statement | 'do' statement 'while' '(' expression ')' ';' | 'for' '(' expression_statement expression_statement expression? ')' statement. More... | |
ROSE_DLL_API bool | afs_match_jump_statement () |
Match a jump statement : 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'return' expression ';'. More... | |
Variables | |
Namespace scope variables | |
Semi-global variables | |
ROSE_DLL_API const char * | c_char |
A namespace scope char* to avoid passing and returning a target c string for every and each function current characters being scanned, what is pointed is const, the pointer itself is not const. More... | |
ROSE_DLL_API SgNode * | c_sgnode |
current anchor SgNode associated with parsing. It will serve as a start point to find enclosing scopes for resolving identifiers/symbols More... | |
ROSE_DLL_API SgNode * | c_parsed_node |
Store the AST substree (expression, statement) generated from a helper function. More... | |
Liao 4/13/2011.
Support creating simple recursive descent parsers of source code annotations
The namespace, AstFromString, collects a set of helper functions (or parser building blocks) that operate on an input string to create simple recursive descent parsers for source code annotations(C/C++ pragmas or Fortran comments).
bool AstFromString::afs_is_digit | ( | ) |
Check if the current character is a digit. The current position of the input string remains unchanged either way.
bool AstFromString::afs_is_identifier_char | ( | ) |
Check if the current character is a legal identifier character, including letters, digits, '_' and '$' (For fortran). No side effect on the current position.
bool AstFromString::afs_is_letter | ( | ) |
Check if the current character is a letter. No side effect on the current position of the input string.
bool AstFromString::afs_is_lower_letter | ( | ) |
Check if the current character is a lower case letter.
bool AstFromString::afs_is_upper_letter | ( | ) |
Check if the current character is a upper case letter.
ROSE_DLL_API bool AstFromString::afs_match_char | ( | char | c) |
match a char, advance one position if successful.
ROSE_DLL_API bool AstFromString::afs_match_substr | ( | const char * | substr, |
bool | checkTrail = true |
||
) |
Match a sub string: a given sub c string from the input c string, again skip heading space/tabs if any.
checkTrail: Check the immediate following character after the match, it must be one of whitespace, end of str, newline, tab, (, ), or '!', etc. It is set to true by default, used to ensure the matched substr is a full identifier/keywords. Note: If try to match non-identifier, such as operators +=, etc), please set checkTrail to false!! But Fortran OpenMP allows blanks/tabs to be ignored between certain pair of keywords: e.g: end critical == endcritical , parallel do == paralleldo to match the 'end' and 'parallel', we have to skip trail checking. return values:
ROSE_DLL_API bool AstFromString::afs_skip_whitespace | ( | ) |
Match and skip whitespace.
ROSE_DLL_API bool AstFromString::afs_match_identifier | ( | ) |
Match identifier, move to the next character if successful. The identifier could be a name of a type, function, variable, or label. The resolved identifier (type , variable name, function reference expression, or label name) is stored into c_parsed_node.
ROSE_DLL_API bool AstFromString::afs_match_integer_const | ( | int * | result) |
Match an integer constant, store it into result.
ROSE_DLL_API bool AstFromString::afs_match_translation_unit | ( | ) |
Match a translation unit. Not yet implemented.
ROSE_DLL_API bool AstFromString::afs_match_external_declaration | ( | ) |
Match an external declaration. Not yet implemented.
ROSE_DLL_API bool AstFromString::afs_match_function_definition | ( | ) |
Match a function definition. Not yet implemented.
ROSE_DLL_API bool AstFromString::afs_match_declaration | ( | ) |
Match a declaration. Not yet implemented.
ROSE_DLL_API bool AstFromString::afs_match_declaration_specifiers | ( | ) |
Match declaration specifiers. Not yet implemented.
ROSE_DLL_API bool AstFromString::afs_match_init_declarator_list | ( | ) |
Match an init declarator list. Not yet implemented.
ROSE_DLL_API bool AstFromString::afs_match_init_declarator | ( | ) |
Match init declarator. Not yet implemented.
ROSE_DLL_API bool AstFromString::afs_match_storage_class_specifier | ( | ) |
Match a storage class specifier. Not yet implemented.
ROSE_DLL_API bool AstFromString::afs_match_type_specifier | ( | ) |
Match a type specifier : 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | struct_or_union_specifier | enum_specifier | type_id. The recognized type is stored in c_parsed_node.
ROSE_DLL_API bool AstFromString::afs_match_specifier_qualifier_list | ( | std::vector< SgNode * > & | ) |
Match a list of specifiers and qualifiers : : ( type_qualifier | type_specifier )+.
ROSE_DLL_API bool AstFromString::afs_match_type_qualifier | ( | ) |
Match a type qualifier : 'const' | 'volatile'.
ROSE_DLL_API bool AstFromString::afs_match_type_name | ( | ) |
Match a type name : specifier_qualifier_list abstract_declarator?
ROSE_DLL_API bool AstFromString::afs_match_argument_expression_list | ( | ) |
Grammar: argument_expression_list : assignment_expression (',' assignment_expression)* one assignment_expression, followed by optionally arbitrary numbers of (',' assignment_expression), store SgExprListExp to c_parsed_node.
ROSE_DLL_API bool AstFromString::afs_match_additive_expression | ( | ) |
Grammar: additive_expression : (multiplicative_expression) ('+' multiplicative_expression | '-' multiplicative_expression)*.
ROSE_DLL_API bool AstFromString::afs_match_multiplicative_expression | ( | ) |
multiplicative_expression : (cast_expression) ('*' cast_expression | '/' cast_expression | '' cast_expression)*
ROSE_DLL_API bool AstFromString::afs_match_cast_expression | ( | ) |
cast_expression : '(' type_name ')' cast_expression | unary_expression
ROSE_DLL_API bool AstFromString::afs_match_unary_expression | ( | ) |
unary_expression : postfix_expression | INC_OP unary_expression | DEC_OP unary_expression | unary_operator cast_expression | SIZEOF unary_expression | SIZEOF '(' type_name ')'
ROSE_DLL_API bool AstFromString::afs_match_postfix_expression | ( | ) |
postfix_expression : primary_expression ( '[' expression ']' | '(' ')' | '(' argument_expression_list ')' | '.' IDENTIFIER | '->' IDENTIFIER | '++' | '–' )*
ROSE_DLL_API bool AstFromString::afs_match_primary_expression | ( | ) |
primary_expression : IDENTIFIER | constant | '(' expression ')'
ROSE_DLL_API bool AstFromString::afs_match_constant | ( | ) |
Only integer constant is supported for now. Full grammar is constant : HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | STRING_LITERAL | FLOATING_POINT_LITERAL.
ROSE_DLL_API bool AstFromString::afs_match_expression | ( | ) |
expression : assignment_expression (',' assignment_expression)*. Match one or more assignment_expression
ROSE_DLL_API bool AstFromString::afs_match_constant_expression | ( | ) |
constant_expression : conditional_expression
ROSE_DLL_API bool AstFromString::afs_match_assignment_expression | ( | ) |
assignment_expression : lvalue assignment_operator assignment_expression | conditional_expression
ROSE_DLL_API bool AstFromString::afs_match_lvalue | ( | ) |
lvalue: unary_expression
ROSE_DLL_API bool AstFromString::afs_match_conditional_expression | ( | ) |
conditional_expression : logical_or_expression ('?' expression ':' conditional_expression)? '?' means 0 or 1 occurrence
ROSE_DLL_API bool AstFromString::afs_match_logical_or_expression | ( | ) |
logical_or_expression : logical_and_expression ('||' logical_and_expression)*
ROSE_DLL_API bool AstFromString::afs_match_logical_and_expression | ( | ) |
logical_and_expression : inclusive_or_expression ('&&' inclusive_or_expression)*
ROSE_DLL_API bool AstFromString::afs_match_inclusive_or_expression | ( | ) |
inclusive_or_expression : exclusive_or_expression ('|' exclusive_or_expression)*
ROSE_DLL_API bool AstFromString::afs_match_exclusive_or_expression | ( | ) |
exclusive_or_expression : and_expression ('^' and_expression)*
ROSE_DLL_API bool AstFromString::afs_match_and_expression | ( | ) |
and_expression : equality_expression ('&' equality_expression)*
ROSE_DLL_API bool AstFromString::afs_match_equality_expression | ( | ) |
equality_expression : relational_expression (('=='|'!=') relational_expression)*
ROSE_DLL_API bool AstFromString::afs_match_relational_expression | ( | ) |
relational_expression : shift_expression (('<'|'>'|'<='|'>=') shift_expression)*
ROSE_DLL_API bool AstFromString::afs_match_shift_expression | ( | ) |
shift_expression : additive_expression (('<<'|'>>') additive_expression)*
ROSE_DLL_API bool AstFromString::afs_match_statement | ( | ) |
match any statement, not complete yet. Don't use it yet . : labeled_statement | compound_statement | expression_statement | selection_statement | iteration_statement | jump_statement
ROSE_DLL_API bool AstFromString::afs_match_labeled_statement | ( | ) |
Match labeled statement : IDENTIFIER ':' statement | 'case' constant_expression ':' statement | 'default' ':' statement.
ROSE_DLL_API bool AstFromString::afs_match_compound_statement | ( | ) |
Not yet implemented. Match compound statement: '{' declaration* statement_list? '}'.
ROSE_DLL_API bool AstFromString::afs_match_expression_statement | ( | ) |
Match expression statement: : ';' | expression ';'.
ROSE_DLL_API bool AstFromString::afs_match_selection_statement | ( | ) |
Match selection statement: IF '(' expression ')' statement | IF '(' expression ')' statement ELSE statement | SWITCH '(' expression ')' statement.
ROSE_DLL_API bool AstFromString::afs_match_iteration_statement | ( | ) |
Match an iteration statement: : 'while' '(' expression ')' statement | 'do' statement 'while' '(' expression ')' ';' | 'for' '(' expression_statement expression_statement expression? ')' statement.
ROSE_DLL_API bool AstFromString::afs_match_jump_statement | ( | ) |
Match a jump statement : 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'return' expression ';'.
ROSE_DLL_API const char* AstFromString::c_char |
A namespace scope char* to avoid passing and returning a target c string for every and each function current characters being scanned, what is pointed is const, the pointer itself is not const.
ROSE_DLL_API SgNode* AstFromString::c_sgnode |
current anchor SgNode associated with parsing. It will serve as a start point to find enclosing scopes for resolving identifiers/symbols
ROSE_DLL_API SgNode* AstFromString::c_parsed_node |
Store the AST substree (expression, statement) generated from a helper function.