Quoted rational numbers
J, 25 bytes
(%-.)~/@(10^#&amp;&gt;)#.10#.&amp;&gt;]

Try it online!
Takes a boxed 2-item vector containing the digit vectors of \$x\$ and \$y\$, and returns a rational number. The digits must be given in extended precision. \$y\$ may be an empty vector. I guess it's pretty well golfed when Jelly is at 20 bytes :)
How it works
Uses the formula at the end of the challenge. If we define \$\#x\$ as the number of digits of \$x\$,
$$
z = 10^{\#y}, \quad w=10^{\#x}-1, \quad x'y = -\frac{z}{w}x+y,
$$
and observe that the result is the same as the 2-vector \$[x,y]\$ evaluated in base \$-\frac{z}{w}\$.
(%-.)~/@(10^#&amp;&gt;)#.10#.&amp;&gt;]    NB. Monadic train; input = (digits of x;digits of y)
                  10#.&amp;&gt;]    NB. Evaluate each in base 10 to get [x,y]
                #.           NB. Evaluate in base...
        (10^#&amp;&gt;)    NB. 10 raised to the power of length of each; [10^#x, 10^#y]
(%-.)~/@            NB. (10^#y) / (1 - 10^#x) = -z/w


J, 23 bytes
(%-.)~&amp;(10x^#)#.,&amp;{.&amp;&quot;.

Try it online!
Modification of Jonah's solution to use the same base trick. This one is a dyadic function accepting plain strings as its two args. One caveat is that eval(&quot;.) of an empty string is an empty vector, so we need to make it a 0 explicitly using {..