Skip to content

Commit

Permalink
Including the parse tree in the trace condition allows for switching …
Browse files Browse the repository at this point in the history
…on the tracer from a certain position in the input onward.
  • Loading branch information
veelo committed Feb 25, 2017
1 parent 8007188 commit 3caaf02
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 26 deletions.
7 changes: 4 additions & 3 deletions pegged/examples/extended_pascal/source/app.d
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,17 @@ int main(string[] args)
import std.experimental.logger;
import std.algorithm : startsWith;
sharedLog = new TraceLogger("TraceLog.txt");
bool cond (string ruleName)
bool cond (string ruleName, const ref ParseTree p)
{
static startTrace = false;
if (ruleName.startsWith("EP.FunctionDeclaration"))
//if (ruleName.startsWith("EP.FunctionDeclaration"))
if (p.begin > 4000)
startTrace = true;
return startTrace && ruleName.startsWith("EP");
}
// Various ways of turning logging on and of:
//setTraceConditionFunction(&cond);
setTraceConditionFunction(ruleName => ruleName.startsWith("EP"));
setTraceConditionFunction(function(string ruleName, const ref ParseTree p) {return ruleName.startsWith("EP");});
//traceAll;
}

Expand Down
46 changes: 23 additions & 23 deletions pegged/peg.d
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ version (tracer)
import std.algorithm.comparison : min;

// Function pointers.
private static bool function(string ruleName) traceConditionFunction;
private static bool delegate(string ruleName) traceConditionDelegate;
private static bool function(string ruleName, const ref ParseTree p) traceConditionFunction;
private static bool delegate(string ruleName, const ref ParseTree p) traceConditionDelegate;
private static int traceLevel;
private static bool traceBlocked;
private static bool logTraceLevel = false;
Expand All @@ -55,14 +55,14 @@ version (tracer)
traceLevel--;
}

private bool shouldTrace(string ruleName)
private bool shouldTrace(string ruleName, const ref ParseTree p)
{
if (__ctfe || traceBlocked)
return false;
if (traceConditionDelegate != null)
return traceConditionDelegate(ruleName);
return traceConditionDelegate(ruleName, p);
if (traceConditionFunction != null)
return traceConditionFunction(ruleName);
return traceConditionFunction(ruleName, p);
return false;
}

Expand All @@ -81,14 +81,14 @@ version (tracer)
+ setTraceConditionFunction(ruleName => ruleName.startsWith("MyGrammar"));
+ ---
+/
void setTraceConditionFunction(bool delegate(string ruleName) condition)
void setTraceConditionFunction(bool delegate(string ruleName, const ref ParseTree p) condition)
{
traceConditionDelegate = condition;
traceConditionFunction = null;
}

