Added in bitwise operators
This commit is contained in:
@@ -54,7 +54,10 @@ else
|
|||||||
cp deprecated_compiler/build_kraken/kraken/kraken ../${kraken}_bootstrap
|
cp deprecated_compiler/build_kraken/kraken/kraken ../${kraken}_bootstrap
|
||||||
popd
|
popd
|
||||||
# Now make
|
# Now make
|
||||||
|
mv ./krakenGrammer.kgm krakenGrammer.kgm_new
|
||||||
|
cp bootstrap_kalypso/krakenGrammer.kgm ./
|
||||||
./${kraken}_bootstrap kraken.krak ${kraken}_deprecated
|
./${kraken}_bootstrap kraken.krak ${kraken}_deprecated
|
||||||
|
mv ./krakenGrammer.kgm_new krakenGrammer.kgm
|
||||||
else
|
else
|
||||||
echo "${kraken}_deprecated exists, calling"
|
echo "${kraken}_deprecated exists, calling"
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -118,7 +118,10 @@ defer_statement = "defer" WS statement ;
|
|||||||
function_call = unarad WS "\(" WS opt_parameter_list WS "\)" ;
|
function_call = unarad WS "\(" WS opt_parameter_list WS "\)" ;
|
||||||
|
|
||||||
boolean_expression = boolean_expression WS "\|\|" WS and_boolean_expression | and_boolean_expression ;
|
boolean_expression = boolean_expression WS "\|\|" WS and_boolean_expression | and_boolean_expression ;
|
||||||
and_boolean_expression = and_boolean_expression WS "&&" WS bool_exp | bool_exp ;
|
and_boolean_expression = and_boolean_expression WS "&&" WS bitwise_or | bitwise_or ;
|
||||||
|
bitwise_or = bitwise_or WS "\|" WS bitwise_xor | bitwise_xor ;
|
||||||
|
bitwise_xor = bitwise_xor WS "^" WS bitwise_and | bitwise_and ;
|
||||||
|
bitwise_and = bitwise_and WS "&" WS bool_exp | bool_exp ;
|
||||||
bool_exp = expression WS comparator WS expression | expression ;
|
bool_exp = expression WS comparator WS expression | expression ;
|
||||||
comparator = "==" | "<=" | ">=" | "!=" | "<" | ">" ;
|
comparator = "==" | "<=" | ">=" | "!=" | "<" | ">" ;
|
||||||
|
|
||||||
|
|||||||
@@ -457,6 +457,7 @@ obj ast_transformation (Object) {
|
|||||||
} else if (name == "lambda") {
|
} else if (name == "lambda") {
|
||||||
return transform_lambda(node, scope, template_replacements)
|
return transform_lambda(node, scope, template_replacements)
|
||||||
} else if (name == "boolean_expression" || name == "and_boolean_expression"
|
} else if (name == "boolean_expression" || name == "and_boolean_expression"
|
||||||
|
|| name == "bitwise_or" || name == "bitwise_xor" || name == "bitwise_and"
|
||||||
|| name == "bool_exp" || name == "expression"
|
|| name == "bool_exp" || name == "expression"
|
||||||
|| name == "shiftand" || name == "term"
|
|| name == "shiftand" || name == "term"
|
||||||
|| name == "factor" || name == "unarad"
|
|| name == "factor" || name == "unarad"
|
||||||
@@ -1096,7 +1097,7 @@ fun get_builtin_function(name: string, param_types: vector<*type>): *ast_node {
|
|||||||
return ast_function_ptr(name, type_ptr(param_types, param_types[1]), vector<*ast_node>())
|
return ast_function_ptr(name, type_ptr(param_types, param_types[1]), vector<*ast_node>())
|
||||||
if (name == "[]")
|
if (name == "[]")
|
||||||
return ast_function_ptr(name, type_ptr(param_types, param_types[0]->clone_with_decreased_indirection()), vector<*ast_node>())
|
return ast_function_ptr(name, type_ptr(param_types, param_types[0]->clone_with_decreased_indirection()), vector<*ast_node>())
|
||||||
if (name == "&")
|
if (name == "&" && param_types.size == 1)
|
||||||
return ast_function_ptr(name, type_ptr(param_types, param_types[0]->clone_with_increased_indirection()), vector<*ast_node>())
|
return ast_function_ptr(name, type_ptr(param_types, param_types[0]->clone_with_increased_indirection()), vector<*ast_node>())
|
||||||
if (name == "\*" && param_types.size == 1)
|
if (name == "\*" && param_types.size == 1)
|
||||||
return ast_function_ptr(name, type_ptr(param_types, param_types[0]->clone_with_decreased_indirection()), vector<*ast_node>())
|
return ast_function_ptr(name, type_ptr(param_types, param_types[0]->clone_with_decreased_indirection()), vector<*ast_node>())
|
||||||
|
|||||||
@@ -776,7 +776,8 @@ obj c_generator (Object) {
|
|||||||
var parameters = node->function_call.parameters
|
var parameters = node->function_call.parameters
|
||||||
if ( parameters.size == 2 && (func_name == "+" || func_name == "-" || func_name == "*" || func_name == "/"
|
if ( parameters.size == 2 && (func_name == "+" || func_name == "-" || func_name == "*" || func_name == "/"
|
||||||
|| func_name == "<" || func_name == ">" || func_name == "<=" || func_name == ">="
|
|| func_name == "<" || func_name == ">" || func_name == "<=" || func_name == ">="
|
||||||
|| func_name == "==" || func_name == "!=" || func_name == "%"
|
|| func_name == "==" || func_name == "!=" || func_name == "%" || func_name == "^"
|
||||||
|
|| func_name == "|" || func_name == "&"
|
||||||
))
|
))
|
||||||
return code_triple("(") + generate(parameters[0], enclosing_object, enclosing_func, null<stack<pair<bool,stack<*ast_node>>>>(), false) + func_name + generate(parameters[1], enclosing_object, enclosing_func, null<stack<pair<bool,stack<*ast_node>>>>(), false) + string(")")
|
return code_triple("(") + generate(parameters[0], enclosing_object, enclosing_func, null<stack<pair<bool,stack<*ast_node>>>>(), false) + func_name + generate(parameters[1], enclosing_object, enclosing_func, null<stack<pair<bool,stack<*ast_node>>>>(), false) + string(")")
|
||||||
if ( parameters.size == 2 && (func_name == "||" || func_name == "&&")) {
|
if ( parameters.size == 2 && (func_name == "||" || func_name == "&&")) {
|
||||||
|
|||||||
@@ -101,8 +101,6 @@ obj importer (Object) {
|
|||||||
// the terminals have " around them, which we have to escape
|
// the terminals have " around them, which we have to escape
|
||||||
remove_node(symbol("\"\\(\"", true), parse_tree)
|
remove_node(symbol("\"\\(\"", true), parse_tree)
|
||||||
remove_node(symbol("\"\\)\"", true), parse_tree)
|
remove_node(symbol("\"\\)\"", true), parse_tree)
|
||||||
/*remove_node(symbol("\"var\"", true), parse_tree)*/
|
|
||||||
// remove_node(symbol("\"fun\"", true), parse_tree)
|
|
||||||
remove_node(symbol("\"template\"", true), parse_tree)
|
remove_node(symbol("\"template\"", true), parse_tree)
|
||||||
remove_node(symbol("\"return\"", true), parse_tree)
|
remove_node(symbol("\"return\"", true), parse_tree)
|
||||||
remove_node(symbol("\"defer\"", true), parse_tree)
|
remove_node(symbol("\"defer\"", true), parse_tree)
|
||||||
@@ -119,7 +117,7 @@ obj importer (Object) {
|
|||||||
remove_node(symbol("def_nonterm", false), parse_tree)
|
remove_node(symbol("def_nonterm", false), parse_tree)
|
||||||
remove_node(symbol("obj_nonterm", false), parse_tree)
|
remove_node(symbol("obj_nonterm", false), parse_tree)
|
||||||
remove_node(symbol("adt_nonterm", false), parse_tree)
|
remove_node(symbol("adt_nonterm", false), parse_tree)
|
||||||
remove_node(symbol("\"\\|\"", true), parse_tree)
|
/*remove_node(symbol("\"\\|\"", true), parse_tree)*/
|
||||||
|
|
||||||
collapse_node(symbol("case_statement_list", false), parse_tree)
|
collapse_node(symbol("case_statement_list", false), parse_tree)
|
||||||
collapse_node(symbol("opt_param_assign_list", false), parse_tree)
|
collapse_node(symbol("opt_param_assign_list", false), parse_tree)
|
||||||
|
|||||||
@@ -6,3 +6,6 @@ We'll find out.
|
|||||||
34
|
34
|
||||||
woo not
|
woo not
|
||||||
false
|
false
|
||||||
|
7
|
||||||
|
6
|
||||||
|
1
|
||||||
|
|||||||
@@ -20,4 +20,7 @@ fun main(): int {
|
|||||||
if ( z > 20 && !boolean)
|
if ( z > 20 && !boolean)
|
||||||
simple_print::println("woo not")
|
simple_print::println("woo not")
|
||||||
simple_print::println('b' == 'a')
|
simple_print::println('b' == 'a')
|
||||||
|
println(3|5)
|
||||||
|
println(3^5)
|
||||||
|
println(3&5)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user