1 #ifndef __AST_FROM_STRING_H__
2 #define __AST_FROM_STRING_H__
26 #define OFS_MAX_LEN 256
31 ROSE_DLL_API
extern const char*
c_char;
86 ROSE_DLL_API
bool afs_match_substr(
const char* substr,
bool checkTrail =
true);
ROSE_DLL_API bool afs_match_selection_statement()
Match selection statement: IF '(' expression ')' statement | IF '(' expression ')' statement ELSE sta...
ROSE_DLL_API bool afs_match_constant_expression()
constant_expression : conditional_expression
ROSE_DLL_API bool afs_match_unary_expression()
unary_expression : postfix_expression | INC_OP unary_expression | DEC_OP unary_expression | unary_ope...
bool afs_is_identifier_char()
Check if the current character is a legal identifier character, including letters,...
ROSE_DLL_API bool afs_match_declaration()
Match a declaration. Only the simplest int i=9; style declaration is supported for now.
ROSE_DLL_API bool afs_match_external_declaration()
Match an external declaration. Not yet implemented.
bool afs_match_initializer()
match a char, advance one position if successful.
ROSE_DLL_API bool afs_match_multiplicative_expression()
multiplicative_expression : (cast_expression) ('*' cast_expression | '/' cast_expression | '' cast_ex...
ROSE_DLL_API SgNode * c_sgnode
current anchor SgNode associated with parsing. It will serve as a start point to find enclosing scope...
bool afs_is_letter()
Check if the current character is a letter. No side effect on the current position of the input strin...
ROSE_DLL_API bool afs_match_postfix_expression()
postfix_expression : primary_expression ( '[' expression ']' | '(' ')' | '(' argument_expression_list...
const ROSE_DLL_API char * c_char
A namespace scope char* to avoid passing and returning a target c string for every and each function ...
ROSE_DLL_API bool afs_match_function_definition()
Match a function definition. Not yet implemented.
ROSE_DLL_API bool afs_match_shift_expression()
shift_expression : additive_expression (('<<'|'>>') additive_expression)*
ROSE_DLL_API bool afs_skip_whitespace()
Match and skip whitespace.
ROSE_DLL_API bool afs_match_storage_class_specifier()
Match a storage class specifier. Not yet implemented.
bool afs_is_lower_letter()
Check if the current character is a lower case letter.
This class represents the base class for all types.
ROSE_DLL_API bool afs_match_conditional_expression()
conditional_expression : logical_or_expression ('?' expression ':' conditional_expression)?...
ROSE_DLL_API bool afs_match_jump_statement()
Match a jump statement : 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'retur...
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 an...
ROSE_DLL_API bool afs_match_specifier_qualifier_list(std::vector< SgNode * > &)
Match a list of specifiers and qualifiers : : ( type_qualifier | type_specifier )+.
ROSE_DLL_API bool afs_match_relational_expression()
relational_expression : shift_expression (('<'|'>'|'<='|'>=') shift_expression)*
ROSE_DLL_API bool afs_match_init_declarator(SgType *orig_type, SgType **mod_type, SgName **sname, SgExpression **initializer)
Match init declarator. Store created mod_type, name, and initializer. Original type is needed as inpu...
ROSE_DLL_API bool afs_match_expression_statement()
Match expression statement: : ';' | expression ';'.
ROSE_DLL_API bool afs_match_pointer(SgType *orig_type)
Pointer constructs like * type.
ROSE_DLL_API bool afs_match_exclusive_or_expression()
exclusive_or_expression : and_expression ('^' and_expression)*
ROSE_DLL_API bool afs_match_char(char c)
match a char, advance one position if successful.
ROSE_DLL_API bool afs_match_type_name()
Match a type name : specifier_qualifier_list abstract_declarator?
ROSE_DLL_API bool afs_match_expression()
expression : assignment_expression (',' assignment_expression)*. Match one or more assignment_express...
bool afs_is_digit()
Check if the current character is a digit. The current position of the input string remains unchanged...
This class represents the notion of an expression. Expressions are derived from SgLocatedNodes,...
ROSE_DLL_API bool afs_match_assignment_expression()
assignment_expression : lvalue assignment_operator assignment_expression | conditional_expression
ROSE_DLL_API bool afs_match_constant()
Only integer constant is supported for now. Full grammar is constant : HEX_LITERAL | OCTAL_LITERAL | ...
ROSE_DLL_API bool afs_match_double_const(double *result)
Match an double constant, store it into result.
ROSE_DLL_API bool afs_match_labeled_statement()
Match labeled statement : IDENTIFIER ':' statement | 'case' constant_expression ':' statement | 'defa...
ROSE_DLL_API bool afs_match_type_specifier(bool checkTrail=true)
This class represents strings within the IR nodes.
ROSE_DLL_API bool afs_match_iteration_statement()
Match an iteration statement: : 'while' '(' expression ')' statement | 'do' statement 'while' '(' exp...
ROSE_DLL_API bool afs_match_translation_unit()
Match a translation unit. Not yet implemented.
ROSE_DLL_API bool afs_match_declaration_specifiers(SgType **tt)
Match declaration specifiers, store the matched type into *tt.
This class represents the base class for all IR nodes within Sage III.
ROSE_DLL_API bool afs_match_and_expression()
and_expression : equality_expression ('&' equality_expression)*
ROSE_DLL_API bool afs_match_primary_expression()
primary_expression : IDENTIFIER | constant | '(' expression ')'
ROSE_DLL_API bool afs_match_compound_statement()
Not yet implemented. Match compound statement: '{' declaration* statement_list? '}'.
ROSE_DLL_API bool afs_match_logical_or_expression()
logical_or_expression : logical_and_expression ('||' logical_and_expression)*
ROSE_DLL_API bool afs_match_inclusive_or_expression()
inclusive_or_expression : exclusive_or_expression ('|' exclusive_or_expression)*
ROSE_DLL_API bool afs_match_integer_const(int *result)
Match an integer constant, store it into result.
ROSE_DLL_API bool afs_match_logical_and_expression()
logical_and_expression : inclusive_or_expression ('&&' inclusive_or_expression)*
ROSE_DLL_API bool afs_match_type_qualifier()
Match a type qualifier : 'const' | 'volatile'.
ROSE_DLL_API SgNode * c_parsed_node
Store the AST substree (expression, statement) generated from a helper function.
ROSE_DLL_API bool afs_match_init_declarator_list()
Match an init declarator list. Not yet implemented.
ROSE_DLL_API bool afs_match_additive_expression()
Grammar: additive_expression : (multiplicative_expression) ('+' multiplicative_expression | '-' multi...
bool afs_is_upper_letter()
Check if the current character is a upper case letter.
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,...
ROSE_DLL_API bool afs_match_direct_declarator()
Match a direct declarator.
ROSE_DLL_API bool afs_match_declarator(SgType *orig_type, SgType **modified_type)
Match a declarator.
ROSE_DLL_API bool afs_match_equality_expression()
equality_expression : relational_expression (('=='|'!=') relational_expression)*
ROSE_DLL_API bool afs_match_statement()
match any statement, not complete yet. Don't use it yet . : labeled_statement | compound_statement | ...
Parser building blocks for creating simple recursive descent parsers generating AST from strings.
ROSE_DLL_API bool afs_match_cast_expression()
cast_expression : '(' type_name ')' cast_expression | unary_expression
ROSE_DLL_API bool afs_match_argument_expression_list()
Grammar: argument_expression_list : assignment_expression (',' assignment_expression)* one assignment...
ROSE_DLL_API bool afs_match_lvalue()
lvalue: unary_expression