summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorAdela Vais <adela.vais99@gmail.com>2020-12-10 23:27:53 +0200
committerAkim Demaille <akim.demaille@gmail.com>2020-12-21 06:54:35 +0100
commitcc04459cfee92905a635c36958d66f0edb25a257 (patch)
treeafd704a83036b90bbfdd8e8f09f494f8dcf53793 /examples
parentee4ec08513c3960bea38c14d143b62c70e81edd8 (diff)
downloadbison-cc04459cfee92905a635c36958d66f0edb25a257.tar.gz
d: reduce verbosity for returning the location from yylex()
* examples/d/calc/calc.y (start, end): Replace by this... (location): new member variable in the Lexer class. Use it. * tests/calc.at: Use the defined location variable.
Diffstat (limited to 'examples')
-rw-r--r--examples/d/calc/calc.y41
1 files changed, 20 insertions, 21 deletions
diff --git a/examples/d/calc/calc.y b/examples/d/calc/calc.y
index 8bf55fd4..c9a7df96 100644
--- a/examples/d/calc/calc.y
+++ b/examples/d/calc/calc.y
@@ -95,8 +95,7 @@ if (isInputRange!R && is(ElementType!R : dchar))
this(R r) { input = r; }
- YYPosition start;
- YYPosition end;
+ YYLocation location;
// Should be a local in main, shared with %parse-param.
int exit_status = 0;
@@ -121,13 +120,13 @@ if (isInputRange!R && is(ElementType!R : dchar))
// Skip initial spaces
while (!input.empty && input.front != '\n' && isWhite(input.front))
{
- start = end;
- end.column++;
+ location.begin = location.end;
+ location.end.column++;
input.popFront;
}
if (input.empty)
- return Symbol(TokenKind.YYEOF, YYLocation(startPos, endPos));
+ return Symbol(TokenKind.YYEOF, location);
// Numbers.
if (input.front.isNumber)
@@ -141,29 +140,29 @@ if (isInputRange!R && is(ElementType!R : dchar))
lenChars++;
copy.popFront;
}
- start = end;
- end.column += lenChars;
- return Symbol(TokenKind.NUM, semanticVal_.ival, YYLocation(startPos, endPos));
+ location.begin = location.end;
+ location.end.column += lenChars;
+ return Symbol(TokenKind.NUM, semanticVal_.ival, location);
}
// Individual characters
auto ch = input.front;
input.popFront;
- start = end;
- end.column++;
+ location.begin = location.end;
+ location.end.column++;
switch (ch)
{
- case '+': return Symbol(TokenKind.PLUS, YYLocation(startPos, endPos));
- case '-': return Symbol(TokenKind.MINUS, YYLocation(startPos, endPos));
- case '*': return Symbol(TokenKind.STAR, YYLocation(startPos, endPos));
- case '/': return Symbol(TokenKind.SLASH, YYLocation(startPos, endPos));
- case '(': return Symbol(TokenKind.LPAR, YYLocation(startPos, endPos));
- case ')': return Symbol(TokenKind.RPAR, YYLocation(startPos, endPos));
+ case '+': return Symbol(TokenKind.PLUS, location);
+ case '-': return Symbol(TokenKind.MINUS, location);
+ case '*': return Symbol(TokenKind.STAR, location);
+ case '/': return Symbol(TokenKind.SLASH, location);
+ case '(': return Symbol(TokenKind.LPAR, location);
+ case ')': return Symbol(TokenKind.RPAR, location);
case '\n':
{
- end.line++;
- end.column = 1;
- return Symbol(TokenKind.EOL, YYLocation(startPos, endPos));
+ location.end.line++;
+ location.end.column = 1;
+ return Symbol(TokenKind.EOL, location);
}
default: assert(0);
}
@@ -171,12 +170,12 @@ if (isInputRange!R && is(ElementType!R : dchar))
YYPosition startPos() const
{
- return start;
+ return location.begin;
}
YYPosition endPos() const
{
- return end;
+ return location.end;
}
}