aboutsummaryrefslogtreecommitdiff
path: root/examples/typedlua/tlparser.lua
diff options
context:
space:
mode:
authorAndre Murbach Maidl <andremm@gmail.com>2015-10-07 17:39:13 -0300
committerAndre Murbach Maidl <andremm@gmail.com>2015-10-07 17:39:13 -0300
commita949129c2f3d24c7614093376083082f5beb83da (patch)
tree9265b16b235dbfbf2c11f75b0fb95ac6342f176a /examples/typedlua/tlparser.lua
parente8e389b9ddebe6ced19d5f4bc112b309ffe1a8ff (diff)
downloadlpeglabel-a949129c2f3d24c7614093376083082f5beb83da.tar.gz
lpeglabel-a949129c2f3d24c7614093376083082f5beb83da.tar.bz2
lpeglabel-a949129c2f3d24c7614093376083082f5beb83da.zip
Adding labels and messages for malformed expressions
Diffstat (limited to 'examples/typedlua/tlparser.lua')
-rw-r--r--examples/typedlua/tlparser.lua30
1 files changed, 15 insertions, 15 deletions
diff --git a/examples/typedlua/tlparser.lua b/examples/typedlua/tlparser.lua
index 2180812..67a06a4 100644
--- a/examples/typedlua/tlparser.lua
+++ b/examples/typedlua/tlparser.lua
@@ -7,7 +7,7 @@ local tllexer = require "tllexer"
7local tlerror = require "tlerror" 7local tlerror = require "tlerror"
8 8
9local function chainl1 (pat, sep, label) 9local function chainl1 (pat, sep, label)
10 return pat * (sep * pat)^0 10 return pat * (sep * tllexer.try(pat, label))^0
11end 11end
12 12
13local G = lpeg.P { "TypedLua"; 13local G = lpeg.P { "TypedLua";
@@ -102,7 +102,7 @@ local G = lpeg.P { "TypedLua";
102 tllexer.symb("<") + 102 tllexer.symb("<") +
103 tllexer.symb(">"); 103 tllexer.symb(">");
104 BOrOp = tllexer.symb("|"); 104 BOrOp = tllexer.symb("|");
105 BXorOp = tllexer.symb("~"); 105 BXorOp = tllexer.symb("~") * -lpeg.P("=");
106 BAndOp = tllexer.symb("&"); 106 BAndOp = tllexer.symb("&");
107 ShiftOp = tllexer.symb("<<") + 107 ShiftOp = tllexer.symb("<<") +
108 tllexer.symb(">>"); 108 tllexer.symb(">>");
@@ -119,20 +119,20 @@ local G = lpeg.P { "TypedLua";
119 tllexer.symb("#"); 119 tllexer.symb("#");
120 PowOp = tllexer.symb("^"); 120 PowOp = tllexer.symb("^");
121 Expr = lpeg.V("SubExpr_1"); 121 Expr = lpeg.V("SubExpr_1");
122 SubExpr_1 = chainl1(lpeg.V("SubExpr_2"), lpeg.V("OrOp")); 122 SubExpr_1 = chainl1(lpeg.V("SubExpr_2"), lpeg.V("OrOp"), "SubExpr_1");
123 SubExpr_2 = chainl1(lpeg.V("SubExpr_3"), lpeg.V("AndOp")); 123 SubExpr_2 = chainl1(lpeg.V("SubExpr_3"), lpeg.V("AndOp"), "SubExpr_2");
124 SubExpr_3 = chainl1(lpeg.V("SubExpr_4"), lpeg.V("RelOp")); 124 SubExpr_3 = chainl1(lpeg.V("SubExpr_4"), lpeg.V("RelOp"), "SubExpr_3");
125 SubExpr_4 = chainl1(lpeg.V("SubExpr_5"), lpeg.V("BOrOp")); 125 SubExpr_4 = chainl1(lpeg.V("SubExpr_5"), lpeg.V("BOrOp"), "SubExpr_4");
126 SubExpr_5 = chainl1(lpeg.V("SubExpr_6"), lpeg.V("BXorOp")); 126 SubExpr_5 = chainl1(lpeg.V("SubExpr_6"), lpeg.V("BXorOp"), "SubExpr_5");
127 SubExpr_6 = chainl1(lpeg.V("SubExpr_7"), lpeg.V("BAndOp")); 127 SubExpr_6 = chainl1(lpeg.V("SubExpr_7"), lpeg.V("BAndOp"), "SubExpr_6");
128 SubExpr_7 = chainl1(lpeg.V("SubExpr_8"), lpeg.V("ShiftOp")); 128 SubExpr_7 = chainl1(lpeg.V("SubExpr_8"), lpeg.V("ShiftOp"), "SubExpr_7");
129 SubExpr_8 = lpeg.V("SubExpr_9") * lpeg.V("ConOp") * lpeg.V("SubExpr_8") + 129 SubExpr_8 = lpeg.V("SubExpr_9") * lpeg.V("ConOp") * tllexer.try(lpeg.V("SubExpr_8"), "SubExpr_8") +
130 lpeg.V("SubExpr_9"); 130 lpeg.V("SubExpr_9");
131 SubExpr_9 = chainl1(lpeg.V("SubExpr_10"), lpeg.V("AddOp")); 131 SubExpr_9 = chainl1(lpeg.V("SubExpr_10"), lpeg.V("AddOp"), "SubExpr_9");
132 SubExpr_10 = chainl1(lpeg.V("SubExpr_11"), lpeg.V("MulOp")); 132 SubExpr_10 = chainl1(lpeg.V("SubExpr_11"), lpeg.V("MulOp"), "SubExpr_10");
133 SubExpr_11 = lpeg.V("UnOp") * lpeg.V("SubExpr_11") + 133 SubExpr_11 = lpeg.V("UnOp") * tllexer.try(lpeg.V("SubExpr_11"), "SubExpr_11") +
134 lpeg.V("SubExpr_12"); 134 lpeg.V("SubExpr_12");
135 SubExpr_12 = lpeg.V("SimpleExp") * (lpeg.V("PowOp") * lpeg.V("SubExpr_11"))^-1; 135 SubExpr_12 = lpeg.V("SimpleExp") * (lpeg.V("PowOp") * tllexer.try(lpeg.V("SubExpr_11"), "SubExpr_12"))^-1;
136 SimpleExp = tllexer.token(tllexer.Number, "Number") + 136 SimpleExp = tllexer.token(tllexer.Number, "Number") +
137 tllexer.token(tllexer.String, "String") + 137 tllexer.token(tllexer.String, "String") +
138 tllexer.kw("nil") + 138 tllexer.kw("nil") +
@@ -151,7 +151,7 @@ local G = lpeg.P { "TypedLua";
151 tllexer.symb("(") * lpeg.V("Expr") * tllexer.try(tllexer.symb(")"), "MissingCP"); 151 tllexer.symb("(") * lpeg.V("Expr") * tllexer.try(tllexer.symb(")"), "MissingCP");
152 Block = lpeg.V("StatList") * lpeg.V("RetStat")^-1; 152 Block = lpeg.V("StatList") * lpeg.V("RetStat")^-1;
153 IfStat = tllexer.kw("if") * lpeg.V("Expr") * tllexer.try(tllexer.kw("then"), "Then") * lpeg.V("Block") * 153 IfStat = tllexer.kw("if") * lpeg.V("Expr") * tllexer.try(tllexer.kw("then"), "Then") * lpeg.V("Block") *
154 (tllexer.kw("elseif") * lpeg.V("Expr") * tllexer.try(tllexer.kw("then"), "Then") * lpeg.V("Block"))^0 * 154 (tllexer.kw("elseif") * tllexer.try(lpeg.V("Expr"), "ElseIf") * tllexer.try(tllexer.kw("then"), "Then") * lpeg.V("Block"))^0 *
155 (tllexer.kw("else") * lpeg.V("Block"))^-1 * 155 (tllexer.kw("else") * lpeg.V("Block"))^-1 *
156 tllexer.try(tllexer.kw("end"), "IfEnd"); 156 tllexer.try(tllexer.kw("end"), "IfEnd");
157 WhileStat = tllexer.kw("while") * lpeg.V("Expr") * 157 WhileStat = tllexer.kw("while") * lpeg.V("Expr") *