unsupported parse on subscripts and superscripts
acsofie opened this issue · comments
acsofie commented
some symbols like :x₁ (:x\_1<tab>) or :x¹ (:x\^1<tab>) have incorrect action.
julia> using SyntaxTree, Reduce
julia> @force using Reduce.Algebra
julia> :x₁
:x₁
julia> typeof(:x₁)
Symbol
julia> RExpr(:x₁)
Error showing value of type RExpr:
ERROR: Reduce:
Declare x operator ? (Y or N)
Type Y or N
at
Stacktrace:
[1] ReduceCheck at /home/user/.julia/packages/Reduce/m2Cjk/src/Reduce.jl:50 [inlined]
[2] read(::Reduce.PSL) at /home/user/.julia/packages/Reduce/m2Cjk/src/Reduce.jl:85
[3] rcall(::RExpr; on::Array{Symbol,1}, off::Array{Symbol,1}) at /home/user/.julia/packages/Reduce/m2Cjk/src/rexpr.jl:473
[4] show(::IOContext{REPL.Terminals.TTYTerminal}, ::MIME{Symbol("text/plain")}, ::RExpr) at /home/user/.julia/packages/Reduce/m2Cjk/src/rexpr.jl:127
[5] display(::REPL.REPLDisplay, ::MIME{Symbol("text/plain")}, ::Any) at /build/julia-CrxBG0/julia-1.5.3+dfsg/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:214
[6] display(::REPL.REPLDisplay, ::Any) at /build/julia-CrxBG0/julia-1.5.3+dfsg/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:218
[7] display(::Any) at ./multimedia.jl:328
[8] #invokelatest#1 at ./essentials.jl:710 [inlined]
[9] invokelatest at ./essentials.jl:709 [inlined]
[10] print_response(::IO, ::Any, ::Bool, ::Bool, ::Any) at /build/julia-CrxBG0/julia-1.5.3+dfsg/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:238
[11] print_response(::REPL.AbstractREPL, ::Any, ::Bool, ::Bool) at /build/julia-CrxBG0/julia-1.5.3+dfsg/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:223
[12] (::REPL.var"#do_respond#54"{Bool,Bool,REPL.var"#64#73"{REPL.LineEditREPL,REPL.REPLHistoryProvider},REPL.LineEditREPL,REPL.LineEdit.Prompt})(::Any, ::Any, ::Any) at /build/julia-CrxBG0/julia-1.5.3+dfsg/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:822
[13] #invokelatest#1 at ./essentials.jl:710 [inlined]
[14] invokelatest at ./essentials.jl:709 [inlined]
[15] run_interface(::REPL.Terminals.TextTerminal, ::REPL.LineEdit.ModalInterface, ::REPL.LineEdit.MIState) at /build/julia-CrxBG0/julia-1.5.3+dfsg/usr/share/julia/stdlib/v1.5/REPL/src/LineEdit.jl:2355
[16] run_frontend(::REPL.LineEditREPL, ::REPL.REPLBackendRef) at /build/julia-CrxBG0/julia-1.5.3+dfsg/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:1144
[17] (::REPL.var"#38#42"{REPL.LineEditREPL,REPL.REPLBackendRef})() at ./task.jl:356
julia> RExpr(:(x₁))
Error showing value of type RExpr:
ERROR: Reduce:
Declare x operator ? (Y or N)
Type Y or N
at
Stacktrace:
[1] ReduceCheck at /home/user/.julia/packages/Reduce/m2Cjk/src/Reduce.jl:50 [inlined]
[2] read(::Reduce.PSL) at /home/user/.julia/packages/Reduce/m2Cjk/src/Reduce.jl:85
[3] rcall(::RExpr; on::Array{Symbol,1}, off::Array{Symbol,1}) at /home/user/.julia/packages/Reduce/m2Cjk/src/rexpr.jl:473
[4] show(::IOContext{REPL.Terminals.TTYTerminal}, ::MIME{Symbol("text/plain")}, ::RExpr) at /home/user/.julia/packages/Reduce/m2Cjk/src/rexpr.jl:127
[5] display(::REPL.REPLDisplay, ::MIME{Symbol("text/plain")}, ::Any) at /build/julia-CrxBG0/julia-1.5.3+dfsg/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:214
[6] display(::REPL.REPLDisplay, ::Any) at /build/julia-CrxBG0/julia-1.5.3+dfsg/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:218
[7] display(::Any) at ./multimedia.jl:328
[8] #invokelatest#1 at ./essentials.jl:710 [inlined]
[9] invokelatest at ./essentials.jl:709 [inlined]
[10] print_response(::IO, ::Any, ::Bool, ::Bool, ::Any) at /build/julia-CrxBG0/julia-1.5.3+dfsg/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:238
[11] print_response(::REPL.AbstractREPL, ::Any, ::Bool, ::Bool) at /build/julia-CrxBG0/julia-1.5.3+dfsg/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:223
[12] (::REPL.var"#do_respond#54"{Bool,Bool,REPL.var"#64#73"{REPL.LineEditREPL,REPL.REPLHistoryProvider},REPL.LineEditREPL,REPL.LineEdit.Prompt})(::Any, ::Any, ::Any) at /build/julia-CrxBG0/julia-1.5.3+dfsg/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:822
[13] #invokelatest#1 at ./essentials.jl:710 [inlined]
[14] invokelatest at ./essentials.jl:709 [inlined]
[15] run_interface(::REPL.Terminals.TextTerminal, ::REPL.LineEdit.ModalInterface, ::REPL.LineEdit.MIState) at /build/julia-CrxBG0/julia-1.5.3+dfsg/usr/share/julia/stdlib/v1.5/REPL/src/LineEdit.jl:2355
[16] run_frontend(::REPL.LineEditREPL, ::REPL.REPLBackendRef) at /build/julia-CrxBG0/julia-1.5.3+dfsg/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:1144
[17] (::REPL.var"#38#42"{REPL.LineEditREPL,REPL.REPLBackendRef})() at ./task.jl:356
environment:
Linux 5.10.0-13-amd64 #1 SMP Debian 5.10.106-1 (2022-03-17) x86_64 GNU/Linux
Debian ⛬ julia/1.5.3+dfsg-3
[[Reduce]]
deps = ["AbstractTensors", "ForceImport", "LinearAlgebra", "REPL", "ReplMaker", "SyntaxTree"]
git-tree-sha1 = "8c2a1b94300d0a1a475fc651518cef24db1f0b79"
uuid = "93e0c654-6965-5f22-aba9-9c1ae6b3c259"
version = "1.2.12"
acsofie commented
And, if run julia> :x₁+1
, the program seems has endless loop.
acsofie commented
I tried more situation. It seems any special character will occur this error.
julia> using SyntaxTree, Reduce
julia> RExpr(:ab)
ab
julia> RExpr(:β)
β
julia> RExpr(:aβ)
Error showing value of type RExpr:
ERROR: Reduce:
Declare a operator ? (Y or N)
Type Y or N
at
Stacktrace:
[1] ReduceCheck at /home/chen/.julia/packages/Reduce/m2Cjk/src/Reduce.jl:50 [inlined]
[2] read(::Reduce.PSL) at /home/chen/.julia/packages/Reduce/m2Cjk/src/Reduce.jl:85
[3] rcall(::RExpr; on::Array{Symbol,1}, off::Array{Symbol,1}) at /home/chen/.julia/packages/Reduce/m2Cjk/src/rexpr.jl:473
[4] show(::IOContext{REPL.Terminals.TTYTerminal}, ::MIME{Symbol("text/plain")}, ::RExpr) at /home/chen/.julia/packages/Reduce/m2Cjk/src/rexpr.jl:127
[5] display(::REPL.REPLDisplay, ::MIME{Symbol("text/plain")}, ::Any) at /build/julia-CrxBG0/julia-1.5.3+dfsg/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:214
[6] display(::REPL.REPLDisplay, ::Any) at /build/julia-CrxBG0/julia-1.5.3+dfsg/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:218
[7] display(::Any) at ./multimedia.jl:328
[8] #invokelatest#1 at ./essentials.jl:710 [inlined]
[9] invokelatest at ./essentials.jl:709 [inlined]
[10] print_response(::IO, ::Any, ::Bool, ::Bool, ::Any) at /build/julia-CrxBG0/julia-1.5.3+dfsg/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:238
[11] print_response(::REPL.AbstractREPL, ::Any, ::Bool, ::Bool) at /build/julia-CrxBG0/julia-1.5.3+dfsg/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:223
[12] (::REPL.var"#do_respond#54"{Bool,Bool,REPL.var"#64#73"{REPL.LineEditREPL,REPL.REPLHistoryProvider},REPL.LineEditREPL,REPL.LineEdit.Prompt})(::Any, ::Any, ::Any) at /build/julia-CrxBG0/julia-1.5.3+dfsg/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:822
[13] #invokelatest#1 at ./essentials.jl:710 [inlined]
[14] invokelatest at ./essentials.jl:709 [inlined]
[15] run_interface(::REPL.Terminals.TextTerminal, ::REPL.LineEdit.ModalInterface, ::REPL.LineEdit.MIState) at /build/julia-CrxBG0/julia-1.5.3+dfsg/usr/share/julia/stdlib/v1.5/REPL/src/LineEdit.jl:2355
[16] run_frontend(::REPL.LineEditREPL, ::REPL.REPLBackendRef) at /build/julia-CrxBG0/julia-1.5.3+dfsg/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:1144
[17] (::REPL.var"#38#42"{REPL.LineEditREPL,REPL.REPLBackendRef})() at ./task.jl:356
Dream Scatter commented
No, this is not a bug, the upstream REDUCE language itself does not support these type of characters.
While the Reduce.jl parser could attempt to translate these subscripts or superscript symbols into regular integers, I will not bother modifying the parser to do that. If you want to try it you are welcome to, but I don't have time for such things anymore.