pnut
π₯ A Self-Compiling C Transpiler Targeting Human-Readable POSIX Shell
νμΌ νμκΈ°
μ΅μ’ λ²μ λ€μ΄λ‘λ (.zip)- examples.yml
- main.yml
- metrics.yml
- table.sh
- analyze-dynamic-var-results.py
- analyze-file-char-distribution.py
- evaluate-comp-option-impact.sh
- evaluate-one-pass-impact.sh
- measure-file-size.sh
- requirements.txt
- run.sh
- run.sh
- cat.c
- long-line-1000.txt
- long-line-10000.txt
- long-line-2000.txt
- long-line-20000.txt
- long-line-4000.txt
- long-line-5000.txt
- long-line-50000.txt
- long-line-6000.txt
- long-line-8000.txt
- run.sh
- memory-size-slowdown.c
- run.sh
- benchmark-bootstrap.sh
- benchmark-jammed.sh
- architecture_of_pnut.c
- c_to_shell_translation.c
- paper-SLE24.pdf
- presentation-SLE24.pdf
- single-pass.s
- thesis.pdf
- fcntl.h
- memory.h
- stdio.h
- stdlib.h
- unistd.h
- all-chars.sh
- base64.sh
- c4.sh
- cat.sh
- cp.sh
- echo.sh
- empty.sh
- fib.sh
- hello.sh
- non_zero.sh
- print-reverse.sh
- repl.sh
- reverse.sh
- select-file.sh
- sha256sum-stdin.sh
- sha256sum.sh
- sum-array.sh
- wc-stdin.sh
- wc.sh
- welcome.sh
- winterpi.sh
- all-chars.c
- base64.c
- c4.c
- cat.c
- cp.c
- echo.c
- empty.c
- fib.c
- hello.c
- non_zero.c
- posix-utils.sh
- prepare.sh
- print-reverse.c
- repl.c
- reverse.c
- select-file.c
- sha256sum-stdin.c
- sha256sum.c
- sum-array.c
- wc-stdin.c
- wc.c
- welcome.c
- winterpi.c
- bintools-base.c
- cat.c
- chmod.c
- cp.c
- crc.c
- mkdir.c
- puff.c
- puff.h
- sha256sum.c
- simple-patch.c
- ungz.c
- untar.c
- bash.sh
- README.md
- bash-i386-woody.sh
- bash-i386-woody.tar
- dash-i386-lenny.sh
- dash-i386-lenny.tar
- dash-i386-squeeze.sh
- dash-i386-squeeze.tar
- ksh-i386-sarge.sh
- ksh-i386-sarge.tar
- README.md
- utils.sh
- zsh-i386-sarge.sh
- zsh-i386-sarge.tar
- bintools-libc.c
- bootstrap.sh
- make-jammed.sh
- setup-rootfs.sh
- mman.h
- stat.h
- time.h
- types.h
- crt1.h
- crti.h
- ctype.h
- errno.h
- fcntl.h
- inttypes.h
- math.h
- pnut_lib.h
- setjmp.h
- signal.h
- stdarg.h
- stdio.h
- stdlib.h
- string.h
- time.h
- unistd.h
- mman.c
- crt1.c
- crti.c
- ctype.c
- errno.c
- math.c
- pnut_lib.c
- setjmp.c
- signal.c
- stdio.c
- stdlib.c
- string.c
- time.c
- unistd.c
- libc.c
- makefile
- test-libc.c
- case.sh
- lookup_table.sh
- run.sh
- subshell.sh
- assignment-in-arith.sh
- bench-cat.sh
- bench-puts.c
- bench-puts.sh
- cat-default.sh
- cat.sh
- dynamic-variables-code.sh
- dynamic-variables.sh
- echo.sh
- get_char.sh
- get_char_code_fast.sh
- get_char_code_slow.sh
- get_char_data.txt
- long-line-1000.txt
- long-line-10000.txt
- long-line-4000.txt
- long-line-5000.txt
- long-line-50000.txt
- num-comparison.sh
- run-bench-puts.sh
- string-concat-quoting.sh
- string-concat.sh
- string-length.sh
- string-pack-unpack-benchmark-code.sh
- string-pack-unpack-benchmark.sh
- variable-assignment.sh
- variable_name_length.sh
- adding_new_$_variables.sh
- arity.sh
- is_defined.sh
- local_var_as_param.sh
- multi-expression-posix.sh
- multi-expression.sh
- print_return.sh
- while_fun_call.sh
- enum-suite.c
- enum-suite.golden
- sha256sum.c
- sha256sum.golden
- malloc-free-simple-suite.c
- malloc-free-simple-suite.golden
- emit-all-chars.c
- emit-all-chars.golden
- file-with-newlines.txt
- read-newlines.c
- read-newlines.golden
- read-unicode.c
- read-unicode.golden
- unicode.txt
- if.c
- if.golden
- ifdef.c
- ifdef.golden
- include3.h
- include1.h
- include2.h
- include4.h
- include-bracket.c
- include-bracket.golden
- include-no-newline.c
- include-no-newline.golden
- include-no-newline.h
- include.c
- include.golden
- include1.h
- include2.h
- include3.h
- include4.h
- include5.h
- include6.h
- multiple-include.c
- multiple-include.golden
- multiple-include.h
- relative-include.c
- relative-include.golden
- builtin-stubbed.c
- builtin-stubbed.golden
- builtin.c
- builtin.golden
- fun-like.c
- fun-like.golden
- object-like.c
- object-like.golden
- recursion-limit-error.c
- recursion-limit-error.golden
- recursion-limit.c
- recursion-limit.golden
- self-reference.c
- self-reference.golden
- stringification.c
- stringification.golden
- token-pasting.c
- token-pasting.golden
- ack.c
- ack.golden
- argc.c
- argc.golden
- arith-indirect.c
- arith-indirect.golden
- arith.c
- arith.golden
- conditions.c
- conditions.golden
- empty.c
- empty.golden
- empty.txt
- enums.c
- enums.golden
- even-odd.c
- even-odd.golden
- fgetc.c
- fgetc.golden
- fib.c
- fib.golden
- fopen-empty.c
- fopen-empty.golden
- fopen-many.c
- fopen-many.golden
- fopen-trailing.c
- fopen-trailing.golden
- getchar.golden
- if.c
- if.golden
- increment.c
- increment.golden
- init.c
- init.golden
- initialization.c
- initialization.golden
- no-trailing.txt
- print.golden
- return.golden
- short-circuit.c
- short-circuit.golden
- string.c
- string.golden
- strlen.c
- strlen.golden
- struct-enum.c
- struct-enum.golden
- struct.c
- struct.golden
- switch.c
- switch.golden
- test.c
- test.golden
- test2.c
- test2.golden
- while-continue.c
- while-continue.golden
- while-fun-call.c
- while-fun-call.golden
- winter-pi2.c
- winter-pi2.golden
- global-simple.c
- global-simple.golden
- local-global-interaction-simple.c
- local-global-interaction-simple.golden
- local-simple.c
- local-simple.golden
- shadowing-globals.c
- shadowing-globals.golden
- comma.c
- comma.golden
- compound.c
- compound.golden
- do_while.c
- do_while.golden
- extern_vars.c
- extern_vars.golden
- for-empty.c
- for-empty.golden
- globals.c
- globals.golden
- inline.c
- inline.golden
- line_continuation.c
- line_continuation.golden
- logical-negation.c
- logical-negation.golden
- strings-with-nul.c
- strings-with-nul.golden
- switch.c
- switch.golden
- switch_double_break.c
- switch_double_break.golden
- switch_if.c
- switch_if.golden
- tcc-expansion.c
- tcc-expansion.golden
- void_cast.c
- void_cast.golden
- void_functions.c
- void_functions.golden
- negative-zero.c
- negative-zero.golden
- self-reference-macro-with-macro-args.c
- self-reference-macro-with-macro-args.golden
- literals.c
- literals.golden
- all-chars.txt
- printf.c
- printf.golden
- read-all-chars.c
- read-all-chars.golden
- add-sub.c
- add-sub.golden
- calls.c
- calls.golden
- comparisons.c
- comparisons.golden
- compound-assign.c
- compound-assign.golden
- control-flow.c
- control-flow.golden
- int64_util.h
- literals.c
- literals.golden
- mixed.c
- mixed.golden
- mul-div-rem.c
- mul-div-rem.golden
- narrow-compound-64bit.c
- narrow-compound-64bit.golden
- ptr-plus-long.c
- ptr-plus-long.golden
- shifts.c
- shifts.golden
- switch.c
- switch.golden
- ternary-assign-byval.c
- ternary-assign-byval.golden
- basic-return.c
- basic-return.golden
- chained-return.c
- chained-return.golden
- comma-lvalue.c
- comma-lvalue.golden
- loop-condition.c
- loop-condition.golden
- member-of-temp.c
- member-of-temp.golden
- temps-in-expr.c
- temps-in-expr.golden
- ternary-and-shortcircuit.c
- ternary-and-shortcircuit.golden
- anonymous-struct.c
- anonymous-struct.golden
- array-function-param.c
- array-function-param.golden
- goto.c
- goto.golden
- indirect-calls.c
- indirect-calls.golden
- initializers-global.c
- initializers-global.golden
- initializers-local.c
- initializers-local.golden
- integer-conversions.c
- integer-conversions.golden
- pointer-comparisons.c
- pointer-comparisons.golden
- record-of-functions.c
- record-of-functions.golden
- shift-signedness.c
- shift-signedness.golden
- sizeof.c
- sizeof.golden
- static_vars.c
- static_vars.golden
- struct-flexible-array.c
- struct-flexible-array.golden
- struct.c
- struct.golden
- switch.c
- switch.golden
- tagged-union.c
- tagged-union.golden
- typedef.c
- typedef.golden
- address_of_global.c
- address_of_global.golden
- address_of_local.c
- address_of_local.golden
- break_outside_loop.c
- break_outside_loop.golden
- continue_outside_loop.c
- continue_outside_loop.golden
- global_var_underscore.c
- global_var_underscore.golden
- initializer_nested.c
- initializer_nested.golden
- initializer_too_large.c
- initializer_too_large.golden
- initializer_too_large_str.c
- initializer_too_large_str.golden
- invalid_printf.c
- invalid_printf.golden
- local_array_arg.c
- local_array_arg.golden
- local_array_param.c
- local_array_param.golden
- local_struct_arg.c
- local_struct_arg.golden
- local_struct_param.c
- local_struct_param.golden
- local_var_shadowing.c
- local_var_shadowing.golden
- local_var_underscore.c
- local_var_underscore.golden
- shortcut_eval_outside_condition.c
- shortcut_eval_outside_condition.golden
- sizeof_array.c
- sizeof_array.golden
- sizeof_expr.c
- sizeof_expr.golden
- static_vars.c
- static_vars.golden
- struct_no_nested_array.c
- struct_no_nested_array.golden
- struct_no_nested_struct.c
- struct_no_nested_struct.golden
- switch_early_exit.c
- switch_early_exit.golden
- switch_fallthrough.c
- switch_fallthrough.golden
- switch_no_body.c
- switch_no_body.golden
- ternary_with_fun_call.c
- ternary_with_fun_call.golden
- var_IFS.c
- var_IFS.golden
- all-chars.txt
- printf.c
- printf.golden
- printf_runtime.c
- printf_runtime.golden
- read-all-chars.c
- read-all-chars.golden
- characters.c
- characters.golden
- goto.c
- goto.golden
- initializer.c
- initializer.golden
- nested_loops.c
- nested_loops.golden
- scoping.c
- scoping.golden
- struct.c
- struct.golden
- switch.c
- switch.golden
- cat.sh
- jam-text-only.sh
- jam.sh
- keywords.txt
- ls.sh
- more.sh
- perfect-hash.scm
- process-includes.sh
- sift.sh
- touch.sh
- wc.sh
- .gitignore
- arith64.c
- arm.c
- artifact.md
- awk-runtime.c
- awk.c
- debug.c
- Dockerfile
- elf.c
- env.c
- exe.c
- glo_decls.c
- LICENSE
- mach-o.c
- make-artifact.sh
- make-sh-runtime.c
- Makefile
- pnut-lib.c
- pnut.c
- README.md
- run-pnut-variant.sh
- run-tests.sh
- sh-runtime.c
- sh.c
- text.c
- woody.sh
- x86.c
# μ€μΉ κ°μ΄λ
1. μ½λ λ΄λ €λ°κΈ°
git clone https://github.com/udem-dlteam/pnut
κΉνλΈμμ νλ‘μ νΈ μ½λ μ 체λ₯Ό λ΄ μ»΄ν¨ν°λ‘ λ΄λ €λ°μ΅λλ€.
cd pnut
λ°©κΈ λ΄λ €λ°μ νλ‘μ νΈ ν΄λ μμΌλ‘ μ΄λν©λλ€.
2. Docker
μ¬μ μΆμ²μ¬μ μ€λΉλ¬Ό
- Git GitHubμμ νλ‘μ νΈ μ½λλ₯Ό λ΄λ €λ°μΌλ €λ©΄ νμν©λλ€.
- Docker Desktop 컨ν μ΄λλ₯Ό λΉλνκ³ μ€ννλ €λ©΄ νμν©λλ€. μ€μΉ ν μ€νν΄μ λ°±κ·ΈλΌμ΄λμ μΌλμΈμ.
docker build -t pnut .
Dockerfileμ κΈ°λ°μΌλ‘ μ€ν κ°λ₯ν μ΄λ―Έμ§λ₯Ό λΉλν©λλ€.
docker run -p 8080:80 pnut
λΉλλ μ΄λ―Έμ§λ₯Ό μ€μ 컨ν μ΄λλ‘ μ€νν©λλ€.
ν°λ―Έλμ docker compose ps λ₯Ό μ
λ ₯ν΄ μ»¨ν
μ΄λλ€μ΄ Up μνμΈμ§ νμΈνμΈμ. READMEμ ν¬νΈ λ²νΈκ° μ νμλ€λ©΄ λΈλΌμ°μ μμ http://localhost:ν¬νΈλ²νΈ λ‘ μ μν΄λ³΄μΈμ.
3. Python
μ¬μμ¬μ μ€λΉλ¬Ό
pip install -r analysis/requirements.txt
requirements.txt λ±μ λͺ μλ νμ΄μ¬ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ€μΉν©λλ€.
python <μ€νν νμΌλͺ
>.py # READMEμμ μ νν μ€ν νμΌλͺ
μ νμΈνμΈμ
νμ΄μ¬ μ€ν¬λ¦½νΈ(λλ λͺ¨λ)λ₯Ό μ€νν©λλ€.
μλ¬ λ©μμ§ μμ΄ μ€νλκ³ ν°λ―Έλμ μλ΄ λ¬Έκ΅¬κ° μΆλ ₯λλ©΄ μ μμ
λλ€.
4. Make
보ν΅μ¬μ μ€λΉλ¬Ό
- Git GitHubμμ νλ‘μ νΈ μ½λλ₯Ό λ΄λ €λ°μΌλ €λ©΄ νμν©λλ€.
- Make Linux/macOSλ λ³΄ν΅ κΈ°λ³Έ μ€μΉλμ΄ μμ΅λλ€. Windowsλ λ³λ μ€μΉ(μ: MSYS2, WSL)κ° νμν©λλ€.
make
μμ±λ λΉλ μ€μ μ λ°νμΌλ‘ μ€μ μ»΄νμΌμ μ§νν΄ μ€ν νμΌμ λ§λλλ€.
μλ¬ μμ΄ λλλ©΄ μ±κ³΅μ
λλ€. μμ±λ μ€ν νμΌμ μ§μ μ€νν΄λ³΄μΈμ.
// repository documentation
Was this content helpful?
(0 ratings)
