Add check bison version in configure.ac file.
To build correctly matiec we need bison greater or equals than 2.4 version.
Now the "configure" script is able to check if system has correctly requirements.
(* Test whether the keyword XXXX may be used as an identifier for:
* FUNCTION declaration
*
* The XXXX names in the following code are merely a placeholder.
* They will be replaced by several identifiers before actual testing
* of the compiler.
*)
(* The identifiers that will replace the XXXX
* must be placed on a line starting with #
* All identifiers preceded by # are ignored!
* The identifier list must be placed inside an IEC 61131-3 comment.
*)
(* This file is specific for identifiers identical to IL operators.
* See the note following the identifier list
*)
(*
#IL_operators ANDN CAL CALC CALCN CD CLK CU IN JMP JMPC JMPCN LD LDN ORN PT PV R R1 RET RETC RETCN S S1 ST STN XORN
#SFC_qualifiers #D #DS #L #N #P #R #S #SD #SL
#Task_initialisers #PRIORITY #SINGLE #INTERVAL
*)
(* NOTE: The identifier as a function test has some special cases.
* Namely, when using IL operators as function names.
* For example, if a function LD has been previoulsy defined,
* The following IL code may be interpreted as either a
* function call or an IL operation
* LD 10
* Due to undefined situations as the above, our
* IEC compiler currently will always interpret IL operator identifiers.
* inside IL code as an IL operator.
* This means that calling, from IL code, of functions whose names
* coincide with an IL operator is not possible.
*
* The following test code must therefore consider two possibilities:
* - if the identifier under test is an IL operator
* - if the identifier under test is not an IL operator
*)
(* The FUNCTION declaration *)
function XXXX : int
var_input
a_1, b_1: int;
end_var
XXXX := a_1 + b_1;
end_function
(* Calling of the function from within ST code *)
function foo : int
var
c_1, d_1 : int;
e_1, f_1 : int;
end_var
d_1 := XXXX(c_1, d_1);
d_1 := XXXX(10, 20);
c_1 := XXXX(20, 22);
c_1 := XXXX(b_1 := e_1, a_1 := f_1);
c_1 := XXXX (a_1 := e_1, b_1 := f_1);
end_function
(* Calling of the function from within IL code *)
(* NOTE: some legal identifiers, for ex. IL operators,
* will not actually be interpreted as a reference to
* the function, but rather as an IL operator.
* However, no error should occur, as the compiler is written
* to give priority to interpreting it as an IL operator.
*)
(*
function bar000 : int
var
e_1, f_1 : int;
end_var
XXXX 10
LD 20
XXXX 30
XXXX 10, 20
XXXX (
b_1 := 10,
a_1 := 20
)
XXXX(
b_1 := 10,
a_1 := 20
)
XXXX (
b_1 := 10
)
XXXX(
b_1 := 10
)
end_function
*)
(* Checking whether the use of XXXX will confuse the logic
* used to determine if a POU body is in IL or ST language.
*)
(*
function bar001 : int
var
e_1, f_1 : int;
end_var
XXXX 10
end_function
function bar002 : int
var
e_1, f_1 : int;
end_var
XXXX 10, 20
end_function
function bar003 : int
var
e_1, f_1 : int;
end_var
XXXX(
b_1 := 10,
a_1 := 20
)
end_function
function bar004 : int
var
e_1, f_1 : int;
end_var
XXXX (
b_1 := 10,
a_1 := 20
)
end_function
*)
(* Checking whether the use of XXXX will confuse any other
* normal and correct IL or ST code.
*)
{#include "basic_code.test"}