diff options
author | Adela Vais <adela.vais99@gmail.com> | 2020-12-10 23:27:53 +0200 |
---|---|---|
committer | Akim Demaille <akim.demaille@gmail.com> | 2020-12-21 06:54:35 +0100 |
commit | cc04459cfee92905a635c36958d66f0edb25a257 (patch) | |
tree | afd704a83036b90bbfdd8e8f09f494f8dcf53793 /examples | |
parent | ee4ec08513c3960bea38c14d143b62c70e81edd8 (diff) | |
download | bison-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.y | 41 |
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; } } |