Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kajizukataichi/sila
The simple transpiler infrastructure for every platform
https://github.com/kajizukataichi/sila
alt-js infrastructure javascript javascript-lang javascript-language js ruby ruby-language rubyist rubyists rust rust-crate rust-lang rust-language rust-library trans-compiler transpiler transpilers
Last synced: 2 months ago
JSON representation
The simple transpiler infrastructure for every platform
- Host: GitHub
- URL: https://github.com/kajizukataichi/sila
- Owner: KajizukaTaichi
- License: mit
- Created: 2024-07-16T06:29:20.000Z (5 months ago)
- Default Branch: master
- Last Pushed: 2024-07-27T02:33:15.000Z (5 months ago)
- Last Synced: 2024-10-12T13:21:54.113Z (2 months ago)
- Topics: alt-js, infrastructure, javascript, javascript-lang, javascript-language, js, ruby, ruby-language, rubyist, rubyists, rust, rust-crate, rust-lang, rust-language, rust-library, trans-compiler, transpiler, transpilers
- Language: Rust
- Homepage: https://crates.io/crates/sila-transpiler-infrastructure
- Size: 38.1 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Sila
The simple transpiler infrastructure for every platform.
But, now is support JavaScript, Ruby and Python. Other platforms are coming soon!## [Example](/examples/countup.rs)
```rust
use sila_transpiler_infrastructure::{
transpile_javascript, transpile_python, transpile_ruby, Block, Expr, Instruction, Library,
Operator, Type,
};fn main() {
let program: Block = vec![
Instruction::Function(
"show".to_string(),
vec!["count".to_string()],
vec![Instruction::Return(Some(Expr::Expr(vec![
Expr::Literal(Type::String("counter value is ".to_string())),
Expr::Operator(Operator::Add),
Expr::Library(Library::ToString, vec![Expr::Variable("count".to_string())]),
])))],
),
Instruction::Let("count".to_string(), Expr::Literal(Type::Integer(0))),
Instruction::TryError(
vec![Instruction::Let(
"limit".to_string(),
Expr::Library(
Library::ToInterger,
vec![Expr::Library(
Library::Input,
vec![Expr::Literal(Type::String("limit: ".to_string()))],
)],
),
)],
vec![Instruction::Let(
"limit".to_string(),
Expr::Literal(Type::Integer(10)),
)],
),
Instruction::While(
Expr::Expr(vec![
Expr::Variable("count".to_string()),
Expr::Operator(Operator::Less),
Expr::Variable("limit".to_string()),
]),
vec![
Instruction::Variable(
"count".to_string(),
Expr::Expr(vec![
Expr::Variable("count".to_string()),
Expr::Operator(Operator::Add),
Expr::Literal(Type::Integer(1)),
]),
),
Instruction::If(
Expr::Expr(vec![
Expr::Variable("count".to_string()),
Expr::Operator(Operator::Mod),
Expr::Literal(Type::Integer(2)),
Expr::Operator(Operator::Equal),
Expr::Literal(Type::Integer(0)),
]),
vec![Instruction::Continue],
None,
),
Instruction::Print(Expr::Call(
"show".to_string(),
vec![Expr::Variable("count".to_string())],
)),
],
),
];
println!("JavaScript:\n{}\n", transpile_javascript(program.clone()));
println!("Ruby:\n{}\n", transpile_ruby(program.clone()));
println!("Python:\n{}\n", transpile_python(program));
}
```
### Output
```
JavaScript:
// Sila transpiled this code
function show(count) {
return (`counter value is ` + String(count))
};
let count = 0;
try {
let limit = parseInt(prompt(`limit: `))
} catch {
let limit = 10
};
while (count < limit) {
count = (count + 1);
if (count % 2 == 0) {
continue
};
console.log(show(count))
}Ruby:
# Sila transpiled this code
def input(prompt)
print prompt
return gets.chomp
enddef show(count)
return ("counter value is " + String(count))
end
count = 0
begin
limit = Integer(input("limit: "))
rescue
limit = 10
end
while (count < limit) do
count = (count + 1)
if (count % 2 == 0)
next
end
puts show(count)
endPython:
# Sila transpiled this code
def show(count):
return ('counter value is ' + str(count))
count = 0
try:
limit = int(input('limit: '))
except:
limit = 10
while (count < limit):
count = (count + 1)
if (count % 2 == 0):
continue
print(show(count))
```