2014-10-18 2 views

ответ

0

Его «просто» синтаксическая ошибка; синтаксис говорит вам, что законно писать, а это не так.

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

Если вы написал этот код, это вашей ошибки, а не компилятор.

+1

Где вы знаете, что это не является законным? – Ingo

+0

Проверьте руководство по использованию языка. (Я предполагаю, что OP означает «C», поскольку язык, поскольку он, кажется, пишет что-то, что в основном действует в C и C, широко используется.). –

+0

@IraBaxter В C это была бы лексическая ошибка, хотя - не синтаксическая ошибка (с которой вы согласны в своем втором предложении, поэтому я не уверен, почему вы утверждаете иначе в своем первом предложении). – sepp2k

2

Это не так.

Кто сказал, что эта конструкция недействительна?

Это зависит исключительно от ваших определений.

Например, вы можете определить, что `признаки могут иметь место только в парах, как" для описания строковых литералов. Тогда это будет лексическая ошибка.

Ото, `могут быть некоторые предопределенные инфиксный оператор, как *. Тогда это будет синтаксической ошибкой, так как левая часть выражения отсутствует.

Или `может быть унарным оператором целых чисел, то это будет ошибка типа, так как a, очевидно, является символом.

+0

Можно сделать разумные предположения относительно вопроса ОП. –

+0

@IraBaxter Или можно ответить на него так, как будто его спросили. Очень хорошо, что ОП думает, что существует некоторая предопределенная фиксированная неподвижная граница между лексическими и синтаксическими ошибками, независимо от того, на каком языке. Кроме того, вы могли бы также предположить Java. Или Haskell, где определение, подобное 'char a = a', по крайней мере имело бы смысл. – Ingo

0

Если обратная сторона или обратная сторона, за которой следуют буквы, является допустимым токеном на вашем языке, это синтаксическая ошибка (если только «бэктикс» k, за которым следует идентификатор ", на самом деле является синтаксически допустимым выражением на вашем языке).

Если на вашем языке нет обратного хода или обратного хода, за которым следует буквенный токен, это лексическая ошибка.

Если ваш язык (несколько неожиданно/встречно-интуитивно) использует обратные ссылки для символьных литералов (используя обратную форму, символ, обратную линию), это все равно лексическая ошибка, потому что символьный литерал не закрыт.

0

Это лексическая ошибка.


Регулярное выражение для символа может быть '((\) |. [^ \']) '


Это будет принимать любой символ, как 'а', 'г',' \ t ',' \ n '.

Если ваш лексер не находит начальную или конечную одинарную цитату, он будет обозначать лексическую ошибку. Это была бы синтаксическая ошибка, если a или = или 'a' или; было/отсутствует в приведенном выше выражении.

Смежные вопросы