chakravala / Reduce.jl

Symbolic parser for Julia language term rewriting using REDUCE algebra

Home Page:http://www.reduce-algebra.com/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

unsupported parse on subscripts and superscripts

acsofie opened this issue · comments

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"

And, if run julia> :x₁+1, the program seems has endless loop.

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


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.