Синтаксические ошибки - PullRequest
       18

Синтаксические ошибки

0 голосов
/ 19 ноября 2009

Я пишу код для упражнения 1-24, K & R2, в котором предлагается написать основной синтаксический отладчик.

Я сделал парсер с нормальным состоянием, dquote, squote и т.д ...

Так что мне интересно, есть ли фрагмент кода вроде

/" text "

разрешено в коде? Должен ли я сообщить об этом как об ошибке? (Проблема в том, что мой парсер переходит в состояние comment_entry после / и игнорирует ".)

Ответы [ 3 ]

3 голосов
/ 19 ноября 2009

Поскольку один / означает только деление, его не следует интерпретировать как комментарий. Для строк не определен оператор деления, поэтому что-то вроде "abc"/"def" не имеет особого смысла, но это не должно быть синтаксической ошибкой. Выяснение того, возможно ли это деление, должно выполняться не синтаксическим анализатором, а должно быть оставлено для дальнейших этапов компиляции, которые будут определены там.

2 голосов
/ 19 ноября 2009

Это синтаксически допустимо, но не семантически. Он должен анализироваться как оператор деления, за которым следует строковый литерал. Вы не можете делить вещи на строковый литерал, так что это не юридический код, в целом.

Комментарии начинаются с двухсимвольного токена /* и заканчиваются */.

0 голосов
/ 19 ноября 2009

Как отдельный синтаксический элемент, об этом следует сообщать как об ошибке.

Теоретически (как часть выражения) можно было бы написать

a= b /"text";   / a = b divided through address of string literal "text"

, что также неправильно (вы не можете разделить указатель).

Но на поверхностном уровне все будет в порядке, потому что он будет синтаксически декодироваться как: оператор переменной переменная оператор-константа-выражение (адрес строки).

Реальная ошибка, вероятно, должна быть обнаружена в более глубоком состоянии синтаксического анализа (т.е. при проверке, подходят ли данные типы для оператора деления).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...