summaryrefslogtreecommitdiff
path: root/test/ragel.d/trans-rust.lm
diff options
context:
space:
mode:
Diffstat (limited to 'test/ragel.d/trans-rust.lm')
-rw-r--r--test/ragel.d/trans-rust.lm352
1 files changed, 0 insertions, 352 deletions
diff --git a/test/ragel.d/trans-rust.lm b/test/ragel.d/trans-rust.lm
deleted file mode 100644
index 94a77035..00000000
--- a/test/ragel.d/trans-rust.lm
+++ /dev/null
@@ -1,352 +0,0 @@
-namespace trans_rust
-
-int factor( Factor: indep::factor )
-{
- if match Factor [`first_token_char]
- {
- send Out "data\[ts as usize\]"
- }
- else if match Factor [tk_ident `[ expr `]]
- {
- send Out
- "[$Factor.tk_ident]\[ [expr(Factor.expr)] \]
- }
- else if match Factor [tk_ident `( expr `)]
- {
- send Out
- "[$Factor.tk_ident]( [expr(Factor.expr)] )
- }
- elsif match Factor [`< type `> `( expr `)]
- {
- send Out
- "( ( [expr(Factor.expr)] ) as [type(Factor.type)] )
- }
- elsif match Factor [`( expr `)]
- {
- send Out
- "( [expr(Factor.expr)] )
- }
- elsif match Factor ['true']
- {
- send Out 'true'
- }
- elsif match Factor ['false']
- {
- send Out 'false'
- }
- elsif match Factor [`buffer]
- {
- send Out
- "buffer"
- }
- elsif match Factor [`blen]
- {
- send Out
- "buffer.len()"
- }
- else
- {
- send Out [$Factor]
- }
-}
-
-void type( Type: indep::type )
-{
- switch Type
- case [`int]
- {
- send Out "i32"
- }
- case [`bool]
- {
- send Out "bool"
- }
- case [`char]
- {
- send Out "u8"
- }
- case [`ptr]
- {
- send Out "i32
- }
- case [`byte]
- {
- send Out "unsigned char"
- }
-}
-
-void abs_expr( Expr: indep::abs_expr )
-{
- if ( Expr.Op ) {
- send Out
- "[abs_expr(Expr.E1)] [$Expr.Op] [abs_expr( Expr.E2 )]"
- }
- else {
- factor( Expr.factor )
- }
-}
-
-void expr( Expr: indep::expr )
-{
- AbsExpr: indep::abs_expr = indep::abs_comparative( Expr.comparative )
- abs_expr( AbsExpr )
-}
-
-void array_init( Size: int )
-{
- while ( Size > 1 ) {
- send Out
- "0, "
- Size = Size - 1
- }
-
- if ( Size > 0 ) {
- send Out
- "0"
- }
-}
-
-int var_decl( VarDecl: indep::var_decl )
-{
- if VarDecl.opt_arr.expr {
- send Out
- "static mut [VarDecl.tk_ident] : "
- "\[ [type( VarDecl.type )] ; [expr( VarDecl.opt_arr.expr )]\] = "
- "\[ [array_init( atoi($VarDecl.opt_arr.expr) )] \];
- }
- else if match VarDecl.type [`bool] {
- send Out
- "static mut [VarDecl.tk_ident] : [type( VarDecl.type )] = false;
- }
- else {
- send Out
- "static mut [VarDecl.tk_ident] : [type( VarDecl.type )] = 0;
- }
-}
-
-void opt_sub( OptSub: indep::opt_sub )
-{
- if ( OptSub.expr )
- send Out "\[[expr(OptSub.expr)]\]"
-}
-
-int expr_stmt( ExprStmt: indep::expr_stmt )
-{
- if match ExprStmt [tk_ident opt_sub `= expr `;]
- {
- send Out
- "[$ExprStmt.tk_ident opt_sub(ExprStmt.opt_sub)] = [expr(ExprStmt.expr)];
- }
- else if match ExprStmt [expr `;]
- {
- send Out
- "[expr(ExprStmt.expr)];
- }
-}
-
-int if_stmt( IfStmt: indep::if_stmt )
-{
- send Out
- "if ( [expr( IfStmt.expr )] )
- "{
- " [stmt_list( IfStmt._repeat_stmt )]
- "}
-
- if ( IfStmt.opt_else._repeat_stmt ) {
- send Out
- "else {
- " [stmt_list( IfStmt.opt_else._repeat_stmt )]
- "}
- }
-}
-
-int print_stmt( Stmt: indep::print_stmt )
-{
- switch Stmt
- case [`print_int expr `;] {
- send Out
- "print!( \"{}\", [expr(Stmt.expr)] );
- }
- case [`print_buf `;]
- {
- send Out
- "print!( \"{}\", buffer );
- }
- case [`print_str expr `;]
- {
- send Out
- "print!( \"{}\", [expr( Stmt.expr )] );
- }
- case [`print_token `;]
- {
- send Out
- "let s = match std::str::from_utf8(&data\[ts as usize .. te as usize\]) {
- " Ok(v) => v,
- " Err(e) => panic!(\"Invalid UTF-8 sequence: {}\", e),
- " };
- "print!( \"{}\", s );
- }
-}
-
-void buf_stmt( BufStmt: indep::buf_stmt )
-{
- switch BufStmt
- case [`buf_clear `( `) `;] {
- send Out
- " buffer = String::new();
- }
- case [`buf_append `( `) `;] {
- send Out
- " buffer.push( ( fc ) as char );
- }
-}
-
-
-int ragel_stmt( Stmt: indep::ragel_stmt )
-{
- send Out
- [$Stmt]
-}
-
-int stmt( Stmt: indep::stmt )
-{
- switch Stmt
- case [var_decl]
- var_decl( Stmt.var_decl )
- case [expr_stmt]
- expr_stmt( Stmt.expr_stmt )
- case [if_stmt]
- if_stmt( Stmt.if_stmt )
- case [print_stmt]
- print_stmt( Stmt.print_stmt )
- case [buf_stmt]
- buf_stmt( Stmt.buf_stmt )
- case [ragel_stmt]
- ragel_stmt( Stmt.ragel_stmt )
-}
-
-void stmt_list( StmtList: indep::stmt* )
-{
- for Stmt: indep::stmt in repeat( StmtList )
- stmt( Stmt )
-}
-
-int action_block( ActionBlock: indep::action_block )
-{
- Out = new parser<out_code::lines>()
- if match ActionBlock [`{ stmt* `}] {
- send Out
- "{[stmt_list( ActionBlock._repeat_stmt )]}
- }
- else if match ActionBlock [`{ expr `}] {
- send Out
- "{[expr( ActionBlock.expr )]}
- }
- send Out [] eos
-}
-
-void rust( Output: stream )
-{
- # Translate action blocks.
- Section: indep::section = RagelTree.section
- for Action: ragel::action_block in Section {
- # Reparse as lang-independent code.
- parse IndepActionBlock: indep::action_block[$Action]
- if ( !IndepActionBlock ) {
- print( error, '\n', Action )
- exit(1)
- }
-
- action_block( IndepActionBlock )
-
- # Reparse back to ragel action block.
- Action = parse ragel::action_block[$Out->tree]
- if ( !Action ) {
- print( error, '\n' )
- exit(1)
- }
- }
-
- send Output
- "//
- "// @LANG: rust
- "// @GENERATED: true
-
- if ProhibitGenflags {
- send Output
- "// @PROHIBIT_GENFLAGS:[ProhibitGenflags]
- }
-
- send Output
- "//
- "
-
- Init: indep::stmt* = RagelTree.Init
- for Stmt: indep::stmt in Init {
- if match Stmt [Decl: var_decl] {
- Out = new parser<out_code::lines>()
- var_decl( Decl )
- send Out [] eos
- send Output [Out->tree]
- }
- }
-
- send Output
- "
- "[Section]
- "
- "%% write data;
- "
- "unsafe fn m( s: String )
- "{
- " let data: &\[u8\] = s.as_bytes();
- " let mut p:i32 = 0;
- " let mut pe:i32 = s.len() as i32;
- " let mut eof:i32 = s.len() as i32;
- " let mut cs: i32 = 0;
- " let mut buffer = String::new();
- " let mut nfa_len:i32 = 0;
- " let mut nfa_count:i32 = 0;
- " let mut nfa_bp_state: \[i32; 20\] = \[0; 20\];
- " let mut nfa_bp_p: \[i32; 20\] = \[0; 20\];
-
- for Stmt: indep::stmt in Init {
- if match Stmt [ExprStmt: expr_stmt] {
- Out = new parser<out_code::lines>()
- expr_stmt( ExprStmt )
- send Out [] eos
- send Output [Out->tree]
- }
- }
-
- send Output
- "
- " %% write init;
- " %% write exec;
- "
- " if ( cs >= [MachineName.mn_word]_first_final ) {
- " println!( \"ACCEPT\" );
- " }
- " else {
- " println!( \"FAIL\" );
- " }
- "}
-
-
-
- send Output
- ~
- ~fn main()
- ~{
-
- for InputString: indep::input_string in RagelTree {
- send Output
- " unsafe { m( [^InputString].to_string() ); }
- }
-
- send Output
- ~}
- ~
-}
-
-end