1#ifndef __AST_FROM_STRING_H__
2#define __AST_FROM_STRING_H__
27 #define OFS_MAX_LEN 256
31 ROSE_DLL_API
extern const char*
c_char;
This class represents the notion of an expression. Expressions are derived from SgLocatedNodes,...
This class represents strings within the IR nodes.
This class represents the base class for all IR nodes within Sage III.
This class represents the base class for all types.
Parser building blocks for creating simple recursive descent parsers generating AST from strings.
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_external_declaration()
Match an external declaration. Not yet implemented.
ROSE_DLL_API bool afs_match_shift_expression()
shift_expression : additive_expression (('<<'|'>>') additive_expression)*
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 ...
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_postfix_expression()
postfix_expression : primary_expression ( '[' expression ']' | '(' ')' | '(' argument_expression_list...
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_lower_letter()
Check if the current character is a lower case letter.
ROSE_DLL_API bool afs_match_type_specifier(bool checkTrail=true)
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_multiplicative_expression()
multiplicative_expression : (cast_expression) ('*' cast_expression | '/' cast_expression | '' cast_ex...
ROSE_DLL_API bool afs_match_translation_unit()
Match a translation unit. Not yet implemented.
ROSE_DLL_API bool afs_match_pointer(SgType *orig_type)
Pointer constructs like * type.
ROSE_DLL_API bool afs_match_primary_expression()
primary_expression : IDENTIFIER | constant | '(' expression ')'
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_unary_expression()
unary_expression : postfix_expression | INC_OP unary_expression | DEC_OP unary_expression | unary_ope...
ROSE_DLL_API bool afs_match_logical_or_expression()
logical_or_expression : logical_and_expression ('||' logical_and_expression)*
ROSE_DLL_API bool afs_match_compound_statement()
Not yet implemented. Match compound statement: '{' declaration* statement_list? '}'.
ROSE_DLL_API bool afs_match_iteration_statement()
Match an iteration statement: : 'while' '(' expression ')' statement | 'do' statement 'while' '(' exp...
ROSE_DLL_API bool afs_skip_whitespace()
Match and skip whitespace.
ROSE_DLL_API bool afs_match_jump_statement()
Match a jump statement : 'goto' IDENTIFIER ';' | 'continue' ';' | 'break' ';' | 'return' ';' | 'retur...
ROSE_DLL_API bool afs_match_init_declarator_list()
Match an init declarator list. Not yet implemented.
ROSE_DLL_API bool afs_match_storage_class_specifier()
Match a storage class specifier. Not yet implemented.
ROSE_DLL_API bool afs_match_relational_expression()
relational_expression : shift_expression (('<'|'>'|'<='|'>=') shift_expression)*
ROSE_DLL_API bool afs_match_expression_statement()
Match expression statement: : ';' | expression ';'.
bool afs_match_initializer()
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_conditional_expression()
conditional_expression : logical_or_expression ('?' expression ':' conditional_expression)?...
bool afs_is_identifier_char()
Check if the current character is a legal identifier character, including letters,...
ROSE_DLL_API bool afs_match_and_expression()
and_expression : equality_expression ('&' equality_expression)*
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_type_qualifier()
Match a type qualifier : 'const' | 'volatile'.
ROSE_DLL_API bool afs_match_equality_expression()
equality_expression : relational_expression (('=='|'!=') relational_expression)*
ROSE_DLL_API bool afs_match_char(char c)
match a char, advance one position if successful.
ROSE_DLL_API bool afs_match_expression()
expression : assignment_expression (',' assignment_expression)*. Match one or more assignment_express...
ROSE_DLL_API bool afs_match_declaration_specifiers(SgType **tt)
Match declaration specifiers, store the matched type into *tt.
ROSE_DLL_API SgNode * c_parsed_node
Store the AST substree (expression, statement) generated from a helper function.
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_argument_expression_list()
Grammar: argument_expression_list : assignment_expression (',' assignment_expression)* one assignment...
ROSE_DLL_API bool afs_match_direct_declarator()
Match a direct declarator.
ROSE_DLL_API bool afs_match_constant_expression()
constant_expression : conditional_expression
ROSE_DLL_API bool afs_match_exclusive_or_expression()
exclusive_or_expression : and_expression ('^' and_expression)*
bool afs_is_upper_letter()
Check if the current character is a upper case letter.
ROSE_DLL_API bool afs_match_integer_const(int *result)
Match an integer constant, store it into result.
ROSE_DLL_API bool afs_match_additive_expression()
Grammar: additive_expression : (multiplicative_expression) ('+' multiplicative_expression | '-' multi...
ROSE_DLL_API bool afs_match_statement()
match any statement, not complete yet. Don't use it yet . : labeled_statement | compound_statement | ...
ROSE_DLL_API bool afs_match_cast_expression()
cast_expression : '(' type_name ')' cast_expression | unary_expression
ROSE_DLL_API bool afs_match_labeled_statement()
Match labeled statement : IDENTIFIER ':' statement | 'case' constant_expression ':' statement | 'defa...
bool afs_is_digit()
Check if the current character is a digit. The current position of the input string remains unchanged...
ROSE_DLL_API bool afs_match_logical_and_expression()
logical_and_expression : inclusive_or_expression ('&&' inclusive_or_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_function_definition()
Match a function definition. Not yet implemented.
ROSE_DLL_API bool afs_match_double_const(double *result)
Match an double constant, store it into result.
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_lvalue()
lvalue: unary_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_declarator(SgType *orig_type, SgType **modified_type)
Match a declarator.