Где `ss 'настраивает гибкий ввод для аргументов командной строки? - PullRequest
0 голосов
/ 08 февраля 2019

Я слышал, что ss использует Bison для разбора аргументов командной строки .Бизон получает данные от выхода Flex.Flex принимает ввод от стандартного ввода по умолчанию.Где ss настраивает гибкий ввод для аргументов командной строки?

1 Ответ

0 голосов
/ 09 февраля 2019

Бизон звонит yylex() всякий раз, когда ему нужен токен.Возвращаемое значение yylex() представляет собой небольшое целое число, которое является либо одной из констант перечисления, объявленных с %token в грамматике бизонов, либо символьной константой, отличной от 0, или 0 для обозначения EOF.

yylex() также должен:

  • Сохранить семантическое значение токена в глобальной переменной yylval, если токен имеет семантическое значение;и

  • Сохранить местоположение токена во входном потоке в глобальной переменной yylloc, если действия синтаксического анализатора используют информацию о местоположении.

Вы можете создать сканер, используя инструмент командной строки flex.Но вы не обязаны это делать.Вы можете использовать другой инструмент для создания сканера.Или вы можете определить функцию yylex() самостоятельно.Интерфейс для сканера был максимально упрощен для упрощения реализации.

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


Другие интерфейсы

Выше приведен интерфейс по умолчанию от yyparse до yylex.Существуют альтернативы:

  • Вы можете определить yylex для получения дополнительных аргументов, если ваша реализация yylex требует дополнительных данных.Обычно эти дополнительные аргументы предоставляются yyparse(), чтобы анализатор мог использовать их при вызове yylex().См. Раздел руководства для бизонов по директиве %param .

  • Вы можете указать bison генерировать чистый синтаксический анализатор, который не зависит от глобальных переменных, и в этом случаеон будет вызывать yylex с указателем на семантический объект и, если используется информация о местоположении, указателем на объект местоположения.См. Главу по бизонам о чистом интерфейсе синтаксического анализатора .

  • Вы можете запросить «push parser», который вызывается сканером каждый раз, когда токен становится доступным.См. Главу по бизонам о push-парсерах .

...