Ply - Ловля логических ошибок [дубликат]

О Mac OS X Я смог решить эту проблему, установив переменную JAVA_HOME:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home
2
задан stbamb 8 May 2015 в 07:19
поделиться

1 ответ

Вы говорите: «Это должно быть 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]*, и заставить его вызвать ошибку в своем действии.

3
ответ дан rici 21 August 2018 в 00:27
поделиться
  • 1
    Спасибо за ваш совет! Это сработало очень хорошо! Мне нужно было определить новый случай (новый образец), как и предполагалось. Спасибо! – stbamb 8 May 2015 в 20:15
Другие вопросы по тегам:

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