niedziela, 23 listopada 2008

SBQL AST Visualizer

Napisałem na szybko wizualizator do drzew składniowych zapytań SBQL: tutaj! (do odpalenia wymagany pydot) W środku jest kilka obrazków z drzewkami.
Ostatecznie gramatyka wyszła mi taka:


Rule 1 query -> LPAREN query RPAREN
Rule 2 query -> LITERAL
Rule 3 query -> NUMBERLITERAL
Rule 4 query -> STRINGLITERAL
Rule 5 query -> UNARYOP query
Rule 6 query -> query SIMPLEBINARYOP query
Rule 7 query -> query DOT query
Rule 8 query -> query COMMA query
Rule 9 query -> query AS query
Rule 10 query -> query JOIN query
Rule 11 query -> query WHERE query
Rule 12 query -> query AND query
Rule 13 query -> query OR query

z kolejnością wiąząń:
precedence = (
('left', 'WHERE', 'JOIN') ,
('left', 'AND', 'OR'),
('left', 'SIMPLEBINARYOP'),
('left', 'AS', 'DOT')
)

na końcu pliku są takie przykłady:
data = {
"01simple": "(2+2 < 4) and 1",
"02projection" : '(Employee where salary < 200).(name, surname)',
"03more" :'(Employee where surname = "Kowalski" and salary < 200).name',
"04MappedJoin" : 'Employee.worksIn.Dept',
"05forjoin" : '(Employee where surname = "Kowalski" and worksIn.Departmet.isLocatedIn.Location.name = "Lodz").(surname, birthdate)',
"06join" : '(Employee as e join e.worksIn.Department as d join d.isLocatedIn.Location as l).(e.surname, l.name)',
"07join2" : '(Employee where surname = "Kowalski" and worksIn.Department.name = "Production").(surname, birthdate)'
}

wtorek, 11 listopada 2008

Citations for today

“Multicore architectures will (finally) bring parallel
computing into the mainstream. To effectively
exploit them, legions of programmers must
emphasize concurrency.”

"Nontrivial software written with threads,
semaphores, and mutexes are
incomprehensible to humans and cannot
and should not be trusted!"

Edward A. Lee

prezentacja - świetny przykład z wzorcem observera



thinking, learning, thinking... argh

wtorek, 4 listopada 2008

Query Language in Java

Dzisiaj nie będzie nic własnoręcznie stworzonego - zamiast tego mała definicja:

Domain Specific Language
The basic idea of a domain specific language (DSL) is a computer language that's targeted to a particular kind of problem, rather than a general purpose language that's aimed at any kind of software problem. blog:DSL

Pewnym uszczegółowieniem tej koncepcji jest pomysł aby w języku konkretnego przeznaczenia (np. języku programowania) stworzyć wrażenie innego języka (wspominałem juz o LINQ?). Bardzo ciekawe jak te mainstreamowe języki ewoluują. Ostatnio natknąłem się na querydsl (warto jest to póki co najlepszy projekt z tym pomysłem). Niewątpliwie i tak tutaj najbardziej narozrabiał Microsoft ze swoim rozszerzeniem LINQ, ale projekty próbujące tego samego w JAVA rosną ostatnio jak grzyby po deszczu; a ja mam wrażenie jakby powstał taki lepszy, mocno typowany JDBC - nice.