diff options
author | Andre Murbach Maidl <andremm@gmail.com> | 2015-10-07 22:06:28 -0300 |
---|---|---|
committer | Andre Murbach Maidl <andremm@gmail.com> | 2015-10-07 22:06:28 -0300 |
commit | 779bb8c74418d41344268525c5208f874626dcd2 (patch) | |
tree | 134db45d4afb230ff42e624d03ac8c3b926b644e | |
parent | a949129c2f3d24c7614093376083082f5beb83da (diff) | |
download | lpeglabel-779bb8c74418d41344268525c5208f874626dcd2.tar.gz lpeglabel-779bb8c74418d41344268525c5208f874626dcd2.tar.bz2 lpeglabel-779bb8c74418d41344268525c5208f874626dcd2.zip |
Adding some unusual annotations
-rwxr-xr-x | examples/typedlua/test.lua | 12 | ||||
-rw-r--r-- | examples/typedlua/tlerror.lua | 6 | ||||
-rw-r--r-- | examples/typedlua/tllexer.lua | 6 | ||||
-rw-r--r-- | examples/typedlua/tlparser.lua | 8 |
4 files changed, 19 insertions, 13 deletions
diff --git a/examples/typedlua/test.lua b/examples/typedlua/test.lua index aa78856..4e173b9 100755 --- a/examples/typedlua/test.lua +++ b/examples/typedlua/test.lua | |||
@@ -1813,7 +1813,7 @@ concat2 = 2^3..1 | |||
1813 | test.lua:1:15: syntax error, unexpected '.1', expecting 'return', '(', 'Name', 'typealias', 'interface', 'goto', 'break', '::', 'local', 'function', 'const', 'repeat', 'for', 'do', 'while', 'if', ';', ',', 'or', 'and', '>', '<', '>=', '<=', '==', '~=', '|', '~', '&', '>>', '<<', '..', '-', '+', '%', '/', '//', '*', '^' | 1813 | test.lua:1:15: syntax error, unexpected '.1', expecting 'return', '(', 'Name', 'typealias', 'interface', 'goto', 'break', '::', 'local', 'function', 'const', 'repeat', 'for', 'do', 'while', 'if', ';', ',', 'or', 'and', '>', '<', '>=', '<=', '==', '~=', '|', '~', '&', '>>', '<<', '..', '-', '+', '%', '/', '//', '*', '^' |
1814 | ]=] | 1814 | ]=] |
1815 | e = [=[ | 1815 | e = [=[ |
1816 | test.lua:1:15: unexpected '.1', expecting 'return', '(', 'Name', 'typealias', 'interface', 'goto', 'break', '::', 'local', 'function', 'const', 'repeat', 'for', 'do', 'while', 'if', ';', ',', 'or', 'and', '>', '<', '>=', '<=', '==', '~=', '|', '~', '&', '>>', '<<', '..', '-', '+', '%', '/', '//', '*', '^' | 1816 | test.lua:1:13: malformed <number> |
1817 | ]=] | 1817 | ]=] |
1818 | 1818 | ||
1819 | r, m = parse(s) | 1819 | r, m = parse(s) |
@@ -1926,7 +1926,7 @@ goto label | |||
1926 | test.lua:2:1: syntax error, unexpected 'goto', expecting ';', '(', 'Name', '{', 'function', '...', 'true', 'false', 'nil', 'String', 'Number', '#', '~', '-', 'not' | 1926 | test.lua:2:1: syntax error, unexpected 'goto', expecting ';', '(', 'Name', '{', 'function', '...', 'true', 'false', 'nil', 'String', 'Number', '#', '~', '-', 'not' |
1927 | ]=] | 1927 | ]=] |
1928 | e = [=[ | 1928 | e = [=[ |
1929 | test.lua:2:1: unexpected 'goto', expecting ';', '(', 'Name', '{', 'function', '...', 'true', 'false', 'nil', 'String', 'Number', '#', '~', '-', 'not' | 1929 | test.lua:2:1: invalid statement after 'return' |
1930 | ]=] | 1930 | ]=] |
1931 | 1931 | ||
1932 | r, m = parse(s) | 1932 | r, m = parse(s) |
@@ -2106,7 +2106,7 @@ return 1,1-2*3+4,"alo"; | |||
2106 | test.lua:2:1: syntax error, unexpected 'return', expecting ';', '(', 'Name', '{', 'function', '...', 'true', 'false', 'nil', 'String', 'Number', '#', '~', '-', 'not' | 2106 | test.lua:2:1: syntax error, unexpected 'return', expecting ';', '(', 'Name', '{', 'function', '...', 'true', 'false', 'nil', 'String', 'Number', '#', '~', '-', 'not' |
2107 | ]=] | 2107 | ]=] |
2108 | e = [=[ | 2108 | e = [=[ |
2109 | test.lua:2:1: unexpected 'return', expecting ';', '(', 'Name', '{', 'function', '...', 'true', 'false', 'nil', 'String', 'Number', '#', '~', '-', 'not' | 2109 | test.lua:2:1: invalid statement |
2110 | ]=] | 2110 | ]=] |
2111 | 2111 | ||
2112 | r, m = parse(s) | 2112 | r, m = parse(s) |
@@ -2193,7 +2193,7 @@ x = ...:any | |||
2193 | test.lua:1:8: syntax error, unexpected ':', expecting 'return', '(', 'Name', 'typealias', 'interface', 'goto', 'break', '::', 'local', 'function', 'const', 'repeat', 'for', 'do', 'while', 'if', ';', ',', 'or', 'and', '>', '<', '>=', '<=', '==', '~=', '|', '~', '&', '>>', '<<', '..', '-', '+', '%', '/', '//', '*', '^' | 2193 | test.lua:1:8: syntax error, unexpected ':', expecting 'return', '(', 'Name', 'typealias', 'interface', 'goto', 'break', '::', 'local', 'function', 'const', 'repeat', 'for', 'do', 'while', 'if', ';', ',', 'or', 'and', '>', '<', '>=', '<=', '==', '~=', '|', '~', '&', '>>', '<<', '..', '-', '+', '%', '/', '//', '*', '^' |
2194 | ]=] | 2194 | ]=] |
2195 | e = [=[ | 2195 | e = [=[ |
2196 | test.lua:1:8: unexpected ':', expecting 'return', '(', 'Name', 'typealias', 'interface', 'goto', 'break', '::', 'local', 'function', 'const', 'repeat', 'for', 'do', 'while', 'if', ';', ',', 'or', 'and', '>', '<', '>=', '<=', '==', '~=', '|', '~', '&', '>>', '<<', '..', '-', '+', '%', '/', '//', '*', '^' | 2196 | test.lua:1:8: invalid statement |
2197 | ]=] | 2197 | ]=] |
2198 | 2198 | ||
2199 | r, m = parse(s) | 2199 | r, m = parse(s) |
@@ -2232,7 +2232,7 @@ local x:number* | |||
2232 | test.lua:1:15: syntax error, unexpected '*', expecting 'return', '(', 'Name', 'typealias', 'interface', 'goto', 'break', '::', 'local', 'function', 'const', 'repeat', 'for', 'do', 'while', 'if', ';', '=', ',', '?', '|' | 2232 | test.lua:1:15: syntax error, unexpected '*', expecting 'return', '(', 'Name', 'typealias', 'interface', 'goto', 'break', '::', 'local', 'function', 'const', 'repeat', 'for', 'do', 'while', 'if', ';', '=', ',', '?', '|' |
2233 | ]=] | 2233 | ]=] |
2234 | e = [=[ | 2234 | e = [=[ |
2235 | test.lua:1:15: unexpected '*', expecting 'return', '(', 'Name', 'typealias', 'interface', 'goto', 'break', '::', 'local', 'function', 'const', 'repeat', 'for', 'do', 'while', 'if', ';', '=', ',', '?', '|' | 2235 | test.lua:1:15: invalid local declaration |
2236 | ]=] | 2236 | ]=] |
2237 | 2237 | ||
2238 | r, m = parse(s) | 2238 | r, m = parse(s) |
@@ -2258,7 +2258,7 @@ local x:number?|string? | |||
2258 | test.lua:1:16: syntax error, unexpected '|', expecting 'return', '(', 'Name', 'typealias', 'interface', 'goto', 'break', '::', 'local', 'function', 'const', 'repeat', 'for', 'do', 'while', 'if', ';', '=', ',' | 2258 | test.lua:1:16: syntax error, unexpected '|', expecting 'return', '(', 'Name', 'typealias', 'interface', 'goto', 'break', '::', 'local', 'function', 'const', 'repeat', 'for', 'do', 'while', 'if', ';', '=', ',' |
2259 | ]=] | 2259 | ]=] |
2260 | e = [=[ | 2260 | e = [=[ |
2261 | test.lua:1:16: unexpected '|', expecting 'return', '(', 'Name', 'typealias', 'interface', 'goto', 'break', '::', 'local', 'function', 'const', 'repeat', 'for', 'do', 'while', 'if', ';', '=', ',' | 2261 | test.lua:1:16: invalid local declaration |
2262 | ]=] | 2262 | ]=] |
2263 | 2263 | ||
2264 | r, m = parse(s) | 2264 | r, m = parse(s) |
diff --git a/examples/typedlua/tlerror.lua b/examples/typedlua/tlerror.lua index c51a53b..94be024 100644 --- a/examples/typedlua/tlerror.lua +++ b/examples/typedlua/tlerror.lua | |||
@@ -35,10 +35,11 @@ new_error("ParList", "expecting '...'") | |||
35 | new_error("MethodCall", "expecting '(' for method call") | 35 | new_error("MethodCall", "expecting '(' for method call") |
36 | new_error("Label1", "expecting <name> after '::'") | 36 | new_error("Label1", "expecting <name> after '::'") |
37 | new_error("Label2", "expecting '::' to close label declaration") | 37 | new_error("Label2", "expecting '::' to close label declaration") |
38 | new_error("LocalAssign", "expecting expression list after '='") | 38 | new_error("LocalAssign1", "expecting expression list after '='") |
39 | new_error("LocalAssign2", "invalid local declaration") | ||
39 | new_error("ForGen", "expecting 'in'") | 40 | new_error("ForGen", "expecting 'in'") |
40 | new_error("LocalFunc", "expecting <name> in local function declaration") | 41 | new_error("LocalFunc", "expecting <name> in local function declaration") |
41 | new_error("Exp", "malformed expression") | 42 | new_error("RetStat", "invalid statement after 'return'") |
42 | new_error("ElseIf", "expecting <exp> after 'elseif'") | 43 | new_error("ElseIf", "expecting <exp> after 'elseif'") |
43 | new_error("SubExpr_1", "malformed 'or' expression") | 44 | new_error("SubExpr_1", "malformed 'or' expression") |
44 | new_error("SubExpr_2", "malformed 'and' expression") | 45 | new_error("SubExpr_2", "malformed 'and' expression") |
@@ -52,6 +53,7 @@ new_error("SubExpr_9", "malformed addition expression") | |||
52 | new_error("SubExpr_10", "malformed multiplication expression") | 53 | new_error("SubExpr_10", "malformed multiplication expression") |
53 | new_error("SubExpr_11", "malformed unary expression") | 54 | new_error("SubExpr_11", "malformed unary expression") |
54 | new_error("SubExpr_12", "malformed '^' expression") | 55 | new_error("SubExpr_12", "malformed '^' expression") |
56 | new_error("Stat", "invalid statement") | ||
55 | 57 | ||
56 | local labels = {} | 58 | local labels = {} |
57 | for k, v in ipairs(errors) do | 59 | for k, v in ipairs(errors) do |
diff --git a/examples/typedlua/tllexer.lua b/examples/typedlua/tllexer.lua index 2e11377..6517ba5 100644 --- a/examples/typedlua/tllexer.lua +++ b/examples/typedlua/tllexer.lua | |||
@@ -9,6 +9,10 @@ function tllexer.try (pat, label) | |||
9 | return pat + lpeg.T(tlerror.labels[label]) | 9 | return pat + lpeg.T(tlerror.labels[label]) |
10 | end | 10 | end |
11 | 11 | ||
12 | function tllexer.catch (pat, label) | ||
13 | return lpeg.Lc(pat, lpeg.P(false), tlerror.labels[label]) | ||
14 | end | ||
15 | |||
12 | local function setffp (s, i, t, n) | 16 | local function setffp (s, i, t, n) |
13 | if not t.ffp or i > t.ffp then | 17 | if not t.ffp or i > t.ffp then |
14 | t.ffp = i | 18 | t.ffp = i |
@@ -75,7 +79,7 @@ end | |||
75 | 79 | ||
76 | local Hex = (lpeg.P("0x") + lpeg.P("0X")) * tllexer.try(lpeg.xdigit^1, "Number") | 80 | local Hex = (lpeg.P("0x") + lpeg.P("0X")) * tllexer.try(lpeg.xdigit^1, "Number") |
77 | local Expo = lpeg.S("eE") * lpeg.S("+-")^-1 * tllexer.try(lpeg.digit^1, "Number") | 81 | local Expo = lpeg.S("eE") * lpeg.S("+-")^-1 * tllexer.try(lpeg.digit^1, "Number") |
78 | local Float = (((lpeg.digit^1 * lpeg.P(".") * lpeg.digit^0) + | 82 | local Float = (((lpeg.digit^1 * lpeg.P(".") * lpeg.digit^0 * tllexer.try(-lpeg.P("."), "Number")) + |
79 | (lpeg.P(".") * lpeg.digit^1)) * Expo^-1) + | 83 | (lpeg.P(".") * lpeg.digit^1)) * Expo^-1) + |
80 | (lpeg.digit^1 * Expo) | 84 | (lpeg.digit^1 * Expo) |
81 | local Int = lpeg.digit^1 | 85 | local Int = lpeg.digit^1 |
diff --git a/examples/typedlua/tlparser.lua b/examples/typedlua/tlparser.lua index 67a06a4..dba94f7 100644 --- a/examples/typedlua/tlparser.lua +++ b/examples/typedlua/tlparser.lua | |||
@@ -11,7 +11,7 @@ local function chainl1 (pat, sep, label) | |||
11 | end | 11 | end |
12 | 12 | ||
13 | local G = lpeg.P { "TypedLua"; | 13 | local G = lpeg.P { "TypedLua"; |
14 | TypedLua = tllexer.Shebang^-1 * tllexer.Skip * lpeg.V("Chunk") * -1; | 14 | TypedLua = tllexer.Shebang^-1 * tllexer.Skip * lpeg.V("Chunk") * tllexer.try(-1, "Stat"); |
15 | -- type language | 15 | -- type language |
16 | Type = lpeg.V("NilableType"); | 16 | Type = lpeg.V("NilableType"); |
17 | NilableType = lpeg.V("UnionType") * tllexer.symb("?")^-1; | 17 | NilableType = lpeg.V("UnionType") * tllexer.symb("?")^-1; |
@@ -179,14 +179,14 @@ local G = lpeg.P { "TypedLua"; | |||
179 | tllexer.kw("function") * lpeg.V("FuncName") * lpeg.V("FuncBody"); | 179 | tllexer.kw("function") * lpeg.V("FuncName") * lpeg.V("FuncBody"); |
180 | LocalFunc = tllexer.kw("function") * | 180 | LocalFunc = tllexer.kw("function") * |
181 | tllexer.try(lpeg.V("Id"), "LocalFunc") * lpeg.V("FuncBody"); | 181 | tllexer.try(lpeg.V("Id"), "LocalFunc") * lpeg.V("FuncBody"); |
182 | LocalAssign = lpeg.V("NameList") * | 182 | LocalAssign = lpeg.V("NameList") * tllexer.symb("=") * tllexer.try(lpeg.V("ExpList"), "LocalAssign1") + |
183 | ((tllexer.symb("=") * tllexer.try(lpeg.V("ExpList"), "LocalAssign")))^-1; | 183 | lpeg.V("NameList") * (#(-tllexer.symb("=") * (lpeg.V("Stat") + -1)) * lpeg.P(true)) + lpeg.T(tlerror.labels["LocalAssign2"]); |
184 | LocalStat = tllexer.kw("local") * | 184 | LocalStat = tllexer.kw("local") * |
185 | (lpeg.V("LocalTypeDec") + lpeg.V("LocalFunc") + lpeg.V("LocalAssign")); | 185 | (lpeg.V("LocalTypeDec") + lpeg.V("LocalFunc") + lpeg.V("LocalAssign")); |
186 | LabelStat = tllexer.symb("::") * tllexer.try(tllexer.token(tllexer.Name, "Name"), "Label1") * tllexer.try(tllexer.symb("::"), "Label2"); | 186 | LabelStat = tllexer.symb("::") * tllexer.try(tllexer.token(tllexer.Name, "Name"), "Label1") * tllexer.try(tllexer.symb("::"), "Label2"); |
187 | BreakStat = tllexer.kw("break"); | 187 | BreakStat = tllexer.kw("break"); |
188 | GoToStat = tllexer.kw("goto") * tllexer.token(tllexer.Name, "Name"); | 188 | GoToStat = tllexer.kw("goto") * tllexer.token(tllexer.Name, "Name"); |
189 | RetStat = tllexer.kw("return") * | 189 | RetStat = tllexer.kw("return") * tllexer.try(-lpeg.V("Stat"), "RetStat") * |
190 | (lpeg.V("Expr") * (tllexer.symb(",") * lpeg.V("Expr"))^0)^-1 * | 190 | (lpeg.V("Expr") * (tllexer.symb(",") * lpeg.V("Expr"))^0)^-1 * |
191 | tllexer.symb(";")^-1; | 191 | tllexer.symb(";")^-1; |
192 | TypeDecStat = lpeg.V("Interface"); | 192 | TypeDecStat = lpeg.V("Interface"); |