Slide 1

Slide 1 text

JavaCCͱSpring Expression Language Λ༻͍ͨϢʔβఆ߲ٛ໨ Yuya Yamaguchi@rakus

Slide 2

Slide 2 text

#RAKUSMeetup Profile ⋅ SIerʹ5೥ࡏ੶ͨ͠ͷͪɺϥΫεʹೖࣾ ⋅ ָָۈଵνʔϜʹॴଐ ⋅ Backend Engineer + CI !2

Slide 3

Slide 3 text

!3

Slide 4

Slide 4 text

#RAKUSMeetup ͓࿩͢͠Δ͜ͱ ⋅ Ϣʔβఆ߲ٛ໨ͱ͸ ⋅ Ϣʔβఆ߲ٛ໨ΛͲ͏΍࣮ͬͯݱͨ͠ͷ͔ !4

Slide 5

Slide 5 text

#RAKUSMeetup Ϣʔβఆ߲ٛ໨ͱ͸ ⋅ ۈ຿৘ใΛར༻ͨ͠೚ҙͷܭࢉࣜΛ߲࣋ͬͨ ໨ΛఆٛͰ͖Δػೳ ⋅ ܭࢉ݁ՌΛۈ຿৘ใ͔Βࢀর ⋅ اۀಠࣗͷ༻ޠ΍࢒ۀ࣌ؒͷࢉग़ͳͲΛ૝ఆ !5

Slide 6

Slide 6 text

#RAKUSMeetup Ϣʔβఆ߲ٛ໨Ͱॏཁͱߟ͑ͨ2ͭͷ͜ͱ ⋅ ܭࢉࣜΛͲ͏ධՁ͢Δͷ͔ − ࣜͱͯ͠ͷਖ਼͠͞ΛධՁ͠ͳ͍ͱ͍͚ͳ͍ − ૊ΊΔܭࢉ͕ࣜ૿͑ͨ৔߹ʹ֦ுͰ͖Δඞཁ͕͋Δ ⋅ Ͳ͏΍ͬͯܭࢉ݁ՌΛࢉग़͢Δͷ͔ − ܭࢉ݁Ռ͸೔ʑมΘΔ − ܭࢉ݁ՌΛग़͢ʹ͸தؒܭࢉ͕Ͱ͖Δඞཁ͕͋Δ !6

Slide 7

Slide 7 text

#RAKUSMeetup Ϣʔβఆ߲ٛ໨Ͱॏཁͱߟ͑ͨ2ͭͷ͜ͱ ⋅ ܭࢉࣜΛͲ͏ධՁ͢Δͷ͔ − ࣜͱͯ͠ͷਖ਼͠͞ΛධՁ͠ͳ͍ͱ͍͚ͳ͍ − ૊ΊΔܭࢉ͕ࣜ૿͑ͨ৔߹ʹ֦ுͰ͖Δඞཁ͕͋Δ ➢ JavaCC ⋅ Ͳ͏΍ͬͯܭࢉ݁ՌΛࢉग़͢Δͷ͔ − ܭࢉ݁Ռ͸೔ʑมΘΔ − ܭࢉ݁ՌΛग़͢ʹ͸தؒܭࢉ͕Ͱ͖Δඞཁ͕͋Δ ➢ SpEL(Spring Expression Language) !7

Slide 8

Slide 8 text

#RAKUSMeetup ܭࢉࣜͷධՁͱܭࢉ݁Ռͷࢉग़ JavaCC SpEL JSON !8

Slide 9

Slide 9 text

#RAKUSMeetup ܭࢉࣜͷධՁͱܭࢉ݁Ռͷࢉग़ JavaCC SpEL JSON !9

Slide 10

Slide 10 text

#RAKUSMeetup ܭࢉࣜͷධՁͱܭࢉ݁Ռͷࢉग़ JavaCC SpEL ܭࢉࣜ !10

Slide 11

Slide 11 text

