Вы должны добавить к своему контроллеру:
use Cake\View\ViewBuilder;
Да, я использовал их. Да, можно сделать вещи с ними - но любое время, Вы выбираете неправильный инструмент для задания, Вы будете делать бесполезную боль для себя.
Некоторый пример нестандартного использования я лично поместил технологию в:
Подсветка синтаксиса. Текстовый редактор Scite позволяет Вам писать свой собственный лексический анализатор (в C++) для обеспечения подсветки синтаксиса для любого пользовательского языка. Я записал свой собственный лексический анализатор для Scite как напоминание по этой теме (я изучил его только что в моем университете).
Регулярные выражения часто используются в качестве альтернативы для сопоставления с образцом и простой обработки языка. Это еще более распространено из последних лет благодаря улучшенной поддержке RegEx в платформах, таких как.NET. Во многих случаях разработчики даже не могут знать о lexing/parsing методах и тем самым попасть в использование Regex по умолчанию.
Однако как в другом ответе говорится, Regex может быстро стать неэффективным, медленным и трудным поддержать для чего-то большего чем простой грамматики/языка. В той ситуации синтаксический анализатор/лексические анализаторы обычно лучший выбор.
Да, я использовал их в материале реального мира - но главным образом создание пользовательских языков, для которых Вы используете лексические анализаторы и синтаксические анализаторы, было вытеснено языками, определенными в XML. Более подробный, но затем Вы не должны делать всей той работы...
Да, я использовал их. Я - большой поклонник ANTLR. Я даю некоторые подсказки и приемы при использовании ANTLR здесь и краткого подтверждения его здесь. Возможно вручить записи Ваш собственный синтаксический анализатор с помощью специальных методов, но это намного более твердо и возьмет намного дольше, чтобы выяснить, как внести изменения, когда необходимо вырастить язык, который синтаксический анализатор, как предполагается, анализирует.
Любое место Вы обрабатываете ввод текста, заканчивает тем, что использовало некоторый лексический анализатор/синтаксический анализатор, хотя несколько раз они заканчивают тем, что были вырожденным случаем (закон что-либо кроме запятой как один тип маркера и запятая как другой. Проанализируйте число, имя, число и конец строки. Такая вещь) одним способом посмотреть на него sscanf
мог считаться большинством вырожденных случаев лексического анализатора/парсера-генератора.
Что касается полноценной lex/yacc операции? Я ожидаю, что это привыкает главным образом для GPLs и для вещей, которые подпадают под свободное определение DSLs
Яркий пример лексического анализатора/синтаксического анализатора, который используется во многих системах, существует в Apache Lucene (библиотека Search Index с открытым исходным кодом). И анализатор запроса и токенизатор документа используют эти techs. В то время как я предполагаю, что Вы могли категоризировать анализатор запроса в Lucene как dsl синтаксический анализатор, он все еще используется, чтобы помочь решить проблему реального мира.
В этом отношении я уверен, что Google использует своего рода лексический анализатор/синтаксический анализатор для своего собственного синтаксиса запроса и парсинга документа.
Это интересно -
Я просто записал лексический анализатор/синтаксический анализатор вручную, чтобы позволить простым основанным на операция со строками выражениям запроса быть обработанными реализацией IBindingListView. Это было первой полезной вещью за пределами кода, что я на самом деле смог использовать его для и не просто услышал о нем.
Симпатичный пешеходный пример, но я являюсь довольно пешеходным, по моему опыту, с ними.
Я не использовал одного из больших парней, чтобы сделать любой лексический анализ все же, я однако записал свой собственный лексический анализатор вручную для проекта, я продолжил работать. Мы должны были проанализировать данные, которые возвратились из компьютера данных Близкого Космического проекта, и они были записаны в SD-карту в двоичном файле. Я должен был разделить биты, преобразовать их от двоичного файла до десятичного числа и затем выписать все содержание в разделенном файле запятой.
Это - большая забава находиться и продумать его логически и записать конечный автомат для задачи под рукой!
Каждый раз, когда существует статический документ (например, файл) или динамический документ (например, поток, происходящий во времени), и этот документ имеет любую структуру, вы обнаружите вам нужен какой-то парсер. Для достаточно простых структур вы можете обойтись специальным синтаксическим анализом (взлом строк, регулярные выражения и т. Д.). Для структур, которые не являются вложенными, вы можете обойтись конечным автоматом; здесь часто бывает полезен генератор лексера. Для сложных структур вы в значительной степени являетесь организованным парсером. Вы можете писать синтаксические анализаторы вручную, если знакомы с синтаксическим анализом стиля рекурсивного спуска. Для действительно сложных структур генератор синтаксического анализатора почти всегда является большим преимуществом.
Если вы хотите обрабатывать компьютерный язык, вам в значительной степени нужны лексеры и синтаксические анализаторы в качестве отправной точки. Их недостаточно; язык 1960-х годов, на C, для бомбардировщика-невидимки B-2. См. http://www.semdesigns.com/Products/Services/NorthropGrummanB2.html
Да! Команда, с которой я работаю, реализовала структуру генерации документов, которая, среди прочего, позволяет оценивать (в основном арифметические) выражения. Мы используем синтаксический анализатор для извлечения выражений из входных данных / определений для сгенерированных документов и создания для них деревьев выражений. Впоследствии эти деревья оцениваются, и полученные результаты записываются в окончательный документ.