diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..e3c5c24 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 deathcap + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..bcca18c --- /dev/null +++ b/README.md @@ -0,0 +1,51 @@ +# transpile-c-to-js + +An experiment in transpiling C source code to JavaScript using [pycparser](https://github.com/eliben/pycparser) + +Unlike [emscriptem](https://github.com/kripken/emscripten), for example, the compiled output is not +low-level/asm.js but intended to resemble the high-level C source code as much as possible. +The resulting JavaScript output is meant to be syntactically valid, but will not meaningfully execute +without further manual porting efforts. + +Usage: + + sudo easy_install pycparser + python ptranspile.py hello.c + +Example C input: + +```c +#include + +int main(int argc, char **argv) { + int a = 1; + const double pi = 3.14159; + static char *s = "foo"; + + printf("Hello, world!\n"); + + if (a == 2) exit(1); + + return 0; +} +``` + +Example JavaScript output: + +```javascript +function main(argc, argv) +{ + let a = 1; + const pi = 3.14159; + let s = "foo"; + printf("Hello, world!\n"); + if (a === 2) + exit(1); + + return 0; +} +``` + +## License + +MIT