/// ditto
void setTraceConditionFunction(bool function(string ruleName) condition)
void setTraceConditionFunction(bool function(string ruleName, const ref ParseTree p) condition)
{
traceConditionFunction = condition;
traceConditionDelegate = null;
Expand All @@ -100,7 +100,7 @@ version (tracer)
*/
void traceAll()
{
setTraceConditionFunction(string => true);
setTraceConditionFunction(function(string ruleName, const ref ParseTree p) {return true;});
}

/** Do not trace any rules. */
Expand Down Expand Up @@ -1217,7 +1217,7 @@ template and(rules...) if (rules.length > 0)
{
version (tracer)
{
if (shouldTrace(getName!(r)()))
if (shouldTrace(getName!(r)(), p))
trace(traceMsg(result, name, getName!(r)()));
}
ParseTree temp = r(result);
Expand All @@ -1242,7 +1242,7 @@ template and(rules...) if (rules.length > 0)
result.matches ~= temp.matches[$-1];
version (tracer)
{
if (shouldTrace(getName!(r)()))
if (shouldTrace(getName!(r)(), p))
trace(traceResultMsg(result, getName!(r)()));
decTraceLevel();
}
Expand All @@ -1253,7 +1253,7 @@ template and(rules...) if (rules.length > 0)
version (tracer)
{
foreach(i, r; rules)
if (shouldTrace(getName!(r)()))
if (shouldTrace(getName!(r)(), p))
{
trace(traceResultMsg(result, name));
break;
Expand Down Expand Up @@ -1457,7 +1457,7 @@ template or(rules...) if (rules.length > 0)
{
version (tracer)
{
if (shouldTrace(getName!(r)()))
if (shouldTrace(getName!(r)(), p))
trace(traceMsg(p, name, getName!(r)()));
}
ParseTree temp = r(p);
Expand All @@ -1467,7 +1467,7 @@ template or(rules...) if (rules.length > 0)
temp.name = name;
version (tracer)
{
if (shouldTrace(getName!(r)()))
if (shouldTrace(getName!(r)(), p))
trace(traceResultMsg(temp, getName!(r)()));
decTraceLevel();
}
Expand All @@ -1477,7 +1477,7 @@ template or(rules...) if (rules.length > 0)
{
version (tracer)
{
if (shouldTrace(getName!(r)()))
if (shouldTrace(getName!(r)(), p))
trace(traceResultMsg(temp, getName!(r)()));
}
enum errName = " (" ~ getName!(r)() ~")";
Expand Down Expand Up @@ -1894,7 +1894,7 @@ template zeroOrMore(alias r)
version (tracer)
{
incTraceLevel();
if (shouldTrace(getName!(r)()))
if (shouldTrace(getName!(r)(), p))
trace(traceMsg(result, name, getName!(r)()));
}
auto temp = r(result);
Expand All @@ -1907,15 +1907,15 @@ template zeroOrMore(alias r)
result.end = temp.end;
version (tracer)
{
if (shouldTrace(getName!(r)()))
if (shouldTrace(getName!(r)(), p))
trace(traceMsg(result, name, getName!(r)()));
}
temp = r(result);
}
result.successful = true;
version (tracer)
{
if (shouldTrace(getName!(r)()))
if (shouldTrace(getName!(r)(), p))
trace(traceResultMsg(result, getName!(r)()));
decTraceLevel();
}
Expand Down Expand Up @@ -2047,7 +2047,7 @@ template oneOrMore(alias r)
version (tracer)
{
incTraceLevel();
if (shouldTrace(getName!(r)()))
if (shouldTrace(getName!(r)(), p))
trace(traceMsg(result, name, getName!(r)()));
}
auto temp = r(result);
Expand All @@ -2069,7 +2069,7 @@ template oneOrMore(alias r)
result.end = temp.end;
version (tracer)
{
if (shouldTrace(getName!(r)()))
if (shouldTrace(getName!(r)(), p))
trace(traceMsg(result, name, getName!(r)()));
}
temp = r(result);
Expand All @@ -2078,7 +2078,7 @@ template oneOrMore(alias r)
}
version (tracer)
{
if (shouldTrace(getName!(r)()))
if (shouldTrace(getName!(r)(), p))
trace(traceResultMsg(result, getName!(r)()));
decTraceLevel();
}
Expand Down Expand Up @@ -2185,7 +2185,7 @@ template option(alias r)
{
version (tracer)
{
if (shouldTrace(getName!(r)()))
if (shouldTrace(getName!(r)(), p))
trace(traceMsg(p, name, getName!(r)()));
}
ParseTree result = r(p);
Expand Down Expand Up @@ -2279,7 +2279,7 @@ template posLookahead(alias r)
{
version (tracer)
{
if (shouldTrace(getName!(r)()))
if (shouldTrace(getName!(r)(), p))
trace(traceMsg(p, name, getName!(r)()));
}
ParseTree temp = r(p);
Expand Down Expand Up @@ -2370,7 +2370,7 @@ template negLookahead(alias r)
{
version (tracer)
{
if (shouldTrace(getName!(r)()))
if (shouldTrace(getName!(r)(), p))
trace(traceMsg(p, name, getName!(r)()));
}
ParseTree temp = r(p);
Expand Down

0 comments on commit 3caaf02

Please sign in to comment.