Токены JISON, использующие одинаковые символы

У меня есть некоторые проблемы с использованием JISON. Я пытаюсь сопоставить 2 строки в квадратных скобках, разделенных точкой. Проблема, с которой я сталкиваюсь, заключается в том, что если любая из строк начинается с цифры или минуса, она обнаруживает ее как MINUS или NUMBER [что правильно], но сначала я хочу проверить, соответствует ли регулярное выражение STRING строке, введенной пользователем, и после этого проверить номер или минус.

%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] (например).

Спасибо!

1 ответ

STRING будет соответствовать любому MINUS, NUMBER или же SYMBOLтак что если вы настаиваете на том, что STRING в первую очередь, ни одно из них никогда не будет найдено, и вы можете просто удалить их из файла. Jison просто сопоставляет шаблоны по порядку, пока не найдет тот, который соответствует.

Возможно, вы намерены по-разному сопоставить содержимое выражений в скобках; если это так, вам понадобится другая стратегия токенизации (и вам нужно уточнить, какими могут быть ваши требования).


Если честно, я не понимаю

 [_-]+                return SYMBOL;

Вы действительно намерены SYMBOL сопоставлять только последовательности, содержащие тире и подчеркивания? (-_____-_____-)

Другие вопросы по тегам