Директива
#line
изменяет положение отчета для компилятора и используется программным обеспечением для генерации кода, чтобы помочь программисту идентифицировать проблему в исходном источнике. Любой может использовать его, чтобы помочь перенаправить отчеты об ошибках, чтобы сделать их более информативными.
Так, например, ваш синтаксический анализатор генерирует файл CSSGrammar.cpp, скажем, который компилируется компилятором c ++ и содержит фрагменты кода c ++, директива #line 25 "CSSGrammar.y"
указывает компилятору c ++ обрабатывать эту конкретную точку в файле, как если бы это строка № 25 от CSSGrammar.y
Компилятор продолжит анализировать последующие строки и сообщать об ошибках в соответствии с начальными условиями этой директивы.
Таким образом, если ошибка возникнет через 3 строки, она сообщит, что произошла ошибка в строке 28 в CSSGrammar.y
Обратите внимание, что один исходный файл может иметь источники, поступающие из нескольких частей; и что эта директива может использоваться довольно эффективно для обозначения условий ошибки.
Как правило, вы увидите, что на этом пути есть несколько директив #line
; они просто существуют для учета различных инъекций по пути (для сброса каретки отчетности, если хотите).
Обратите внимание, что директива #line может использоваться любым генератором, включая ваш собственный, и не ограничивается в любом случае генераторами синтаксического анализатора.