errorrishe: (Default)
[personal profile] errorrishe
есть у меня одно чудо инженерной мысли. Чудо бежит на jvm 1.7 ( на самом деле 1.8 но фичи 8ки не допускаются при сборке)
если микро задачка которую уже сделанна в лоб но оно часто попадается на глаза и муляет как говорят в Одессе
нужно реализовать разбор простого выражения
выглядит оно примерно так:

SomeFreakingMagicShit|parameter_1=123|parameter_2=345|optional_parameter=890
Первое слово определят action которое мы хотим совершить, дальше через пайпы идут параметры которые могут быть как обязательные так и опциональные.
У каждого action наборы параметров разные, их довольно таки много

Хочется не упырьский способ получить на выходе объект по которому будет сразу понятно валидное ли выражение ( да, наверно надо что то типа maybe monad только какое то дурацкое) и какой то вменяемый способ описывать имеющиеся actions тоже

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

Чешется еще притулить к этому groovy или какой еще другой скриптинг, хз, не было еще времени подумать на тему перегона этого в такую плоскость
Есть сильное ощущение что это можно сделать
- хорошо
- красиво
Но мозги не работают...

Date: 2017-01-08 07:59 pm (UTC)
xacid: (Default)
From: [personal profile] xacid
для джавы 1.8 есть вот это

https://github.com/jon-hanson/parsecj

для 1.7 можно попробовать вот это

http://www.functionaljava.org/javadoc/4.6/functionaljava/fj/parser/package-summary.html

Date: 2017-01-08 08:15 pm (UTC)
xacid: (Default)
From: [personal profile] xacid
для полноты картины :) есть еще хороший пейпер

http://www.staff.science.uu.nl/~dijks106/Papers/pcjava-mpool2001.pdf
"Lazy Functional Parser Combinators in Java"

другие хорошие парсеры

https://github.com/sirthias/parboiled/wiki

http://www.antlr.org

http://www.cs.nyu.edu/rgrimm/xtc/

http://www.romanredz.se/Mouse/index.htm

Date: 2017-01-08 08:47 pm (UTC)
xacid: (Default)
From: [personal profile] xacid
для смеха же покажите этому человеку вот это

http://www.transylvania-jug.org/archives/5777

https://github.com/scireum/parsii

Date: 2017-01-08 08:59 pm (UTC)
xacid: (Default)
From: [personal profile] xacid
так может ему как раз наоборот будет интересно прочитать и даже может понравится :)

Date: 2017-01-08 09:02 pm (UTC)
xacid: (Default)
From: [personal profile] xacid
вобще советую для проекта попробовать парсер parboiled

https://github.com/sirthias/parboiled/wiki

я правда сам использовал только parboiled2 - он только для скалы, но впечатления хорошие ... )

Profile

errorrishe: (Default)
errorrishe

January 2026

S M T W T F S
    123
4567 8910
11121314151617
18192021222324
25262728293031

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 21st, 2026 03:59 pm
Powered by Dreamwidth Studios