diff options
author | Akim Demaille <akim.demaille@gmail.com> | 2022-01-15 10:28:16 +0100 |
---|---|---|
committer | Akim Demaille <akim.demaille@gmail.com> | 2022-06-15 07:55:13 +0200 |
commit | 6ee1494d6ec270a5832b0ce8e2e5f16cca16935d (patch) | |
tree | f9d38041ad4b84a92b9e3824d018c700547fcaa8 /examples | |
parent | a475c4d5c1fff75b31dcedf0124c521e573a5fc7 (diff) | |
download | bison-6ee1494d6ec270a5832b0ce8e2e5f16cca16935d.tar.gz |
doc: explain why location's "column" are defined vaguely
Suuggested by Frank Heckenbach.
<https://lists.gnu.org/r/bug-bison/2022-01/msg00000.html>
* doc/bison.texi (Location Type): Explain why location's "column" are
defined vaguely.
Show tab handling in ltcalc and calc++.
* examples/c/bistromathic/parse.y: Show tab handling.
* examples/c++/calc++/calc++.test,
* examples/c/bistromathic/bistromathic.test:
Check tab handling.
Diffstat (limited to 'examples')
-rwxr-xr-x | examples/c++/calc++/calc++.test | 15 | ||||
-rwxr-xr-x | examples/c/bistromathic/bistromathic.test | 23 | ||||
-rw-r--r-- | examples/c/bistromathic/parse.y | 7 |
3 files changed, 42 insertions, 3 deletions
diff --git a/examples/c++/calc++/calc++.test b/examples/c++/calc++/calc++.test index 318c0c83..868a2601 100755 --- a/examples/c++/calc++/calc++.test +++ b/examples/c++/calc++/calc++.test @@ -50,6 +50,21 @@ EOF run 1 'err: -:2.1: syntax error, unexpected end of file, expecting ( or identifier or number' +# Check handling of tabs. +cat >input <<EOF + *1 +EOF +run 1 'err: -:1.9: syntax error, unexpected *, expecting ( or identifier or number' +cat >input <<EOF + *2 +EOF +run 1 'err: -:1.9: syntax error, unexpected *, expecting ( or identifier or number' +cat >input <<EOF + *3 +EOF +run 1 'err: -:1.9: syntax error, unexpected *, expecting ( or identifier or number' + + # LAC finds many more tokens. cat >input <<EOF a := 1 diff --git a/examples/c/bistromathic/bistromathic.test b/examples/c/bistromathic/bistromathic.test index b46f996a..4a8efe44 100755 --- a/examples/c/bistromathic/bistromathic.test +++ b/examples/c/bistromathic/bistromathic.test @@ -366,3 +366,26 @@ err: 1.15: syntax error: expected - or ( or number or function or variable befor err: 1 | (1++2) + 3 + '' err: | ^ ' + +# Check handling of literal tabs. "Escape" them with a C-v, so that +# they are not processed as completion requests. +cat >input<<EOF + *1 + *2 + *3 +EOF +# readline processes the tabs itself, and replaces then with spaces. +run -n 0 '> *1 +> *2 +> *3 +> '' +err: 1.9: syntax error: expected end of file or - or ( or exit or number or function etc., before * +err: 1 | *1 +err: | ^ +err: 2.9: syntax error: expected end of file or - or ( or exit or number or function etc., before * +err: 2 | *2 +err: | ^ +err: 3.9: syntax error: expected end of file or - or ( or exit or number or function etc., before * +err: 3 | *3 +err: | ^ +' diff --git a/examples/c/bistromathic/parse.y b/examples/c/bistromathic/parse.y index 6b5adc9a..99db3540 100644 --- a/examples/c/bistromathic/parse.y +++ b/examples/c/bistromathic/parse.y @@ -308,14 +308,15 @@ yylex (const char **line, YYSTYPE *yylval, YYLTYPE *yylloc, { int c; - // Ignore white space, get first nonwhite character. + // Get next character, ignore white spaces. do { // Move the first position onto the last. yylloc->first_line = yylloc->last_line; yylloc->first_column = yylloc->last_column; - - yylloc->last_column += 1; c = *((*line)++); + // Tab characters go to the next column multiple of 8. + yylloc->last_column += + c == '\t' ? 8 - ((yylloc->last_column - 1) & 7) : 1; } while (c == ' ' || c == '\t'); switch (c) |