another arithmetic parser with variations on the theme

This commit is contained in:
Felix Dilke 2026-01-16 16:07:23 +00:00
parent e462724482
commit 41275dfc71
7 changed files with 175 additions and 33 deletions

View File

@ -1 +0,0 @@
/nix/store/yh4sq3dlkly5x6szw95xn5nlw4rn9xz3-ghc-shell-for-haskell-exps-0.1.0.0-0-env

View File

@ -0,0 +1 @@
/nix/store/10mznhvw5lmlnm4qk4fxkqf05zapc087-ghc-shell-for-haskell-exps-0.1.0.0-0-env

View File

@ -7,15 +7,15 @@ AR='ar'
export AR
AS='as'
export AS
BASH='/nix/store/rlq03x4cwf8zn73hxaxnx0zn5q9kifls-bash-5.3p3/bin/bash'
BASH='/nix/store/j8645yndikbrvn292zgvyv64xrrmwdcb-bash-5.3p3/bin/bash'
CC='gcc'
export CC
CONFIG_SHELL='/nix/store/rlq03x4cwf8zn73hxaxnx0zn5q9kifls-bash-5.3p3/bin/bash'
CONFIG_SHELL='/nix/store/j8645yndikbrvn292zgvyv64xrrmwdcb-bash-5.3p3/bin/bash'
export CONFIG_SHELL
CXX='g++'
export CXX
HOSTTYPE='x86_64'
HOST_PATH='/nix/store/yijhn548p2589pkybgvbhll09bqsxy0q-ncurses-6.5/bin:/nix/store/gdni20c8009xdz8gms6yn1r2hfhmk1jk-numactl-2.0.18/bin:/nix/store/imad8dvhp77h0pjbckp6wvmnyhp8dpgg-coreutils-9.8/bin:/nix/store/av4xw9f56xlx5pgv862wabfif6m1yc0a-findutils-4.10.0/bin:/nix/store/20axvl7mgj15m23jgmnq97hx37fgz7bk-diffutils-3.12/bin:/nix/store/drc7kang929jaza6cy9zdx10s4gw1z5p-gnused-4.9/bin:/nix/store/x3zjxxz8m4ki88axp0gn8q8m6bldybba-gnugrep-3.12/bin:/nix/store/y2wdhdcrffp9hnkzk06d178hq3g98jay-gawk-5.3.2/bin:/nix/store/yi3c5karhx764ham5rfwk7iynr8mjf6q-gnutar-1.35/bin:/nix/store/d471xb7sfbah076s8rx02i68zpxc2r5n-gzip-1.14/bin:/nix/store/qm9rxn2sc1vrz91i443rr6f0vxm0zd82-bzip2-1.0.8-bin/bin:/nix/store/3fmzbq9y4m9nk235il7scmvwn8j9zy3p-gnumake-4.4.1/bin:/nix/store/rlq03x4cwf8zn73hxaxnx0zn5q9kifls-bash-5.3p3/bin:/nix/store/qrwznp1ikdf0qw05wia2haiwi32ik5n0-patch-2.8/bin:/nix/store/v0rfdwhg6w6i0yb6dbry4srk6pnj3xp0-xz-5.8.1-bin/bin:/nix/store/paj6a1lpzp57hz1djm5bs86b7ci221r0-file-5.45/bin'
HOST_PATH='/nix/store/kpi3v5fl8hlgy5lagjvn6ayq78mla49k-ncurses-6.5/bin:/nix/store/n8f6dc226f3z0yz8b7yh2ksi5gx70mha-numactl-2.0.18/bin:/nix/store/iiishysy5bzkjrawxl4rld1s04qj0k0c-coreutils-9.8/bin:/nix/store/6hcyzg88adcz37hn5pslwb06ck6pnq07-findutils-4.10.0/bin:/nix/store/7ylvy12ylwy8wxya9i2ly8qkhiz7173r-diffutils-3.12/bin:/nix/store/rm3yhwgahfrmshmcrv6cr28x4rz7881s-gnused-4.9/bin:/nix/store/737jwbhw8ji13x9s88z3wpp8pxaqla92-gnugrep-3.12/bin:/nix/store/gh0ijwnyv6csn59yars8z8kxbnd31y8f-gawk-5.3.2/bin:/nix/store/l5ibq1yp8m7jibzgqbmpc46hkcnvv8fq-gnutar-1.35/bin:/nix/store/0hq8fc3ihp7clficpl72lxybfb23qvfc-gzip-1.14/bin:/nix/store/2xq4b1wjl6yklsqs86mf95lg9j8mbxvl-bzip2-1.0.8-bin/bin:/nix/store/bw02qy5hlr6a12p5f2apkk79204n20yh-gnumake-4.4.1/bin:/nix/store/j8645yndikbrvn292zgvyv64xrrmwdcb-bash-5.3p3/bin:/nix/store/mv1hg02434l28cf4vwg4qbrz2h967ms8-patch-2.8/bin:/nix/store/gq3243j1d8y6qgpcrgbbb0vxkbxzs0ix-xz-5.8.1-bin/bin:/nix/store/30k6wlj854gb3rw7ny2rj3fixn8xrx6p-file-5.45/bin'
export HOST_PATH
IFS='
'
@ -26,34 +26,34 @@ export LANG
LD='ld'
export LD
LINENO='76'
LOCALE_ARCHIVE='/nix/store/hjlkypp9lpxwzsjycpy7nqg2mnl7qhzv-glibc-locales-2.40-66/lib/locale/locale-archive'
LOCALE_ARCHIVE='/nix/store/64zw8gswdqli6d5jcklisic0f3xgjjdd-glibc-locales-2.40-66/lib/locale/locale-archive'
export LOCALE_ARCHIVE
MACHTYPE='x86_64-pc-linux-gnu'
NIX_BINTOOLS='/nix/store/xwydcyvlsa3cvssk0y5llgdhlhjvmqdm-binutils-wrapper-2.44'
NIX_BINTOOLS='/nix/store/4dh4138m8gbp56kh63j2pwgsfhf5l8v7-binutils-wrapper-2.44'
export NIX_BINTOOLS
NIX_BINTOOLS_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu='1'
export NIX_BINTOOLS_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu
NIX_BUILD_CORES='24'
export NIX_BUILD_CORES
NIX_CC='/nix/store/vr15iyyykg9zai6fpgvhcgyw7gckl78w-gcc-wrapper-14.3.0'
NIX_CC='/nix/store/myvv172x2am72534zgn9wx0qp5amq6a8-gcc-wrapper-14.3.0'
export NIX_CC
NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu='1'
export NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu
NIX_CFLAGS_COMPILE=' -frandom-seed=yh4sq3dlkl'
NIX_CFLAGS_COMPILE=' -frandom-seed=10mznhvw5l'
export NIX_CFLAGS_COMPILE
NIX_ENFORCE_NO_NATIVE='1'
export NIX_ENFORCE_NO_NATIVE
NIX_GHC='/nix/store/akjf6m9q6jj1xi422b18rlzsavihsn9z-ghc-9.10.3-with-packages/bin/ghc'
NIX_GHC='/nix/store/v6yy2qmxn5hnxnrrdy2wvddl4ifbksk0-ghc-9.10.3-with-packages/bin/ghc'
export NIX_GHC
NIX_GHCPKG='/nix/store/akjf6m9q6jj1xi422b18rlzsavihsn9z-ghc-9.10.3-with-packages/bin/ghc-pkg'
NIX_GHCPKG='/nix/store/v6yy2qmxn5hnxnrrdy2wvddl4ifbksk0-ghc-9.10.3-with-packages/bin/ghc-pkg'
export NIX_GHCPKG
NIX_GHC_DOCDIR='/nix/store/akjf6m9q6jj1xi422b18rlzsavihsn9z-ghc-9.10.3-with-packages/share/doc/ghc/html'
NIX_GHC_DOCDIR='/nix/store/v6yy2qmxn5hnxnrrdy2wvddl4ifbksk0-ghc-9.10.3-with-packages/share/doc/ghc/html'
export NIX_GHC_DOCDIR
NIX_GHC_LIBDIR='/nix/store/akjf6m9q6jj1xi422b18rlzsavihsn9z-ghc-9.10.3-with-packages/lib/ghc-9.10.3/lib'
NIX_GHC_LIBDIR='/nix/store/v6yy2qmxn5hnxnrrdy2wvddl4ifbksk0-ghc-9.10.3-with-packages/lib/ghc-9.10.3/lib'
export NIX_GHC_LIBDIR
NIX_HARDENING_ENABLE='bindnow format fortify fortify3 libcxxhardeningextensive libcxxhardeningfast pic relro stackclashprotection stackprotector strictoverflow zerocallusedregs'
export NIX_HARDENING_ENABLE
NIX_LDFLAGS='-rpath /home/felix/projects/pyrites/haskell-parsing/outputs/out/lib -L/nix/store/yijhn548p2589pkybgvbhll09bqsxy0q-ncurses-6.5/lib -L/nix/store/b9p0zpa93hwvh4d0r1rmgc2500yx2ldn-libffi-3.5.2/lib -L/nix/store/bkicgvyymba52ijm1z5zs96dsqqi59lp-elfutils-0.194/lib -L/nix/store/54jkwsavi3fdciqfyjmbilq0jhvv4jga-gmp-with-cxx-6.3.0/lib -L/nix/store/gdni20c8009xdz8gms6yn1r2hfhmk1jk-numactl-2.0.18/lib -L/nix/store/yijhn548p2589pkybgvbhll09bqsxy0q-ncurses-6.5/lib -L/nix/store/b9p0zpa93hwvh4d0r1rmgc2500yx2ldn-libffi-3.5.2/lib -L/nix/store/bkicgvyymba52ijm1z5zs96dsqqi59lp-elfutils-0.194/lib -L/nix/store/54jkwsavi3fdciqfyjmbilq0jhvv4jga-gmp-with-cxx-6.3.0/lib -L/nix/store/gdni20c8009xdz8gms6yn1r2hfhmk1jk-numactl-2.0.18/lib'
NIX_LDFLAGS='-rpath /home/felix/projects/pyrites/haskell-experiments/outputs/out/lib -L/nix/store/kpi3v5fl8hlgy5lagjvn6ayq78mla49k-ncurses-6.5/lib -L/nix/store/c86nvwib4x4w4lkd3qw2aw40a354b6yd-libffi-3.5.2/lib -L/nix/store/v6v4r40nfy7inyr36yckidhi6ngh0k6p-elfutils-0.194/lib -L/nix/store/z658zzyxfc8106bjl5svssvsjvk513yj-gmp-with-cxx-6.3.0/lib -L/nix/store/n8f6dc226f3z0yz8b7yh2ksi5gx70mha-numactl-2.0.18/lib -L/nix/store/kpi3v5fl8hlgy5lagjvn6ayq78mla49k-ncurses-6.5/lib -L/nix/store/c86nvwib4x4w4lkd3qw2aw40a354b6yd-libffi-3.5.2/lib -L/nix/store/v6v4r40nfy7inyr36yckidhi6ngh0k6p-elfutils-0.194/lib -L/nix/store/z658zzyxfc8106bjl5svssvsjvk513yj-gmp-with-cxx-6.3.0/lib -L/nix/store/n8f6dc226f3z0yz8b7yh2ksi5gx70mha-numactl-2.0.18/lib'
export NIX_LDFLAGS
NIX_NO_SELF_RPATH='1'
NIX_STORE='/nix/store'
@ -68,14 +68,14 @@ OLDPWD=''
export OLDPWD
OPTERR='1'
OSTYPE='linux-gnu'
PATH='/nix/store/akjf6m9q6jj1xi422b18rlzsavihsn9z-ghc-9.10.3-with-packages/bin:/nix/store/ck6g9qnipfxipqraq6avjqayf01cax7s-hspec-discover-2.11.14/bin:/nix/store/5si9l7s9w09xi1wnfpf5r85am2shxz0i-haskell-language-server-2.12.0.0/bin:/nix/store/qvnkv8qa1z18nj573541i8182hpb80b0-cabal-install-3.16.0.0/bin:/nix/store/8q2582rd22xp8jlcg1xn1w219q5lx5xa-patchelf-0.15.2/bin:/nix/store/vr15iyyykg9zai6fpgvhcgyw7gckl78w-gcc-wrapper-14.3.0/bin:/nix/store/kzq78n13l8w24jn8bx4djj79k5j717f1-gcc-14.3.0/bin:/nix/store/q6wgv06q39bfhx2xl8ysc05wi6m2zdss-glibc-2.40-66-bin/bin:/nix/store/imad8dvhp77h0pjbckp6wvmnyhp8dpgg-coreutils-9.8/bin:/nix/store/xwydcyvlsa3cvssk0y5llgdhlhjvmqdm-binutils-wrapper-2.44/bin:/nix/store/dc9vaz50jg7mibk9xvqw5dqv89cxzla3-binutils-2.44/bin:/nix/store/yijhn548p2589pkybgvbhll09bqsxy0q-ncurses-6.5/bin:/nix/store/gdni20c8009xdz8gms6yn1r2hfhmk1jk-numactl-2.0.18/bin:/nix/store/imad8dvhp77h0pjbckp6wvmnyhp8dpgg-coreutils-9.8/bin:/nix/store/av4xw9f56xlx5pgv862wabfif6m1yc0a-findutils-4.10.0/bin:/nix/store/20axvl7mgj15m23jgmnq97hx37fgz7bk-diffutils-3.12/bin:/nix/store/drc7kang929jaza6cy9zdx10s4gw1z5p-gnused-4.9/bin:/nix/store/x3zjxxz8m4ki88axp0gn8q8m6bldybba-gnugrep-3.12/bin:/nix/store/y2wdhdcrffp9hnkzk06d178hq3g98jay-gawk-5.3.2/bin:/nix/store/yi3c5karhx764ham5rfwk7iynr8mjf6q-gnutar-1.35/bin:/nix/store/d471xb7sfbah076s8rx02i68zpxc2r5n-gzip-1.14/bin:/nix/store/qm9rxn2sc1vrz91i443rr6f0vxm0zd82-bzip2-1.0.8-bin/bin:/nix/store/3fmzbq9y4m9nk235il7scmvwn8j9zy3p-gnumake-4.4.1/bin:/nix/store/rlq03x4cwf8zn73hxaxnx0zn5q9kifls-bash-5.3p3/bin:/nix/store/qrwznp1ikdf0qw05wia2haiwi32ik5n0-patch-2.8/bin:/nix/store/v0rfdwhg6w6i0yb6dbry4srk6pnj3xp0-xz-5.8.1-bin/bin:/nix/store/paj6a1lpzp57hz1djm5bs86b7ci221r0-file-5.45/bin'
PATH='/nix/store/v6yy2qmxn5hnxnrrdy2wvddl4ifbksk0-ghc-9.10.3-with-packages/bin:/nix/store/xpq3c9bhlr1iby8kchf918salbf3zdpj-hspec-discover-2.11.14/bin:/nix/store/pkym0fzf9fn58wbkg41xbsgw83ngv49y-haskell-language-server-2.12.0.0/bin:/nix/store/w0y1r4k85x6a7i65sqmn4gdpb3z73wiv-cabal-install-3.16.0.0/bin:/nix/store/axrdk0z4gwqv9kpql2lgqq42l37m3yd1-patchelf-0.15.2/bin:/nix/store/myvv172x2am72534zgn9wx0qp5amq6a8-gcc-wrapper-14.3.0/bin:/nix/store/m1k4nxs8r0fl0pjxqp5n37vxgms7gdlb-gcc-14.3.0/bin:/nix/store/ijmp8r14ivvzk5r95lwx49bbv089003g-glibc-2.40-66-bin/bin:/nix/store/iiishysy5bzkjrawxl4rld1s04qj0k0c-coreutils-9.8/bin:/nix/store/4dh4138m8gbp56kh63j2pwgsfhf5l8v7-binutils-wrapper-2.44/bin:/nix/store/v9zpzmigqkcjrw1jpf0zjc49y47cm55s-binutils-2.44/bin:/nix/store/kpi3v5fl8hlgy5lagjvn6ayq78mla49k-ncurses-6.5/bin:/nix/store/n8f6dc226f3z0yz8b7yh2ksi5gx70mha-numactl-2.0.18/bin:/nix/store/iiishysy5bzkjrawxl4rld1s04qj0k0c-coreutils-9.8/bin:/nix/store/6hcyzg88adcz37hn5pslwb06ck6pnq07-findutils-4.10.0/bin:/nix/store/7ylvy12ylwy8wxya9i2ly8qkhiz7173r-diffutils-3.12/bin:/nix/store/rm3yhwgahfrmshmcrv6cr28x4rz7881s-gnused-4.9/bin:/nix/store/737jwbhw8ji13x9s88z3wpp8pxaqla92-gnugrep-3.12/bin:/nix/store/gh0ijwnyv6csn59yars8z8kxbnd31y8f-gawk-5.3.2/bin:/nix/store/l5ibq1yp8m7jibzgqbmpc46hkcnvv8fq-gnutar-1.35/bin:/nix/store/0hq8fc3ihp7clficpl72lxybfb23qvfc-gzip-1.14/bin:/nix/store/2xq4b1wjl6yklsqs86mf95lg9j8mbxvl-bzip2-1.0.8-bin/bin:/nix/store/bw02qy5hlr6a12p5f2apkk79204n20yh-gnumake-4.4.1/bin:/nix/store/j8645yndikbrvn292zgvyv64xrrmwdcb-bash-5.3p3/bin:/nix/store/mv1hg02434l28cf4vwg4qbrz2h967ms8-patch-2.8/bin:/nix/store/gq3243j1d8y6qgpcrgbbb0vxkbxzs0ix-xz-5.8.1-bin/bin:/nix/store/30k6wlj854gb3rw7ny2rj3fixn8xrx6p-file-5.45/bin'
export PATH
PS4='+ '
RANLIB='ranlib'
export RANLIB
READELF='readelf'
export READELF
SHELL='/nix/store/rlq03x4cwf8zn73hxaxnx0zn5q9kifls-bash-5.3p3/bin/bash'
SHELL='/nix/store/j8645yndikbrvn292zgvyv64xrrmwdcb-bash-5.3p3/bin/bash'
export SHELL
SIZE='size'
export SIZE
@ -85,7 +85,7 @@ STRINGS='strings'
export STRINGS
STRIP='strip'
export STRIP
XDG_DATA_DIRS='/nix/store/akjf6m9q6jj1xi422b18rlzsavihsn9z-ghc-9.10.3-with-packages/share:/nix/store/qvnkv8qa1z18nj573541i8182hpb80b0-cabal-install-3.16.0.0/share:/nix/store/8q2582rd22xp8jlcg1xn1w219q5lx5xa-patchelf-0.15.2/share'
XDG_DATA_DIRS='/nix/store/v6yy2qmxn5hnxnrrdy2wvddl4ifbksk0-ghc-9.10.3-with-packages/share:/nix/store/w0y1r4k85x6a7i65sqmn4gdpb3z73wiv-cabal-install-3.16.0.0/share:/nix/store/axrdk0z4gwqv9kpql2lgqq42l37m3yd1-patchelf-0.15.2/share'
export XDG_DATA_DIRS
__structuredAttrs=''
export __structuredAttrs
@ -94,14 +94,14 @@ buildCommandPath='/build/.attr-0l2nkwhif96f51f4amnlf414lhl4rv9vh8iffyp431v6s28gs
export buildCommandPath
buildInputs=''
export buildInputs
builder='/nix/store/rlq03x4cwf8zn73hxaxnx0zn5q9kifls-bash-5.3p3/bin/bash'
builder='/nix/store/j8645yndikbrvn292zgvyv64xrrmwdcb-bash-5.3p3/bin/bash'
export builder
cmakeFlags=''
export cmakeFlags
configureFlags=''
export configureFlags
defaultBuildInputs=''
defaultNativeBuildInputs='/nix/store/8q2582rd22xp8jlcg1xn1w219q5lx5xa-patchelf-0.15.2 /nix/store/l2xk4ac1wx9c95kpp8vymv9r9yn57fvh-update-autotools-gnu-config-scripts-hook /nix/store/0y5xmdb7qfvimjwbq7ibg1xdgkgjwqng-no-broken-symlinks.sh /nix/store/cv1d7p48379km6a85h4zp6kr86brh32q-audit-tmpdir.sh /nix/store/85clx3b0xkdf58jn161iy80y5223ilbi-compress-man-pages.sh /nix/store/wgrbkkaldkrlrni33ccvm3b6vbxzb656-make-symlinks-relative.sh /nix/store/5yzw0vhkyszf2d179m0qfkgxmp5wjjx4-move-docs.sh /nix/store/fyaryjvghbkpfnsyw97hb3lyb37s1pd6-move-lib64.sh /nix/store/kd4xwxjpjxi71jkm6ka0np72if9rm3y0-move-sbin.sh /nix/store/pag6l61paj1dc9sv15l7bm5c17xn5kyk-move-systemd-user-units.sh /nix/store/cmzya9irvxzlkh7lfy6i82gbp0saxqj3-multiple-outputs.sh /nix/store/x8c40nfigps493a07sdr2pm5s9j1cdc0-patch-shebangs.sh /nix/store/cickvswrvann041nqxb0rxilc46svw1n-prune-libtool-files.sh /nix/store/xyff06pkhki3qy1ls77w10s0v79c9il0-reproducible-builds.sh /nix/store/z7k98578dfzi6l3hsvbivzm7hfqlk0zc-set-source-date-epoch-to-latest.sh /nix/store/pilsssjjdxvdphlg2h19p0bfx5q0jzkn-strip.sh /nix/store/vr15iyyykg9zai6fpgvhcgyw7gckl78w-gcc-wrapper-14.3.0'
defaultNativeBuildInputs='/nix/store/axrdk0z4gwqv9kpql2lgqq42l37m3yd1-patchelf-0.15.2 /nix/store/wy55v0yk13h90gcv0fffrisks128ziz1-update-autotools-gnu-config-scripts-hook /nix/store/0y5xmdb7qfvimjwbq7ibg1xdgkgjwqng-no-broken-symlinks.sh /nix/store/cv1d7p48379km6a85h4zp6kr86brh32q-audit-tmpdir.sh /nix/store/85clx3b0xkdf58jn161iy80y5223ilbi-compress-man-pages.sh /nix/store/wgrbkkaldkrlrni33ccvm3b6vbxzb656-make-symlinks-relative.sh /nix/store/5yzw0vhkyszf2d179m0qfkgxmp5wjjx4-move-docs.sh /nix/store/fyaryjvghbkpfnsyw97hb3lyb37s1pd6-move-lib64.sh /nix/store/kd4xwxjpjxi71jkm6ka0np72if9rm3y0-move-sbin.sh /nix/store/pag6l61paj1dc9sv15l7bm5c17xn5kyk-move-systemd-user-units.sh /nix/store/cmzya9irvxzlkh7lfy6i82gbp0saxqj3-multiple-outputs.sh /nix/store/x8c40nfigps493a07sdr2pm5s9j1cdc0-patch-shebangs.sh /nix/store/cickvswrvann041nqxb0rxilc46svw1n-prune-libtool-files.sh /nix/store/xyff06pkhki3qy1ls77w10s0v79c9il0-reproducible-builds.sh /nix/store/z7k98578dfzi6l3hsvbivzm7hfqlk0zc-set-source-date-epoch-to-latest.sh /nix/store/pilsssjjdxvdphlg2h19p0bfx5q0jzkn-strip.sh /nix/store/myvv172x2am72534zgn9wx0qp5amq6a8-gcc-wrapper-14.3.0'
depsBuildBuild=''
export depsBuildBuild
depsBuildBuildPropagated=''
@ -137,14 +137,14 @@ declare -a envHostHostHooks=('ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' )
declare -a envHostTargetHooks=('ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' )
declare -a envTargetTargetHooks=()
declare -a fixupOutputHooks=('if [ -z "${dontPatchELF-}" ]; then patchELF "$prefix"; fi' 'if [[ -z "${noAuditTmpdir-}" && -e "$prefix" ]]; then auditTmpdir "$prefix"; fi' 'if [ -z "${dontGzipMan-}" ]; then compressManPages "$prefix"; fi' '_moveLib64' '_moveSbin' '_moveSystemdUserUnits' 'patchShebangsAuto' '_pruneLibtoolFiles' '_doStrip' )
initialPath='/nix/store/imad8dvhp77h0pjbckp6wvmnyhp8dpgg-coreutils-9.8 /nix/store/av4xw9f56xlx5pgv862wabfif6m1yc0a-findutils-4.10.0 /nix/store/20axvl7mgj15m23jgmnq97hx37fgz7bk-diffutils-3.12 /nix/store/drc7kang929jaza6cy9zdx10s4gw1z5p-gnused-4.9 /nix/store/x3zjxxz8m4ki88axp0gn8q8m6bldybba-gnugrep-3.12 /nix/store/y2wdhdcrffp9hnkzk06d178hq3g98jay-gawk-5.3.2 /nix/store/yi3c5karhx764ham5rfwk7iynr8mjf6q-gnutar-1.35 /nix/store/d471xb7sfbah076s8rx02i68zpxc2r5n-gzip-1.14 /nix/store/qm9rxn2sc1vrz91i443rr6f0vxm0zd82-bzip2-1.0.8-bin /nix/store/3fmzbq9y4m9nk235il7scmvwn8j9zy3p-gnumake-4.4.1 /nix/store/rlq03x4cwf8zn73hxaxnx0zn5q9kifls-bash-5.3p3 /nix/store/qrwznp1ikdf0qw05wia2haiwi32ik5n0-patch-2.8 /nix/store/v0rfdwhg6w6i0yb6dbry4srk6pnj3xp0-xz-5.8.1-bin /nix/store/paj6a1lpzp57hz1djm5bs86b7ci221r0-file-5.45'
initialPath='/nix/store/iiishysy5bzkjrawxl4rld1s04qj0k0c-coreutils-9.8 /nix/store/6hcyzg88adcz37hn5pslwb06ck6pnq07-findutils-4.10.0 /nix/store/7ylvy12ylwy8wxya9i2ly8qkhiz7173r-diffutils-3.12 /nix/store/rm3yhwgahfrmshmcrv6cr28x4rz7881s-gnused-4.9 /nix/store/737jwbhw8ji13x9s88z3wpp8pxaqla92-gnugrep-3.12 /nix/store/gh0ijwnyv6csn59yars8z8kxbnd31y8f-gawk-5.3.2 /nix/store/l5ibq1yp8m7jibzgqbmpc46hkcnvv8fq-gnutar-1.35 /nix/store/0hq8fc3ihp7clficpl72lxybfb23qvfc-gzip-1.14 /nix/store/2xq4b1wjl6yklsqs86mf95lg9j8mbxvl-bzip2-1.0.8-bin /nix/store/bw02qy5hlr6a12p5f2apkk79204n20yh-gnumake-4.4.1 /nix/store/j8645yndikbrvn292zgvyv64xrrmwdcb-bash-5.3p3 /nix/store/mv1hg02434l28cf4vwg4qbrz2h967ms8-patch-2.8 /nix/store/gq3243j1d8y6qgpcrgbbb0vxkbxzs0ix-xz-5.8.1-bin /nix/store/30k6wlj854gb3rw7ny2rj3fixn8xrx6p-file-5.45'
mesonFlags=''
export mesonFlags
name='ghc-shell-for-haskell-exps-0.1.0.0-0-env'
export name
nativeBuildInputs='/nix/store/akjf6m9q6jj1xi422b18rlzsavihsn9z-ghc-9.10.3-with-packages /nix/store/5si9l7s9w09xi1wnfpf5r85am2shxz0i-haskell-language-server-2.12.0.0 /nix/store/qvnkv8qa1z18nj573541i8182hpb80b0-cabal-install-3.16.0.0'
nativeBuildInputs='/nix/store/v6yy2qmxn5hnxnrrdy2wvddl4ifbksk0-ghc-9.10.3-with-packages /nix/store/pkym0fzf9fn58wbkg41xbsgw83ngv49y-haskell-language-server-2.12.0.0 /nix/store/w0y1r4k85x6a7i65sqmn4gdpb3z73wiv-cabal-install-3.16.0.0'
export nativeBuildInputs
out='/home/felix/projects/pyrites/haskell-parsing/outputs/out'
out='/home/felix/projects/pyrites/haskell-experiments/outputs/out'
export out
outputBin='out'
outputDev='out'
@ -161,11 +161,11 @@ passAsFile='buildCommand'
export passAsFile
patches=''
export patches
pkg='/nix/store/vr15iyyykg9zai6fpgvhcgyw7gckl78w-gcc-wrapper-14.3.0'
pkg='/nix/store/myvv172x2am72534zgn9wx0qp5amq6a8-gcc-wrapper-14.3.0'
declare -a pkgsBuildBuild=()
declare -a pkgsBuildHost=('/nix/store/akjf6m9q6jj1xi422b18rlzsavihsn9z-ghc-9.10.3-with-packages' '/nix/store/y4zpai8n4lljkbd37lm91vgclwy5mss1-hspec-core-2.11.14' '/nix/store/5hm98p022frdgmfrlfzdaxfm0l2imgxc-ansi-terminal-1.1.3' '/nix/store/v40i9pjr6dk0d1h29ljrf11lxx3d571z-ansi-terminal-types-1.1.3' '/nix/store/rl33wldyly5rwr7x8i2lrwgm4dvs9i5j-colour-2.3.6' '/nix/store/0hp69aq6457kpm2abplgm578rppvifz4-call-stack-0.4.0' '/nix/store/87il3qdxaj7gvm44xy53xn2ygl50f43g-haskell-lexer-1.2.1' '/nix/store/2757psbiqvr2afznk0n73mncdpgn7jib-hspec-expectations-0.8.4' '/nix/store/20c3fvkbm68yam91lsxqwgz3027l8zrx-HUnit-1.6.2.0' '/nix/store/9z62vq67hn3q1h7h3g9z7vrgki53vj52-QuickCheck-2.15.0.1' '/nix/store/2w524dah1f344sppc7y9gm928r8j4p3l-random-1.2.1.3' '/nix/store/qwmgqkmvdigbbhc32aq4jqjlxfhjnh3b-splitmix-0.1.3.1' '/nix/store/b1i2xc46c5vsygxslad1fc8w83161fn8-quickcheck-io-0.2.0' '/nix/store/3xc5iiww5vhxn62z3wsi449332cyj6kn-tf-random-0.5' '/nix/store/xrz27qsmayzy18c80ckr4xzpjsn28n3f-primitive-0.9.1.0' '/nix/store/ck6g9qnipfxipqraq6avjqayf01cax7s-hspec-discover-2.11.14' '/nix/store/5si9l7s9w09xi1wnfpf5r85am2shxz0i-haskell-language-server-2.12.0.0' '/nix/store/qvnkv8qa1z18nj573541i8182hpb80b0-cabal-install-3.16.0.0' '/nix/store/8q2582rd22xp8jlcg1xn1w219q5lx5xa-patchelf-0.15.2' '/nix/store/l2xk4ac1wx9c95kpp8vymv9r9yn57fvh-update-autotools-gnu-config-scripts-hook' '/nix/store/0y5xmdb7qfvimjwbq7ibg1xdgkgjwqng-no-broken-symlinks.sh' '/nix/store/cv1d7p48379km6a85h4zp6kr86brh32q-audit-tmpdir.sh' '/nix/store/85clx3b0xkdf58jn161iy80y5223ilbi-compress-man-pages.sh' '/nix/store/wgrbkkaldkrlrni33ccvm3b6vbxzb656-make-symlinks-relative.sh' '/nix/store/5yzw0vhkyszf2d179m0qfkgxmp5wjjx4-move-docs.sh' '/nix/store/fyaryjvghbkpfnsyw97hb3lyb37s1pd6-move-lib64.sh' '/nix/store/kd4xwxjpjxi71jkm6ka0np72if9rm3y0-move-sbin.sh' '/nix/store/pag6l61paj1dc9sv15l7bm5c17xn5kyk-move-systemd-user-units.sh' '/nix/store/cmzya9irvxzlkh7lfy6i82gbp0saxqj3-multiple-outputs.sh' '/nix/store/x8c40nfigps493a07sdr2pm5s9j1cdc0-patch-shebangs.sh' '/nix/store/cickvswrvann041nqxb0rxilc46svw1n-prune-libtool-files.sh' '/nix/store/xyff06pkhki3qy1ls77w10s0v79c9il0-reproducible-builds.sh' '/nix/store/z7k98578dfzi6l3hsvbivzm7hfqlk0zc-set-source-date-epoch-to-latest.sh' '/nix/store/pilsssjjdxvdphlg2h19p0bfx5q0jzkn-strip.sh' '/nix/store/vr15iyyykg9zai6fpgvhcgyw7gckl78w-gcc-wrapper-14.3.0' '/nix/store/xwydcyvlsa3cvssk0y5llgdhlhjvmqdm-binutils-wrapper-2.44' )
declare -a pkgsBuildHost=('/nix/store/v6yy2qmxn5hnxnrrdy2wvddl4ifbksk0-ghc-9.10.3-with-packages' '/nix/store/3if09zz5yh2xp06k74df4ffllcq242v4-hspec-core-2.11.14' '/nix/store/15kpl1k04j2734jpxxn3822yj0l40j4n-ansi-terminal-1.1.3' '/nix/store/hg3dyhm276hkzqbp6grcaryq9db8yiq0-ansi-terminal-types-1.1.3' '/nix/store/86g9qx4iixnzfl2pn14mgfhjrc7ys3bp-colour-2.3.6' '/nix/store/l7wqc6ylsgxnryqq6adxy33f887yff38-call-stack-0.4.0' '/nix/store/8ca4l9p89fnj897pqkhqz8grgv67al3n-haskell-lexer-1.2.1' '/nix/store/y7zpz5zp7sr8fyb8g03hrp1h2nvyg6wl-hspec-expectations-0.8.4' '/nix/store/djlag105fka13zx06xk909grhzzd8sl4-HUnit-1.6.2.0' '/nix/store/vbgfxw3pjdq8k1w71wc0lf7ylp2c85ya-QuickCheck-2.15.0.1' '/nix/store/zpskiivq0xq3k45dcr697fgm2vkydcn1-random-1.2.1.3' '/nix/store/fpk42za9sgq0a2x3waizix007wq2s7m4-splitmix-0.1.3.1' '/nix/store/hq5260px20y1ym58rr8a0w1hfc31gkjd-quickcheck-io-0.2.0' '/nix/store/5l29zzwfq7qkya578zcsbqzm6vqpllrw-tf-random-0.5' '/nix/store/x87fdsm1a9ggy746dlsa21g1qysj0p2x-primitive-0.9.1.0' '/nix/store/xpq3c9bhlr1iby8kchf918salbf3zdpj-hspec-discover-2.11.14' '/nix/store/pkym0fzf9fn58wbkg41xbsgw83ngv49y-haskell-language-server-2.12.0.0' '/nix/store/w0y1r4k85x6a7i65sqmn4gdpb3z73wiv-cabal-install-3.16.0.0' '/nix/store/axrdk0z4gwqv9kpql2lgqq42l37m3yd1-patchelf-0.15.2' '/nix/store/wy55v0yk13h90gcv0fffrisks128ziz1-update-autotools-gnu-config-scripts-hook' '/nix/store/0y5xmdb7qfvimjwbq7ibg1xdgkgjwqng-no-broken-symlinks.sh' '/nix/store/cv1d7p48379km6a85h4zp6kr86brh32q-audit-tmpdir.sh' '/nix/store/85clx3b0xkdf58jn161iy80y5223ilbi-compress-man-pages.sh' '/nix/store/wgrbkkaldkrlrni33ccvm3b6vbxzb656-make-symlinks-relative.sh' '/nix/store/5yzw0vhkyszf2d179m0qfkgxmp5wjjx4-move-docs.sh' '/nix/store/fyaryjvghbkpfnsyw97hb3lyb37s1pd6-move-lib64.sh' '/nix/store/kd4xwxjpjxi71jkm6ka0np72if9rm3y0-move-sbin.sh' '/nix/store/pag6l61paj1dc9sv15l7bm5c17xn5kyk-move-systemd-user-units.sh' '/nix/store/cmzya9irvxzlkh7lfy6i82gbp0saxqj3-multiple-outputs.sh' '/nix/store/x8c40nfigps493a07sdr2pm5s9j1cdc0-patch-shebangs.sh' '/nix/store/cickvswrvann041nqxb0rxilc46svw1n-prune-libtool-files.sh' '/nix/store/xyff06pkhki3qy1ls77w10s0v79c9il0-reproducible-builds.sh' '/nix/store/z7k98578dfzi6l3hsvbivzm7hfqlk0zc-set-source-date-epoch-to-latest.sh' '/nix/store/pilsssjjdxvdphlg2h19p0bfx5q0jzkn-strip.sh' '/nix/store/myvv172x2am72534zgn9wx0qp5amq6a8-gcc-wrapper-14.3.0' '/nix/store/4dh4138m8gbp56kh63j2pwgsfhf5l8v7-binutils-wrapper-2.44' )
declare -a pkgsBuildTarget=()
declare -a pkgsHostHost=('/nix/store/yijhn548p2589pkybgvbhll09bqsxy0q-ncurses-6.5' '/nix/store/b9p0zpa93hwvh4d0r1rmgc2500yx2ldn-libffi-3.5.2' '/nix/store/bkicgvyymba52ijm1z5zs96dsqqi59lp-elfutils-0.194' '/nix/store/54jkwsavi3fdciqfyjmbilq0jhvv4jga-gmp-with-cxx-6.3.0' '/nix/store/gdni20c8009xdz8gms6yn1r2hfhmk1jk-numactl-2.0.18' )
declare -a pkgsHostHost=('/nix/store/kpi3v5fl8hlgy5lagjvn6ayq78mla49k-ncurses-6.5' '/nix/store/c86nvwib4x4w4lkd3qw2aw40a354b6yd-libffi-3.5.2' '/nix/store/v6v4r40nfy7inyr36yckidhi6ngh0k6p-elfutils-0.194' '/nix/store/z658zzyxfc8106bjl5svssvsjvk513yj-gmp-with-cxx-6.3.0' '/nix/store/n8f6dc226f3z0yz8b7yh2ksi5gx70mha-numactl-2.0.18' )
declare -a pkgsHostTarget=()
declare -a pkgsTargetTarget=()
declare -a postFixupHooks=('noBrokenSymlinksInAllOutputs' '_makeSymlinksRelativeInAllOutputs' '_multioutPropagateDev' )
@ -173,7 +173,7 @@ declare -a postUnpackHooks=('_updateSourceDateEpochFromSourceRoot' )
declare -a preConfigureHooks=('_multioutConfig' )
preConfigurePhases=' updateAutotoolsGnuConfigScriptsPhase'
declare -a preFixupHooks=('_moveToShare' '_multioutDocs' '_multioutDevs' )
prefix='/home/felix/projects/pyrites/haskell-parsing/outputs/out'
prefix='/home/felix/projects/pyrites/haskell-experiments/outputs/out'
declare -a propagatedBuildDepFiles=('propagated-build-build-deps' 'propagated-native-build-inputs' 'propagated-build-target-deps' )
propagatedBuildInputs=''
export propagatedBuildInputs
@ -181,11 +181,11 @@ declare -a propagatedHostDepFiles=('propagated-host-host-deps' 'propagated-build
propagatedNativeBuildInputs=''
export propagatedNativeBuildInputs
declare -a propagatedTargetDepFiles=('propagated-target-target-deps' )
shell='/nix/store/rlq03x4cwf8zn73hxaxnx0zn5q9kifls-bash-5.3p3/bin/bash'
shell='/nix/store/j8645yndikbrvn292zgvyv64xrrmwdcb-bash-5.3p3/bin/bash'
export shell
shellHook='unset TEMP TMP TEMPDIR TMPDIR'
export shellHook
stdenv='/nix/store/s3w5m3spa1g71hx0yb82lvk6394j3w5j-stdenv-linux'
stdenv='/nix/store/45wimpzmh2rkgagv1r42q9v73cpdfr58-stdenv-linux'
export stdenv
strictDeps=''
export strictDeps
@ -2101,7 +2101,7 @@ updateAutotoolsGnuConfigScriptsPhase ()
for f in $(find . -type f -name "$script");
do
echo "Updating Autotools / GNU config script to a newer upstream version: $f";
cp -f "/nix/store/1kzclixw4c13wxin0b6cij1zykvwp0wb-gnu-config-2024-01-01/$script" "$f";
cp -f "/nix/store/yhwnzyhfqd9ficmxmbbryp2s8ymkzmdf-gnu-config-2024-01-01/$script" "$f";
done;
done
}

