'finish', 'clear', 'buy', 'transact', 'setflag'],
label: /[a-zA-Z][a-zA-Z0-9]*:/,
word: /[a-zA-Z][a-zA-Z0-9]*/,
- dqstring: /"(?:\\["\\]|[^\n"\\])*"/,
- sqstring: /'(?:\\['\\]|[^\n'\\])*'/,
- mlstring_start: '[[[',
- mlstring_end: ']]]',
+ dqstring: { match: /"(?:\\["\\]|[^\n"\\])*"/, value: s => s.slice(1, -1) },
+ sqstring: { match: /'(?:\\['\\]|[^\n'\\])*'/, value: s => s.slice(1, -1) },
+ mlstring: { match: /\[\[\[[^]*?\]\]\]/, lineBreaks: true, value: s => s.slice(3, -3).trim() },
bang: '!',
flag_mark: '$',
obj_mark: '@',
- mlcontent: /.+(?!\]\]\])/,
});
-
-function cn(l: any[]) {
- return l.filter(x => x);
-}
%}
@lexer lexer
number -> %number {% data => parseInt(data[0]) %}
-string -> %dqstring {% (s: any[]) => s[0].value.slice(1, -1) %}
-string -> %sqstring {% (s: any[]) => s[0].value.slice(1, -1) %}
-string -> mlstring {% id %}
-mlstring -> %mlstring_start %mlstring_end
-mlstring -> %mlstring_start %word %mlstring_end
-mlstring -> %mlstring_start %mlcontent %mlstring_end
+string -> %dqstring {% data => data[0].value %}
+string -> %sqstring {% data => data[0].value %}
+string -> %mlstring {% data => data[0].value %}
-__ -> %ws {% (x: any) => null %}
-_ -> null | %ws {% (x: any) => null %}
+__ -> %ws {% _ => null %}
+_ -> null | %ws {% _ => null %}