Язык Rockstar разбирает правильные переменные - PullRequest
0 голосов
/ 08 октября 2019

Как правильно вывести правильные переменные в Rockstar Language ?

Я пишу расширение подсветки синтаксиса для vscode. Но это как бы противоречит строковым литералам, где все, что находится после ключевого слова «говорит», должно быть строкой. Но в сочетании с заглавными словами это определяется как правильная переменная.

Это регулярное выражение того, как далеко я получил:

(?!(Say|Shout|Whisper|Scream|Listen( to)?|Put|If|Until|Build |Take it to the top|Knock |While|Continue|Break it down|My|Your|A|An|The)\\s)\\b((?<!says .*)([A-Z][a-zA-Z]+\\s?)+)\\b($|\\s)

Проблема в том, что нефиксированная длина взгляда позади (?<!says .*) не делаетне работает в vscode для синтаксического синтаксического анализа.

Пример фрагмента кода на регулярном выражении regex101

Итак, как заставить это работать? Некоторые идеи о том, как не использовать этот взгляд сзади? Суть в том, что в

Eleanor Rigby says Hello San Francisco

Eleanor Rigby должна быть переменная says должна быть присваиванием, а Hello San Francisco должна быть строкой

Но без оглядки назад Hello San Francisco рассматривается как переменная.

1 Ответ

0 голосов
/ 08 октября 2019

Я думаю, что единственный способ состоит в том, чтобы использовать часть, которая вам не нужна, и использовать группу захвата, чтобы идентифицировать ее (и, очевидно, применить к ней определенную обработку):

\b(?:(\bsays [A-Za-z\s]+)|(?!(?:Say|Shout|Whisper|Scream|Listen(?: to)?|Put|If|Until|Build|Take it to the top|Knock|While|Continue|Break it down|My|Your|An?|The)\s)\b[A-Z][a-zA-Z]*(?:\s+[A-Z][a-zA-Z]*)*(?!\S))

демо

...