Mercurial Hosting > luan
annotate src/luan/interp/LuaParser.java @ 6:a315783c9524
more parsing
git-svn-id: https://luan-java.googlecode.com/svn/trunk@7 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Mon, 19 Nov 2012 13:08:30 +0000 |
parents | 9ef0fd711101 |
children | bca8fc5d928b |
rev | line source |
---|---|
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
1 package luan.interp; |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
2 |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
3 import java.util.Scanner; |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
4 import org.parboiled.BaseParser; |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
5 import org.parboiled.Parboiled; |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
6 import org.parboiled.Rule; |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
7 import org.parboiled.parserunners.ReportingParseRunner; |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
8 import org.parboiled.support.ParsingResult; |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
9 import org.parboiled.errors.ErrorUtils; |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
10 import luan.Lua; |
6
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
11 import luan.LuaNumber; |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
12 import luan.LuaState; |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
13 |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
14 |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
15 public class LuaParser extends BaseParser<Object> { |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
16 |
6
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
17 Rule Target() { |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
18 return Sequence(ConstExpr(), EOI); |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
19 } |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
20 |
6
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
21 Rule ConstExpr() { |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
22 return Sequence( |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
23 Const(), |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
24 push(new ConstExpr(pop())) |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
25 ); |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
26 } |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
27 |
6
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
28 Rule Const() { |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
29 return FirstOf( |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
30 NilConst(), |
6
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
31 BooleanConst(), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
32 NumberConst(), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
33 StringConst() |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
34 ); |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
35 } |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
36 |
6
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
37 Rule NilConst() { |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
38 return Sequence( |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
39 String("nil"), |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
40 push(null) |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
41 ); |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
42 } |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
43 |
6
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
44 Rule BooleanConst() { |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
45 return FirstOf( |
6
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
46 Sequence( |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
47 String("true"), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
48 push(true) |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
49 ), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
50 Sequence( |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
51 String("false"), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
52 push(false) |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
53 ) |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
54 ); |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
55 } |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
56 |
6
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
57 Rule NumberConst() { |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
58 return Sequence( |
6
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
59 Number(), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
60 push(new LuaNumber((Double)pop())) |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
61 ); |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
62 } |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
63 |
6
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
64 Rule Number() { |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
65 return FirstOf( |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
66 Sequence( |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
67 IgnoreCase("0x"), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
68 OneOrMore(HexDigit()), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
69 push((double)Long.parseLong(match(),16)) |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
70 ), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
71 Sequence( |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
72 DecNumber(), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
73 push(Double.parseDouble(match())) |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
74 ) |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
75 ); |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
76 } |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
77 |
6
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
78 Rule DecNumber() { |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
79 return FirstOf( |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
80 Sequence( |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
81 Int(), |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
82 Optional( |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
83 Ch('.'), |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
84 Optional(Int()) |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
85 ), |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
86 NumberExp() |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
87 ), |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
88 Sequence( |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
89 Ch('.'), |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
90 Int(), |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
91 NumberExp() |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
92 ) |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
93 ); |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
94 } |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
95 |
6
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
96 Rule NumberExp() { |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
97 return Optional( |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
98 IgnoreCase('e'), |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
99 Optional(AnyOf("+-")), |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
100 Int() |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
101 ); |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
102 } |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
103 |
6
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
104 Rule Int() { |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
105 return OneOrMore(Digit()); |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
106 } |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
107 |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
108 Rule HexDigit() { |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
109 return FirstOf( |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
110 Digit(), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
111 AnyOf("abcdefABCDEF") |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
112 ); |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
113 } |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
114 |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
115 Rule Digit() { |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
116 return CharRange('0', '9'); |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
117 } |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
118 |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
119 Rule StringConst() { |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
120 return FirstOf( |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
121 QuotedString('"'), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
122 QuotedString('\'') |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
123 ); |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
124 } |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
125 |
6
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
126 Rule QuotedString(char quote) { |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
127 return Sequence( |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
128 Ch(quote), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
129 push(new StringBuffer()), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
130 ZeroOrMore( |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
131 FirstOf( |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
132 Sequence( |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
133 NoneOf("\\\n"+quote), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
134 append(matchedChar()) |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
135 ), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
136 EscSeq() |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
137 ) |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
138 ), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
139 Ch(quote), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
140 push(((StringBuffer)pop()).toString()) |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
141 ); |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
142 } |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
143 |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
144 Rule EscSeq() { |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
145 return Sequence( |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
146 Ch('\\'), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
147 FirstOf( |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
148 Sequence( Ch('b'), append('\b') ), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
149 Sequence( Ch('f'), append('\f') ), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
150 Sequence( Ch('n'), append('\n') ), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
151 Sequence( Ch('r'), append('\r') ), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
152 Sequence( Ch('t'), append('\t') ), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
153 Sequence( Ch('\\'), append('\\') ), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
154 Sequence( Ch('"'), append('"') ), |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
155 Sequence( Ch('\''), append('\'') ) |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
156 ) |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
157 ); |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
158 } |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
159 |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
160 boolean append(char ch) { |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
161 StringBuffer sb = (StringBuffer)peek(); |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
162 sb.append(ch); |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
163 return true; |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
164 } |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
165 |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
166 // for testing |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
167 public static void main(String[] args) throws Exception { |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
168 LuaParser parser = Parboiled.createParser(LuaParser.class); |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
169 while( true ) { |
6
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
170 String input = new Scanner(System.in).nextLine(); |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
171 ParsingResult<?> result = new ReportingParseRunner(parser.Target()).run(input); |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
172 if( result.hasErrors() ) { |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
173 System.out.println("Parse Errors:\n" + ErrorUtils.printParseErrors(result)); |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
174 } else { |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
175 Expr expr = (Expr)result.resultValue; |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
176 LuaState lua = new LuaState(); |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
177 Object val = expr.eval(lua); |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
178 System.out.println("Result: "+Lua.toString(val)); |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
179 } |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
180 } |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
181 } |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
182 } |