История изменений
Исправление loz, (текущая версия) :
1. (ты видимо это сделал) как во *время разбора* пользоваться какими-то структурами данных, которые я раньше назвал «контекст» (именно это не умеют регекспы; перл дает возможность вставлять в регекспы свой код, но это выглядит ужасно и емнип эта фича экспериментальная до сих пор)
В parse не просто можно пользоваться структурами данных, в нем (через круглые скобочки) можно вызывать обычный код на реде, а значит можно и запросы к бд делать и гуй обновлять. Кстати название «контекст» ты не зря выбрал - в реде это синоним объекта и часто используется с parse :)
2. как в язык parse (это по факту dsl) добавить свой модификатор — т.е. чтобы для конкретной новой задачи не патчить весь парсер, а воспользоваться определенным ранее модификатором, который проверяет контекст; например «мы_находимся_внутри_текста» (т.е. не внутри атрибута и не внутри кода <script>), «мы_находимся_внутри_тэга_style» — можешь придумать любой по своему вкусу или как удобнее реализовывать в рамках твоего кода
Это черезвычайно просто:
Red []
parser: context [
state: []
rules: [
any [
number! (append state 'number) |
word! (append state 'word) |
time! (append state 'time)
]
]
run: func [input] [
state: copy []
parse input rules
state
]
]
probe parser/run [1 2 3]
; [number number number]
probe parser/run [x 5 y 10:30]
; [word number word time]
Исходная версия loz, :
1. (ты видимо это сделал) как во *время разбора* пользоваться какими-то структурами данных, которые я раньше назвал «контекст» (именно это не умеют регекспы; перл дает возможность вставлять в регекспы свой код, но это выглядит ужасно и емнип эта фича экспериментальная до сих пор)
В parse не просто можно пользоваться структурами данных, в нем (через круглые скобочки) можно вызывать обычный код на реде, а значит можно и запросы к бд делать и гуй обновлять.
2. как в язык parse (это по факту dsl) добавить свой модификатор — т.е. чтобы для конкретной новой задачи не патчить весь парсер, а воспользоваться определенным ранее модификатором, который проверяет контекст; например «мы_находимся_внутри_текста» (т.е. не внутри атрибута и не внутри кода <script>), «мы_находимся_внутри_тэга_style» — можешь придумать любой по своему вкусу или как удобнее реализовывать в рамках твоего кода
Это черезвычайно просто:
Red []
parser: context [
state: []
rules: [
any [
number! (append state 'number) |
word! (append state 'word) |
time! (append state 'time)
]
]
run: func [input] [
state: copy []
parse input rules
state
]
]
probe parser/run [1 2 3]
; [number number number]
probe parser/run [x 5 y 10:30]
; [word number word time]