Удобочитаемый синтаксис расписания, такой как функциональность в моем приложении?

StackOverflow https://stackoverflow.com//questions/11706097

Вопрос

cron в движке приложений Google имеет удобочитаемый синтаксис для планирования заданий cron.

https://developers.google.com/appengine/docs/python/config/cron#The_Schedule_Format

Как я могу реализовать аналогичную функциональность в моем приложении, где использовать график введите в формате читаемого человека и программный анализ и сохранить фактическое значение?

редактировать:Я думаю, что они используют библиотеку antlr3, но я не смог понять, как они ее используют.

Это было полезно?

Решение

Хорошо, в этом случае есть два момента, на которые вам нужно обратить внимание.

Первый antlr — это то, что дает вам парсер для анализа английских/человеческих форматов в вашей программе в виде потока токенов.Из этой строки вы затем определите значение, например:

run backup every 2 days

который превратится в поток токенов, таких как:

<command_type> := run
<command_to_run> := backup
<time_frame_times> := every
<digit> := 2
<time_frame_modifier> := days

Отсюда вы затем определите значение предложения, используя некий конечный автомат, который можно записать (в упрощенной форме) как:

if token == command_type:
    switch( token.val )
        case "run":
            state = run
            program = tokens.pop().val
if token == time_frame_times:
    switch( token.val )
        case "every":
            time_frame_state = repeat_indefinitely
if token == time_frame_modifier:
    switch( token.val )
        case "days":
            time_frame_modifier = every_N_days
if token == digit:
    switch( time_Frame_modifier )
        case every_N_days:
            time_frame_modifier_value = token.val

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

Вторая часть будет заключаться в том, чтобы соединить это с cron сам по себе или напишите свой собственный планировщик внутри самой программы, что, я думаю, больше соответствует вашему варианту использования.

Антлер Питон: http://www.antlr.org/wiki/display/ANTLR3/Python+runtime

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top