View File

@ -79,12 +79,13 @@ test-suite haskell-exps-test
-- Test dependencies.
build-depends: base, hspec, langfeatures, megaparsec
other-modules: Test.OlogsSpec,
Test.SimpleParserSpec
Test.SimpleParserSpec,
Test.ArithmeticParserSpec
library langfeatures
build-depends: base, containers, megaparsec, parser-combinators
build-depends: base, containers, megaparsec, parser-combinators, text
hs-source-dirs: src
exposed-modules: Ologs, SimpleParser
exposed-modules: Ologs, SimpleParser, ArithmeticParser
ghc-options: -Wall
executable haskell-experiments

View File

@ -0,0 +1,111 @@
{-# LANGUAGE OverloadedStrings #-}
module ArithmeticParser where
import Text.Megaparsec
import Text.Megaparsec.Char
import qualified Text.Megaparsec.Char.Lexer as L
import Data.Void
import Data.Text (Text)
import qualified Data.Text as T
-- Type aliases for convenience
type Parser = Parsec Void Text
-- ┌───────────────────────────────┐
-- │ AST Definition │
-- └───────────────────────────────┘
data Expr
= ENumber Integer -- 42, -7, etc.
| EAdd Expr Expr
| ESub Expr Expr
| EMul Expr Expr
| EDiv Expr Expr
deriving (Show, Eq)
-- ┌───────────────────────────────┐
-- │ Basic lexemes │
-- └───────────────────────────────┘
-- Skip spaces & newlines
sc :: Parser ()
sc = L.space space1 lineComment blockComment
where
lineComment = L.skipLineComment "--"
blockComment = L.skipBlockComment "{-" "-}"
-- Lexeme: consume sc after token
lexeme :: Parser a -> Parser a
lexeme = L.lexeme sc
-- Symbols we care about
symbol :: Text -> Parser Text
symbol = L.symbol sc
parens :: Parser a -> Parser a
parens = between (symbol "(") (symbol ")")
integer :: Parser Integer
integer = lexeme L.decimal
signedInteger :: Parser Integer
signedInteger = L.signed sc integer
-- ┌───────────────────────────────┐
-- │ Expression levels │
-- └───────────────────────────────┘
-- Lowest precedence: numbers & parenthesized expressions
term :: Parser Expr
term = number
<|> parens expr
number :: Parser Expr
number = ENumber <$> signedInteger
-- Multiplication & division (left-associative)
factor :: Parser Expr
factor = term `chainl1` mulOrDiv
where
mulOrDiv = EMul <$ symbol "*"
<|> EDiv <$ symbol "/"
-- Addition & subtraction (left-associative)
expr :: Parser Expr
expr = factor `chainl1` addOrSub
where
addOrSub = EAdd <$ symbol "+"
<|> ESub <$ symbol "-"
-- ┌───────────────────────────────┐
-- │ Main parser │
-- └───────────────────────────────┘
parseExpr :: Text -> Either (ParseErrorBundle Text Void) Expr
parseExpr input =
parse (sc *> expr <* eof) "<input>" input
-- ┌───────────────────────────────┐
-- │ Helpful chainl1 alias │
-- └───────────────────────────────┘
chainl1 :: Parser a -> Parser (a -> a -> a) -> Parser a
chainl1 p op = do
x <- p
rest x
where
rest x = (do f <- op; y <- p; rest (f x y)) <|> pure x
-- ┌───────────────────────────────┐
-- │ Examples │
-- └───────────────────────────────┘
examples :: [(Text, Maybe Expr)]
examples =
[ ("42", Just $ ENumber 42)
, ("-7 + 3", Just $ EAdd (ENumber (-7)) (ENumber 3))
, ("2 * (3 + 4)", Just $ EMul (ENumber 2) (EAdd (ENumber 3) (ENumber 4)))
, ("10 - 2 * 3", Just $ ESub (ENumber 10) (EMul (ENumber 2) (ENumber 3)))
, ("(8 / 2) + 1", Just $ EAdd (EDiv (ENumber 8) (ENumber 2)) (ENumber 1))
, ("", Nothing)
, ("5 +", Nothing) -- incomplete
, ("2 ** 3", Nothing) -- ** not supported
]

View File

@ -3,11 +3,11 @@ import Test.Hspec
import qualified Test.OlogsSpec as Ologs
import qualified Test.SimpleParserSpec as SimpleParserSpec
--import Test.FooSpec
import qualified Test.ArithmeticParserSpec as ArithmeticParserSpec
main :: IO ()
main = hspec $ do
describe "Ologs" Ologs.spec
describe "SimpleParser" SimpleParserSpec.spec
-- describe "My amazing tests" [ FastLaneSpec FooSpec ]
describe "ArithmeticParser" ArithmeticParserSpec.spec

View File

@ -0,0 +1,30 @@
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE OverloadedRecordDot #-}
{-# HLINT ignore "Use const" #-}
{-# HLINT ignore "Unused LANGUAGE pragma" #-}
{-# HLINT ignore "Avoid lambda" #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE NoFieldSelectors #-}
{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-}
{-# LANGUAGE TypeApplications #-}
module Test.ArithmeticParserSpec where
import Test.Hspec
import ArithmeticParser
spec :: Spec
spec = do
describe "evaluate expressions" $ do
it "with basic arithmetic on literals" $ do
parseExpr "42" `shouldBe` Right (ENumber 42)
parseExpr "-7 + 3" `shouldBe` Right ( EAdd (ENumber (-7)) (ENumber 3))
parseExpr "2 * (3 + 4)" `shouldBe` Right ( EMul (ENumber 2) (EAdd (ENumber 3) (ENumber 4)))
parseExpr "10 - 2 * 3" `shouldBe` Right (ESub (ENumber 10) (EMul (ENumber 2) (ENumber 3)))
parseExpr "(8 / 2) + 1" `shouldBe` Right (EAdd (EDiv (ENumber 8) (ENumber 2)) (ENumber 1))
parseExpr "2 + 3 * (10 - 4)" `shouldBe` Right (EAdd (ENumber 2) (EMul (ENumber 3) (ESub (ENumber 10) (ENumber 4))))