Repository: AlecStrong/sql-psi (kotlin)

Issue:
Allow functions containing keywords instead of commas
Dialect: [HSQLDB](http://hsqldb.org/doc/guide/builtinfunctions-chapt.html), [MySQL](https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_substring), [PostgreSQL](https://www.postgresql.org/docs/9.1/functions-string.html)

Some functions allow replacing the commas in an argument list with keywords. 

Failing SQL:

```sql
SELECT substring('Thomas' from 2 for 3)
```

Pull request description:
Closes https://github.com/AlecStrong/sql-psi/issues/189

Patch:
diff --git a/.gitignore b/.gitignore
index c3284bf2..f6c34d3c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@ out/
 lib/
 build/
 .DS_Store
+local.properties
diff --git a/core/src/main/kotlin/com/alecstrong/sql/psi/core/sql.bnf b/core/src/main/kotlin/com/alecstrong/sql/psi/core/sql.bnf
index f062d25f..73386e84 100644
--- a/core/src/main/kotlin/com/alecstrong/sql/psi/core/sql.bnf
+++ b/core/src/main/kotlin/com/alecstrong/sql/psi/core/sql.bnf
@@ -255,7 +255,7 @@ binary_and_expr ::= expr AND expr {
 binary_or_expr ::= expr OR expr {
   implements = "com.alecstrong.sql.psi.core.psi.SqlBinaryExpr"
 }
-function_expr ::= function_name '(' [ [ DISTINCT ] expr ( ',' expr ) * | '*' ] ')'
+function_expr ::= function_name '(' [ [ DISTINCT ] expr ( ( ',' | FROM | FOR ) expr ) * | '*' ] ')'
 paren_expr ::= '(' expr ')' {
   pin = 1
 }


Test patch:
diff --git a/test-fixtures/src/main/resources/fixtures/function-from-for/Test.s b/test-fixtures/src/main/resources/fixtures/function-from-for/Test.s
new file mode 100644
index 00000000..a5d42c04
--- /dev/null
+++ b/test-fixtures/src/main/resources/fixtures/function-from-for/Test.s
@@ -0,0 +1,1 @@
+SELECT substring(DISTINCT 'Thomas' , 2);
\ No newline at end of file
diff --git a/test-fixtures/src/main/resources/fixtures/function-name-for/Test.s b/test-fixtures/src/main/resources/fixtures/function-name-for/Test.s
new file mode 100644
index 00000000..8ba7ecb0
--- /dev/null
+++ b/test-fixtures/src/main/resources/fixtures/function-name-for/Test.s
@@ -0,0 +1,1 @@
+SELECT substring('Thomas' FROM 2 FOR 3);
\ No newline at end of file