Я пытаюсь лексировать (затем анализировать) язык, подобный Си. В Си есть директивы препроцессора, где разрывы строк значительны, а затем фактический код, где они просто пробелы.
Одним из способов сделать это может быть двухпроходный процесс, подобный ранним компиляторам C - иметь отдельный препроцессор для директив #, а затем преобразовать его в лекс.
Однако мне стало интересно, возможно ли сделать это в одном лексере. Я очень доволен написанием кода парсера-комбинатора scala, но я не совсем уверен, как StdLexical
обрабатывает пробелы.
Может ли кто-нибудь написать какой-нибудь простой пример кода, который скажет, может ли лексировать строку #include
(с использованием новой строки) и какой-нибудь тривиальный код (игнорируя новую строку)? Или это невозможно, и лучше использовать двухпроцессный appproach?