-
Notifications
You must be signed in to change notification settings - Fork 8
Open
Labels
Description
I have the following grammar:
{
"RegExpID": "RE::",
"Style": {
"string": "string",
"this": "keyword",
"operator": "operator",
"regex": "string-2",
"atom": "atom",
"identifier": "variable",
"keyword": "keyword",
"number": "number",
"property": "attribute",
"date": "string-2",
"comment": "comment",
"builtin": "builtin"
},
"Lex": {
"boolean": {
"autocomplete": true,
"tokens": [
"true",
"false"
]
},
"string": {
"type": "escaped-block",
"escape": "\\",
"tokens": [
"RE::/(['\"])/",
1
]
},
"this": "RE::/this\\b/",
"operator": {
"tokens": [
"+",
"-",
"++",
"--",
"%",
">>",
"<<",
">>>",
"*",
"/",
"^",
"|",
"&",
"!",
"~",
">",
"<",
"<=",
">=",
"!=",
"!==",
"=",
"==",
"===",
"+=",
"-=",
"%=",
">>=",
">>>=",
"<<=",
"*=",
"/=",
"|=",
"&="
]
},
"regex": {
"type": "escaped-block",
"escape": "\\",
"tokens": [
"/",
"RE::#/[gimy]{0,4}#"
]
},
"atom": {
"autocomplete": true,
"tokens": [
"null",
"undefined",
"NaN",
"Infinity"
]
},
"delimiter": {
"tokens": [
"(",
")",
"[",
"]",
"{",
"}",
",",
"=",
";",
"?",
" ",
"+=",
"-=",
"*=",
"/=",
"%=",
"&=",
"|=",
"^=",
"++",
"--",
">>=",
"<<="
]
},
"identifier": "RE::/[_A-Za-z$][_A-Za-z0-9$]*/",
"keyword": {
"autocomplete": true,
"tokens": [
"if",
"while",
"with",
"else",
"do",
"try",
"finally",
"return",
"break",
"continue",
"new",
"delete",
"throw",
"var",
"const",
"let",
"function",
"catch",
"void",
"for",
"switch",
"case",
"default",
"class",
"import",
"yield",
"in",
"typeof",
"instanceof"
]
},
"number": [
"RE::/\\d*\\.\\d+(e[\\+\\-]?\\d+)?/",
"RE::/\\d+\\.\\d*/",
"RE::/\\.\\d+/",
"RE::/0x[0-9a-fA-F]+L?/",
"RE::/0b[01]+L?/",
"RE::/0o[0-7]+L?/",
"RE::/[1-9]\\d*(e[\\+\\-]?\\d+)?L?/",
"RE::/0(?![\\dx])/"
],
"property": "RE::/[_A-Za-z$][_A-Za-z0-9$]*/",
"date": "RE::/\\d{4}-\\d{2}-\\d{2}$]*/",
"comment": {
"type": "comment",
"tokens": [
[
";",
"null"
],
[
"/*",
"*/"
]
]
},
"builtin": {
"autocomplete": true,
"tokens": [
"Object",
"Function",
"Array",
"String",
"Date",
"Number",
"RegExp",
"Math",
"Exception",
"setTimeout",
"setInterval",
"parseInt",
"parseFloat",
"isFinite",
"isNan",
"alert",
"prompt",
"console",
"window",
"global",
"this"
]
}
},
"Syntax": {
"json": "object | array | prim",
"object": "'{' kv (',' kv)* '}'",
"js": "comment | number | string | regex | keyword | operator | atom | (('}' | ')' | this | builtin | identifier | dot_property) dot_property*)",
"kv": {
"sequence": [
"string",
"':'",
"json"
]
},
"top": "query",
"prim": "number | string | boolean",
"query": "'{' '\"query\"' ':' string ',' '\"where\"' ':' criteria '}'",
"operand": "identifier | date | string | number | boolean",
"operator2": "'\"=\"' | '\">\"' | '\">=\"' | '\"<\"' | '\"<=\"'",
"or" : "\"or\" (',' criteria)+",
"and": "\"and\" (',' criteria)+",
"criteria": "'[' (or | and | relation) ']'",
"dot_property": {
"sequence": [
".",
"property"
]
},
"array": "'[' json (',' json)* ']'",
"relation": "'[' operator2 ',' operand ',' operand ']'"
},
"Parser": [
[
"top"
]
]
}
When I paste it to the grammar editor on http://foo123.github.io/examples/codemirror-grammar/ and clean the code editor the Ctrl+SPACE suggest true | false
which is not valid language according to grammar as it must start with {
.
Furthermore, if I type {
and then Ctrl+SPACE it correctly suggests "query"
but when I subsequently use Ctrl+SPACE instead of :
or : "
it suggests "where"
which again results in incorrect syntax.
Please advise whether it is a bug or I'm doing something wrong.
Many thanks for your work.