Repository: pyccel/pyccel (language: python)

Issue:
Pyccel's grammer get confused between FunctionKind and the actual function name.
**Describe the bug**
In the case of a user names her/his function `function`, Pyccel grammar will recognize `function` as a `functionKind` and will expect the name of the actual function which will cause an error in the parsing.

**To Reproduce**
```python
def function(i: 'int', b: 'int'):
    return i + b
```

the error message:
```bash
textx.exceptions.TextXSyntaxError: None:1:19: error: Expected Static or ID at position (1, 19) => 'r function*(int,int)'.
```

**Expected behavior**
make sure that there is a function name then collect its optional `functionKind`'s

**Language**
C/Fortran
**Additional context**
functionKind static is also related to this problem. 


Discussion / hints:
caused by https://github.com/pyccel/pyccel/blob/352fff96d5bfe563507af337dbd956f74aa6c3c9/pyccel/parser/grammar/headers.tx#L33 

Fix patch:
diff --git a/pyccel/parser/grammar/headers.tx b/pyccel/parser/grammar/headers.tx
index 389dcaa022..ba9bc01c94 100644
--- a/pyccel/parser/grammar/headers.tx
+++ b/pyccel/parser/grammar/headers.tx
@@ -30,7 +30,7 @@ Const: 'const';
 VariableHeaderStmt: 'variable'  name=ID ('::')? dec=TypeHeader;
 
 FunctionHeaderStmt: 
-  (kind=FunctionKind)? (static=Static)? name=ID '(' decs*=UnionTypeStmt[','] ')' (results=HeaderResults)?
+  ((name=ID '(') | ((kind=FunctionKind)? (static=Static)? name=ID '(')) decs*=UnionTypeStmt[','] ')' (results=HeaderResults)?
 ;
 
 TemplateStmt: 'template' name = ID '(' dtypes+=TypeHeader['|'] ')';


Test patch:
diff --git a/tests/epyccel/modules/highorder_functions.py b/tests/epyccel/modules/highorder_functions.py
index d61121fabf..759c877633 100644
--- a/tests/epyccel/modules/highorder_functions.py
+++ b/tests/epyccel/modules/highorder_functions.py
@@ -1,6 +1,10 @@
  # pylint: disable=missing-function-docstring, missing-module-docstring/
 from pyccel.decorators import types
 
+#$ header function function(int)
+def function(a):
+    return a
+
 #$ header function f1(int)
 def f1(a):
     return a