cprover
character_refine_preprocess.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: Preprocess a goto-programs so that calls to the java Character
4  library are replaced by simple expressions.
5  For now support is limited to character in the ASCII range,
6  some methods may have incorrect specifications outside of this range.
7 
8 Author: Romain Brenguier
9 
10 Date: March 2017
11 
12 \*******************************************************************/
13 
19 
20 #ifndef CPROVER_JAVA_BYTECODE_CHARACTER_REFINE_PREPROCESS_H
21 #define CPROVER_JAVA_BYTECODE_CHARACTER_REFINE_PREPROCESS_H
22 
23 #include <util/ui_message.h>
24 #include <util/std_code.h>
25 #include <util/mp_arith.h>
26 
28 {
29 public:
32 
33 private:
36  // A table tells us what method to call for each java method signature
37  std::unordered_map<irep_idt, conversion_functiont, irep_id_hash>
39 
40  // Conversion functions
41  static exprt expr_of_char_count(const exprt &chr, const typet &type);
43  static exprt expr_of_char_value(const exprt &chr, const typet &type);
45  static codet convert_compare(conversion_input &target);
56  static exprt expr_of_high_surrogate(const exprt &chr, const typet &type);
58  static exprt expr_of_is_alphabetic(const exprt &chr, const typet &type);
60  static exprt expr_of_is_bmp_code_point(const exprt &chr, const typet &type);
62  static exprt expr_of_is_defined(const exprt &chr, const typet &type);
65  static exprt expr_of_is_digit(const exprt &chr, const typet &type);
68  static exprt expr_of_is_high_surrogate(const exprt &chr, const typet &type);
71  const exprt &chr, const typet &type);
83  static exprt expr_of_is_letter(const exprt &chr, const typet &type);
86  static exprt expr_of_is_letter_or_digit(const exprt &chr, const typet &type);
89  static exprt expr_of_is_ascii_lower_case(const exprt &chr, const typet &type);
93  static exprt expr_of_is_mirrored(const exprt &chr, const typet &type);
96  static codet convert_is_space(conversion_input &target);
97  static exprt expr_of_is_space_char(const exprt &chr, const typet &type);
101  const exprt &chr, const typet &type);
103  static exprt expr_of_is_surrogate(const exprt &chr, const typet &type);
106  static exprt expr_of_is_title_case(const exprt &chr, const typet &type);
109  static exprt expr_of_is_letter_number(const exprt &chr, const typet &type);
111  const exprt &chr, const typet &type);
113  conversion_input &target);
116  const exprt &chr, const typet &type);
118  conversion_input &target);
120  conversion_input &target);
121  static exprt expr_of_is_ascii_upper_case(const exprt &chr, const typet &type);
124  static exprt expr_of_is_valid_code_point(const exprt &chr, const typet &type);
126  static exprt expr_of_is_whitespace(const exprt &chr, const typet &type);
129  static exprt expr_of_low_surrogate(const exprt &chr, const typet &type);
131  static exprt expr_of_reverse_bytes(const exprt &chr, const typet &type);
133  static exprt expr_of_to_chars(const exprt &chr, const typet &type);
134  static codet convert_to_chars(conversion_input &target);
136  static exprt expr_of_to_lower_case(const exprt &chr, const typet &type);
139  static exprt expr_of_to_title_case(const exprt &chr, const typet &type);
142  static exprt expr_of_to_upper_case(const exprt &chr, const typet &type);
145 
146  // Helper functions
148  exprt (*expr_function)(const exprt &chr, const typet &type),
149  conversion_input &target);
150  static exprt in_interval_expr(
151  const exprt &chr,
152  const mp_integer &lower_bound,
153  const mp_integer &upper_bound);
154  static exprt in_list_expr(
155  const exprt &chr, const std::list<mp_integer> &list);
156 };
157 
158 #endif // CPROVER_JAVA_BYTECODE_CHARACTER_REFINE_PREPROCESS_H
static codet convert_is_lower_case_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
The type of an expression.
Definition: type.h:20
static codet convert_is_unicode_identifier_part_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
BigInt mp_integer
Definition: mp_arith.h:19
static codet convert_is_unicode_identifier_part_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_get_directionality_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static exprt expr_of_is_title_case(const exprt &chr, const typet &type)
Determines if the specified character is a titlecase character.
static exprt expr_of_is_mirrored(const exprt &chr, const typet &type)
Determines whether the character is mirrored according to the Unicode specification.
static codet convert_high_surrogate(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static exprt expr_of_is_digit(const exprt &chr, const typet &type)
Determines if the specified character is a digit.
static exprt expr_of_char_count(const exprt &chr, const typet &type)
Determines the number of char values needed to represent the specified character (Unicode code point)...
static codet convert_is_bmp_code_point(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_defined_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static exprt expr_of_char_value(const exprt &chr, const typet &type)
Casts the given expression to the given type.
static codet convert_is_digit_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_whitespace_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static exprt expr_of_is_ascii_upper_case(const exprt &chr, const typet &type)
Determines if the specified character is an ASCII uppercase character.
static codet convert_for_digit(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_digit_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static exprt expr_of_to_lower_case(const exprt &chr, const typet &type)
Converts the character argument to lowercase.
static exprt expr_of_is_ascii_lower_case(const exprt &chr, const typet &type)
Determines if the specified character is an ASCII lowercase character.
static exprt expr_of_to_chars(const exprt &chr, const typet &type)
Converts the specified character (Unicode code point) to its UTF-16 representation stored in a char a...
static codet convert_compare(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static exprt in_list_expr(const exprt &chr, const std::list< mp_integer > &list)
The returned expression is true when the given character is equal to one of the element in the list...
static codet convert_is_java_letter(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_alphabetic(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static exprt expr_of_is_letter(const exprt &chr, const typet &type)
Determines if the specified character is a letter.
static exprt expr_of_is_alphabetic(const exprt &chr, const typet &type)
Determines if the specified character (Unicode code point) is alphabetic.
static exprt expr_of_is_surrogate(const exprt &chr, const typet &type)
Determines if the given char value is a Unicode surrogate code unit.
static codet convert_hash_code(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_high_surrogate(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static exprt expr_of_to_title_case(const exprt &chr, const typet &type)
Converts the character argument to titlecase.
static codet convert_is_java_letter_or_digit(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method isJavaLette...
static exprt expr_of_to_upper_case(const exprt &chr, const typet &type)
Converts the character argument to uppercase.
static codet convert_is_letter_or_digit_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static exprt expr_of_is_letter_number(const exprt &chr, const typet &type)
Determines if the specified character is in the LETTER_NUMBER category of Unicode.
static exprt expr_of_is_defined(const exprt &chr, const typet &type)
Determines if a character is defined in Unicode.
static codet convert_is_letter_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_defined_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_low_surrogate(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static exprt expr_of_is_bmp_code_point(const exprt &chr, const typet &type)
Determines whether the specified character (Unicode code point) is in the Basic Multilingual Plane (B...
static exprt expr_of_is_unicode_identifier_start(const exprt &chr, const typet &type)
Determines if the specified character is permissible as the first character in a Unicode identifier...
static exprt expr_of_high_surrogate(const exprt &chr, const typet &type)
Returns the leading surrogate (a high surrogate code unit) of the surrogate pair representing the spe...
static codet convert_to_upper_case_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_unicode_identifier_start_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_surrogate(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_to_code_point(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_to_lower_case_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_title_case_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_to_title_case_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_get_directionality_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_lower_case_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static exprt expr_of_is_unicode_identifier_part(const exprt &chr, const typet &type)
Determines if the character may be part of a Unicode identifier.
static codet convert_to_chars(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static exprt in_interval_expr(const exprt &chr, const mp_integer &lower_bound, const mp_integer &upper_bound)
The returned expression is true when the first argument is in the interval defined by the lower and u...
codet replace_character_call(const code_function_callt &call) const
replace function calls to functions of the Character by an affectation if possible, returns the same code otherwise.
static codet convert_is_supplementary_code_point(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_low_surrogate(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
std::unordered_map< irep_idt, conversion_functiont, irep_id_hash > conversion_table
static codet convert_is_identifier_ignorable_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
A function call.
Definition: std_code.h:657
static exprt expr_of_is_valid_code_point(const exprt &chr, const typet &type)
Determines whether the specified code point is a valid Unicode code point value.
static exprt expr_of_is_supplementary_code_point(const exprt &chr, const typet &type)
Determines whether the specified character (Unicode code point) is in the supplementary character ran...
static codet convert_is_whitespace_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_to_upper_case_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_letter_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_char_count(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
codet(* conversion_functiont)(conversion_input &target)
static codet convert_is_java_identifier_start_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method isJavaIdent...
static codet convert_is_java_identifier_start_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method isJavaIdent...
static codet convert_is_surrogate_pair(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_get_type_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static exprt expr_of_is_letter_or_digit(const exprt &chr, const typet &type)
Determines if the specified character is a letter or digit.
static codet convert_is_title_case_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_java_identifier_part_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_digit_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_upper_case_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
Base class for all expressions.
Definition: expr.h:46
static codet convert_is_letter_or_digit_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_identifier_ignorable_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_char_value(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
void initialize_conversion_table()
fill maps with correspondance from java method names to conversion functions
static codet convert_is_ISO_control_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_java_identifier_part_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method isJavaIdent...
static codet convert_digit_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_get_type_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
const code_function_callt & conversion_input
static exprt expr_of_is_high_surrogate(const exprt &chr, const typet &type)
Determines if the given char value is a Unicode high-surrogate code unit (also known as leading-surro...
static exprt expr_of_is_space_char(const exprt &chr, const typet &type)
Determines if the specified character is white space according to Unicode (SPACE_SEPARATOR, LINE_SEPARATOR, or PARAGRAPH_SEPARATOR)
static codet convert_reverse_bytes(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_space_char_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_mirrored_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
A statement in a programming language.
Definition: std_code.h:19
static codet convert_is_space(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_to_lower_case_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_valid_code_point(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_get_numeric_value_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_unicode_identifier_start_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_upper_case_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static exprt expr_of_reverse_bytes(const exprt &chr, const typet &type)
Returns the value obtained by reversing the order of the bytes in the specified char value...
static codet convert_char_function(exprt(*expr_function)(const exprt &chr, const typet &type), conversion_input &target)
converts based on a function on expressions
static exprt expr_of_is_identifier_ignorable(const exprt &chr, const typet &type)
Determines if the character is one of ignorable in a Java identifier, that is, it is in one of these ...
static exprt expr_of_low_surrogate(const exprt &chr, const typet &type)
Returns the trailing surrogate (a low surrogate code unit) of the surrogate pair representing the spe...
static exprt expr_of_is_whitespace(const exprt &chr, const typet &type)
Determines if the specified character is white space according to Java.
static codet convert_is_ISO_control_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_to_title_case_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_space_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_mirrored_char(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_get_numeric_value_int(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...
static codet convert_is_ideographic(conversion_input &target)
Converts function call to an assignment of an expression corresponding to the java method Character...