Предложения относительно выполнения / анализа пользовательских методов во время выполнения - Java - PullRequest
1 голос
/ 09 марта 2012

Итак, мы определили набор API, которые конечные пользователи (именно функциональные люди) будут использовать для выполнения своих преобразований данных.Например, для ввода как Name = "XyZ" функциональные люди могут определить правило преобразования, например @Text.UpperCase(Name), чтобы преобразовать каждое значение, которое они получают для name, в верхний регистр.Это работает так, что каждое слово, определенное после @, является типом данных, а каждое слово, определенное после ., представляет собой метод, за которым следуют скобки и значение.Хотя это то, что мы запланировали, я пытаюсь выяснить:

1> Нам действительно нужна грамматика, которая будет использоваться для анализа таких входных данных?
2> Как я могу организовать вложенные вызовыкак @Text.UpperCase(@Text.trim("XyZ "))?

1 Ответ

1 голос
/ 09 марта 2012

Вы должны определить грамматику, просто чтобы убедиться, что вы знаете, что вы позволите пользователям печатать.

Вам может не понадобиться генератор синтаксического анализатора, если ваша грамматика достаточно проста (например, единственное, что могут набрать ваши пользователи, - это вызовы функций через именованные переменные). В этом случае специального анализа может быть достаточно. Это было бы достаточно для вашего простого примера.

Если ваша грамматика имеет небольшую сложность (например, вложенные вызовы), вы можете довольно легко кодировать парсер рекурсивного спуска, который сделает эту работу.

Если ваша грамматика усложняется (пользователи наверняка попросят дополнительные функции), вам может потребоваться генератор синтаксических анализаторов.

Если бы это был я, с учетом заявленных вами требований, я бы создал версию с рекурсивным спуском после написания грамматики, которую я должен был принять генератор синтаксического анализатора. Это также может быть полезной документацией в, гм, руководстве пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...