С помощью Jison, как мне сканировать операторы смещения вправо и определения вложенных обобщенных типов - PullRequest
0 голосов
/ 03 июня 2018

Я работаю над грамматикой для языка, который поддерживает оператор сдвига вправо и универсальные типы.Например:

function rectangle(): Pair<Tuple<Float, Float>> {
    let x = 0 >> 2; 
}

Моя проблема заключается в том, что во время сканирования оператор сдвига вправо корректно маркируется, но >> в Pair<Tuple<Float, Float>> становится одним токеном >> вместо двух отдельных >токены (если я не добавлю пробел).Это потому, что у меня есть >> перед > в моем файле .jison:

">>"    { return '>>' }
">"     { return '>' }

Есть ли хороший способ решить эту проблему в Jison?Я чувствую, что это распространенная проблема, поскольку мой синтаксис похож на любой другой язык C-стиля, но я пока не нашел его решения (кроме написания сценария предварительного сканирования, который вручную разделяет пробел > s)).

1 Ответ

0 голосов
/ 03 июня 2018

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

...