IBM / JSONata4Java

Open Source Java version of JSONata
Apache License 2.0
91 stars 38 forks source link

variable or function name start with number is causing syntax error #267

Closed cuichenli closed 1 year ago

cuichenli commented 1 year ago

The code I tried:

(
  $0f = true;
  $0f
)

as the following screenshots:

image

However, this can correctly compile and execute on https://try.jsonata.org/

image

wnm3 commented 1 year ago

Our definition of variable and function ID requires starting with a letter or underscore:

VAR_ID : '$' ID ;

ID
    : [\p{L}_] [\p{L}0-9_]*
    | BACK_QUOTE ~[`]* BACK_QUOTE;

There is a test case (token-conversion/case002.json) from jsonata.org that fails if I enable numbers for the first letter (you can experiment using "aa" as the first label and then finding $.aa, or using "a7" as the first label and then finding $.a7, but $.7a fails.

{
    "expr": "$.7a",
    "data": {"7a":33, "a7":55, "7":88},
    "bindings": {},
    "code": "S0201"
}

I don't think we plan to fix this and question whether jsonata.org should tighten their checking.

We use a different approach for parsing than jsonata.org so will have slight differences.

Please close if you agree you can use different variable names starting with a letter.