나는 JISON을 사용하는 데 약간의 문제가 있습니다. 점으로 분리 된 대괄호 안에 2 개의 문자열을 일치 시키려고합니다. 내가 만나는 문제는 문자열 중 하나라도 숫자 또는 빼기로 시작하면 MINUS 또는 NUMBER [어느 것이 맞음]으로 인식하지만 처음에는 STRING 정규 표현식이 사용자가 입력 한 문자열과 일치하는지 확인한 다음 그 후에 NUMBER 또는 MINUS를 확인하십시오.동일한 문자를 사용하는 JISON 토큰
%lex
%%
'-' return 'MINUS'
[0-9]+ return 'NUMBER'
[_-]+ return 'SYMBOL'
[a-zA-Z0-9_-\s]+ return 'STRING'
'.' return 'DOT'
'[' return '['
']' return ']'
<<EOF>> return 'EOF'
/lex
%start program
%%
program
: e EOF
{console.log(JSON.stringify($1, null, 4)); return $1; }
;
e
: NUMBER
{ $$ = {node: 'NUMBER', value: parseInt(yytext)}; }
| STRING
{ $$ = {node: 'STRING', value: yytext}; }
| SYMBOL
{ $$ = {node: 'SYMBOL', value: yytext}; }
| '[' STRING DOT STRING ']'
{ $$ = {node: 'SQUARE_BRACKETS', left: $2, right: $4}; }
;
[2 - 20 - March.Gum]과 일치해야합니다 (예 :).
감사합니다.
죄송합니다. SYMBOL을 (를) 제거하는 것을 잊어 버렸습니다. 예를 들어, JISON이 처음 발견 된 패턴과 일치한다는 것을 알았지 만 문제를 해결할 방법이 있습니까? – Andy
@andy : 어떤 상황에서 정확하게 말할 수있는 경우에만 'NUMBER'를 인식해야합니다. – rici
"[2-20-March.Gum] - 2"와 같은 일을하고 싶습니다. 그래서 저에게는 MINUS와 NUMBER가 있습니다. 나는 패턴으로 "SQUARE_BRACKETS MINUS NUMBER"를 할 수 있기를 희망했다. – Andy