bc: Implement the . operand - sbase - suckless unix tools
 (HTM) git clone git://git.suckless.org/sbase
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit c759756d2e47cf2737949d0007937e467a4825eb
 (DIR) parent fee2f025d0e921966786fc8b0212f55674d35469
 (HTM) Author: Roberto E. Vargas Caballero <k0ga@shike2.net>
       Date:   Tue, 25 Nov 2025 11:21:47 +0100
       
       bc: Implement the . operand
       
       While it is not specified in POSIX, all the bc implementations since
       70's store the last expression in the dot variable which can be used
       in later experssions.
       
       Diffstat:
         M bc.y                                |      12 +++++++++++-
       
       1 file changed, 11 insertions(+), 1 deletion(-)
       ---
 (DIR) diff --git a/bc.y b/bc.y
       @@ -70,6 +70,7 @@ int cflag, dflag, lflag, sflag;
        %token <str> STRING NUMBER
        %token <str> EQOP '+' '-' '*' '/' '%' '^' INCDEC
        %token HOME LOOP
       +%token DOT
        %token EQ
        %token LE
        %token GE
       @@ -204,6 +205,7 @@ expr    : nexpr
        
        nexpr   : NUMBER                {$$ = code(" %s", $1);}
                | ID                    {$$ = code("l%s", var($1));}
       +        | DOT                   {$$ = code("l.");}
                | SCALE                 {$$ = code("K");}
                | IBASE                 {$$ = code("I");}
                | OBASE                 {$$ = code("O");}
       @@ -567,6 +569,8 @@ follow(int next, int yes, int no)
        static int
        operand(int ch)
        {
       +        int peekc;
       +
                switch (ch) {
                case '\n':
                case '{':
       @@ -578,6 +582,12 @@ operand(int ch)
                case ',':
                case ';':
                        return ch;
       +        case '.':
       +                peekc = ungetc(getchar(), stdin);
       +                if (strchr(DIGITS, peekc))
       +                        return number(ch);
       +                yylval.str = ".";
       +                return DOT;
                case '"':
                        return string(ch);
                case '*':
       @@ -643,7 +653,7 @@ repeat:
                        yyerror("invalid input character");
                } else if (islower(ch)) {
                        return iden(ch);
       -        } else if (ch == '.' || strchr(DIGITS, ch)) {
       +        } else if (strchr(DIGITS, ch)) {
                        return number(ch);
                } else {
                        if (ch == '/') {