Текстовый мусор в бескаркасном прозрачном окне Qt

Вы говорите: «Это должно быть 9var как идентификатор». Но тогда вы указываете, что 9var не соответствует шаблону регулярного выражения ID. Итак, почему 9var сканируется как идентификатор?

Если вы хотите, чтобы 9var был идентификатором, было бы достаточно легко изменить регулярное выражение от [a-zA-Z_][a-zA-Z_0-9]* до [a-zA-Z_0-9]+. (Это также будет соответствовать чистым целым числам, поэтому вам нужно будет убедиться, что сначала применяется шаблон INT. В качестве альтернативы вы можете использовать [a-zA-Z_0-9]*[a-zA-Z_][a-zA-Z_0-9]*.)

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

Стоит отметить, что лексер Python работает именно так, как ваш лексер делает: он сканирует 9var как два токена, и это позже создаст синтаксическую ошибку.

Конечно, возможно, что на вашем языке существует синтаксически правильная конструкция, в которой идентификатор может непосредственно следуйте за INT. Или, если нет, где ключевое слово может непосредственно следовать за INT, например, выражение Python 3 if x else 2. (Опять же, Python не жалуется, если вы пишете это как 3if x else 2.)

Итак, если вы действительно настаиваете на том, чтобы пометить ошибку сканера для токенов, которые начинаются с цифры и продолжаются без цифр, вы можете вставить другой шаблон, например [0-9]+[a-zA-Z_][a-zA-Z_0-9]*, и заставить его вызвать ошибку в своем действии.

0
задан akiyosi 3 March 2019 в 06:07
поделиться

1 ответ

Я решил эту проблему.

Эта проблема вызвана тенью окна в MacOS. Я смог обойти эту проблему, установив Qt::NoDropShadowWindowHint в окно.

Возможно, эта проблема - ошибка MacOS / Qt.

0
ответ дан akiyosi 3 March 2019 в 06:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: