2016-05-23 3 views
2

Я пытаюсь написать небольшой лексический анализатор и у меня есть небольшой вопросC++ лексический анализатор

Рассмотрим следующую строку

cout << "hello world ; 

Обратите внимание, что он не имеет к " в конце. Если я считаю, все после начальной " строковой и говорю, что недостающее " в конце или игнорировать начальный " (говорят, что это не заканчивается с другой ") и procede для анализа маркеров hello, world до конца линии?

Извините, если это кажется немного неоднозначным.

+0

Как вы думаете? Считаете ли вы, что вам необходимо обозначить «привет», «мир» и т. Д.? Зачем вам их требовать? –

+0

Если бы я разбирал строку, я бы сделал то, что делают другие компиляторы: сгенерируйте ошибку, в которой говорится «unterminated string constant» –

+0

Поскольку неизвестно, было ли намерение «hello world»; ',' "hello world;"; ' , или любая другая возможность, я считаю, что вы должны обработать начальное '' 'и потреблять все, что следует, до тех пор, пока не закончится завершающий' '' (и в этом случае он никогда не встречался). –

ответ

1

Возможно, лучший способ - получить Clang, скомпилировать ваш код и посмотреть, что он сообщит вам об ошибках. В исходном коде Clang у вас есть два отдельных файла, содержащие все возможные лексические и синтаксические ошибки, поэтому вы можете проверить, не сообщает ли он вам лексическую или синтаксическую проблему, не нужно каждый раз искать тысячи страниц стандарта C++, Clang реализует стандарт :)