#RAKUSMeetup ܭࢉࣜͷධՁͱܭࢉ݁Ռͷࢉग़ JavaCC SpEL !11

Slide 12

Slide 12 text

#RAKUSMeetup ܭࢉࣜͷධՁͱܭࢉ݁Ռͷࢉग़ JavaCC SpEL ܭࢉࣜͱม਺ !12

Slide 13

Slide 13 text

#RAKUSMeetup ܭࢉࣜͷධՁͱܭࢉ݁Ռͷࢉग़ JavaCC SpEL ܭࢉࣜ !13

Slide 14

Slide 14 text

#RAKUSMeetup JavaCCͱ͸ ⋅ Java Compiler Compiler − https://javacc.github.io/javacc/ ⋅ BSD License 2.0 ⋅ ֦ுBNF͔ΒJavaͷύʔαΛੜ੒ !14

Slide 15

Slide 15 text

#RAKUSMeetup 1 + 1͕ೖྗ͞ΕͨΒʮ2ʯΛग़ྗ͢Δαϯϓϧ PARSER_BEGIN(Example) public class Example { public static void main(String args[]) { Example parser = new Example(System.in); parser.Start(); } } PARSER_END(Example) SKIP: { " " } TOKEN: { | | } void Start(): { int sum; int number; } { sum = number() ( {} number = number() { sum += number; } )* { System.out.println("> " + sum); } } int number(): { Token number; } { number = {} { return Integer.parseInt(number.image); } } !15

Slide 16

Slide 16 text

#RAKUSMeetup 1 + 1͕ೖྗ͞ΕͨΒʮ2ʯΛग़ྗ͢Δαϯϓϧ $ javacc example.jj $ ls -l -rw-r--r-- 1 user group 6290 1 2 12:34 Example.java -rw-r--r-- 1 user group 457 1 2 12:34 ExampleConstants.java -rw-r--r-- 1 user group 7228 1 2 12:34 ExampleTokenManager.java -rw-r--r-- 1 user group 6171 1 2 12:34 ParseException.java -rw-r--r-- 1 user group 12351 1 2 12:34 SimpleCharStream.java -rw-r--r-- 1 user group 4058 1 2 12:34 Token.java -rw-r--r-- 1 user group 4420 1 2 12:34 TokenMgrError.java -rw-r--r-- 1 user group 375 1 2 12:34 example.jj !16

Slide 17

Slide 17 text

#RAKUSMeetup ܭࢉࣜͷධՁͱܭࢉ݁Ռͷࢉग़ JavaCC SpEL ܭࢉࣜͱม਺ !17

Slide 18

Slide 18 text

#RAKUSMeetup SpEL(Spring Expression Language)ͱ͸ ⋅ JSPͷELࣜΛSpringʹ֦ு − ${name} ⋅ Spring 3.0͔Βಋೖ ⋅ @ValueΞϊςʔγϣϯͰར༻ !18

Slide 19

Slide 19 text

#RAKUSMeetup numberม਺ͷ஋ + 2000ͷܭࢉ݁ՌΛऔಘ͢Δαϯϓϧ class Data { public int number = 21; } ExpressionParser parser = new SpelExpressionParser(); EvaluationContext context = new StandardEvaluationContext(new Data()); Expression exp = parser.parseExpression("number + 2000"); // year = 2021 int year = exp.getValue(context, Integer.class); !19

Slide 20

Slide 20 text

#RAKUSMeetup ·ͱΊ ⋅ JavaCCͰܭࢉࣜΛධՁ͠ɺSpELͰܭࢉ݁Ռͷࢉग़͠·ͨ͠ ⋅ JavaCCΛར༻͢Δ͜ͱͰܭࢉࣜΛಠཱͤ͞Δ͜ͱͰ֦ுੑ͕ Ͱ͖ͨ ⋅ JavaCCͷݺͼग़͠ίετ͕ߴ͍໰୊͕վળ՝୊Ͱ͢ !20