summaryrefslogtreecommitdiff
path: root/test/ragel.d/trans-go.lm
diff options
context:
space:
mode:
Diffstat (limited to 'test/ragel.d/trans-go.lm')
-rw-r--r--test/ragel.d/trans-go.lm345
1 files changed, 0 insertions, 345 deletions
diff --git a/test/ragel.d/trans-go.lm b/test/ragel.d/trans-go.lm
deleted file mode 100644
index d9543b33..00000000
--- a/test/ragel.d/trans-go.lm
+++ /dev/null
@@ -1,345 +0,0 @@
-include 'out-go.lm'
-
-global Out2: parser<out_go::out_go>
-
-parser<out_go::out_go> new_parser()
-{
- new P: parser<out_go::out_go>()
- Input: _input = P->gets()
- Input->auto_trim( true )
- return P
-}
-
-int rw_go_factor( Factor: indep::factor )
-{
- if match Factor [`first_token_char]
- {
- send Out2 "data\[ts\]"
- }
- else if match Factor [tk_ident `[ expr `]]
- {
- send Out2
- "[$Factor.tk_ident]\[ [rw_go_expr(Factor.expr)] \]
- }
- else if match Factor [tk_ident `( expr `)]
- {
- send Out2
- "[$Factor.tk_ident]( [rw_go_expr(Factor.expr)] )
- }
- elsif match Factor [`< type `> `( expr `)]
- {
- send Out2
- "( [rw_go_type(Factor.type)] ) ( [rw_go_expr(Factor.expr)] )
- }
- elsif match Factor [`( expr `)]
- {
- send Out2
- "( [rw_go_expr(Factor.expr)] )
- }
- elsif match Factor ['true']
- {
- send Out2 'true'
- }
- elsif match Factor ['false']
- {
- send Out2 'false'
- }
- elsif match Factor [`buffer]
- {
- send Out2
- "string ( buffer\[:blen\] )"
- }
- else
- {
- send Out2 [$Factor]
- }
-}
-
-void rw_go_type( Type: indep::type )
-{
- if match Type [`int]
- {
- send Out2 "int"
- }
- elsif match Type [`bool]
- {
- send Out2 "bool"
- }
- elsif match Type [`char]
- {
- send Out2 "byte"
- }
- elsif match Type [`ptr]
- {
- send Out2 "int"
- }
- elsif match Type [`byte]
- {
- send Out2 "unsigned char"
- }
-}
-
-void rw_go_abs_expr( Expr: indep::abs_expr )
-{
- if ( Expr.Op ) {
- send Out2
- "[rw_go_abs_expr(Expr.E1)] [$Expr.Op] [rw_go_abs_expr( Expr.E2 )]"
- }
- else {
- rw_go_factor( Expr.factor )
- }
-}
-
-void rw_go_expr( Expr: indep::expr )
-{
- AbsExpr: indep::abs_expr = indep::abs_comparative( Expr.comparative )
- rw_go_abs_expr( AbsExpr )
-}
-
-void rw_go_opt_array( OptArr: indep::opt_arr )
-{
- if OptArr.expr {
- send Out2 "\[[rw_go_expr( OptArr.expr )]\]"
- }
-}
-
-int rw_go_var_decl( VarDecl: indep::var_decl )
-{
- send Out2
- "var [$VarDecl.tk_ident] [rw_go_opt_array(VarDecl.opt_arr)] [rw_go_type( VarDecl.type )] ;
-}
-
-void rw_go_opt_sub( OptSub: indep::opt_sub )
-{
- if ( OptSub.expr )
- send Out2 "\[[rw_go_expr(OptSub.expr)]\]"
-}
-
-int rw_go_expr_stmt( ExprStmt: indep::expr_stmt )
-{
- if match ExprStmt [tk_ident opt_sub `= expr `;]
- {
- send Out2
- "[$ExprStmt.tk_ident rw_go_opt_sub(ExprStmt.opt_sub)] = [rw_go_expr(ExprStmt.expr)];
- }
- else if match ExprStmt [expr `;]
- {
- send Out2
- "[rw_go_expr(ExprStmt.expr)];
- }
-}
-
-int rw_go_if_stmt( IfStmt: indep::if_stmt )
-{
- send Out2
- "if ( [rw_go_expr( IfStmt.expr )] ) {
- " [rw_go_stmt_list( IfStmt._repeat_stmt )]"
-
- if ( IfStmt.opt_else._repeat_stmt ) {
- send Out2
- "} else {
- " [rw_go_stmt_list( IfStmt.opt_else._repeat_stmt )]"
- }
-
- send Out2
- "}
-}
-
-int rw_go_print_stmt( Stmt: indep::print_stmt )
-{
- if match Stmt [`print_int expr `;] {
- send Out2
- "fmt.Print( [rw_go_expr(Stmt.expr)] );
- }
- else if match Stmt [`print_buf `;]
- {
- send Out2
- "fmt.Print( string(buffer\[0:blen\]) );
- }
- else if match Stmt [`print_str expr `;]
- {
- send Out2
- "fmt.Print( [rw_go_expr( Stmt.expr )] );
- }
- else if match Stmt [`print_token `;]
- {
- send Out2
- "fmt.Print( data\[ts:te\] );
- }
- else if match Stmt [`print_off `;]
- {
- send Out2
- "fmt.Print( p );
- }
-}
-
-int rw_go_ragel_stmt( Stmt: indep::ragel_stmt )
-{
- send Out2
- "[Stmt]
-}
-
-void rw_go_buf_stmt( BufStmt: indep::buf_stmt )
-{
- switch BufStmt
- case [`buf_clear `( `) `;] {
- send Out2
- " blen = 0;
- }
- case [`buf_append `( `) `;] {
- send Out2
- " buffer\[blen\] = fc;
- " blen += 1;
- " buffer\[blen\] = 0;
- }
-}
-
-
-int rw_go_stmt( Stmt: indep::stmt )
-{
- if match Stmt [var_decl]
- rw_go_var_decl( Stmt.var_decl )
- else if match Stmt [expr_stmt]
- rw_go_expr_stmt( Stmt.expr_stmt )
- else if match Stmt [if_stmt]
- rw_go_if_stmt( Stmt.if_stmt )
- else if match Stmt [print_stmt]
- rw_go_print_stmt( Stmt.print_stmt )
- else if match Stmt [buf_stmt]
- rw_go_buf_stmt( Stmt.buf_stmt )
- else if match Stmt [ragel_stmt]
- rw_go_ragel_stmt( Stmt.ragel_stmt )
-}
-
-void rw_go_stmt_list( StmtList: indep::stmt* )
-{
- for Stmt: indep::stmt in repeat( StmtList )
- rw_go_stmt( Stmt )
-}
-
-int rw_go_action_block( ActionBlock: indep::action_block )
-{
- Out2 = new_parser()
-
- if match ActionBlock [`{ stmt* `}] {
- send Out2 [
- "{
- rw_go_stmt_list( ActionBlock._repeat_stmt )
- "}
- ]
- }
- else if match ActionBlock [`{ expr `}] {
- send Out2
- "{ [rw_go_expr( ActionBlock.expr )] }
- }
- send Out2 [] eos
-}
-
-void rw_go( Output: stream )
-{
- send Output
- "/*
- " * @LANG: go
-
- if ProhibitGenflags {
- send Output
- " * @PROHIBIT_GENFLAGS:[ProhibitGenflags]
- }
-
- send Output
- " * @GENERATED: true
- " */
- "
- "package main
- "import \"fmt\"
- "
-
- Init: indep::stmt* = RagelTree.Init
- for Stmt: indep::stmt in Init {
- if match Stmt [Decl: var_decl] {
- Out2 = new_parser()
- rw_go_var_decl( Decl )
- send Out2 [] eos
- send Output [$Out2->tree]
- }
- }
-
- Section: indep::section = RagelTree.section
- for Action: ragel::action_block in Section {
- # Reparse as lang-independent code.
- parse IndepActionBlock: indep::action_block[$Action]
-
- # Translate to specific language.
- rw_go_action_block( IndepActionBlock )
-
- # Reparse back to ragel action block.
- Action = parse ragel::action_block[Out2->tree]
- }
-
- prints( Output, '\n', Section, '\n' )
-
- send Output
- "var cs int;
- "var blen int;
- "var buffer \[1024\] byte;
- "var nfa_len int;
- "var nfa_count int;
- "var nfa_bp \[20\] struct { state int; p int; };
- "
- "%% write data;
- "
- "func prepare() {
-
- for Stmt: indep::stmt in Init {
- if match Stmt [ExprStmt: expr_stmt] {
- Out2 = new_parser()
- rw_go_expr_stmt( ExprStmt )
- send Out2 [] eos
- send Output [$Out2->tree]
- }
- }
-
- send Output
- " %% write init;
- "}
- "
- "func exec(data string) {
- " var p int = 0
- " var pe int = len(data)
-
- if NeedsEof {
- send Output
- " var eof int = pe
- }
-
- send Output
- " %% write exec;
- "}
- "func finish() {
- " if cs >= [MachineName.mn_word]_first_final {
- " fmt.Println(\"ACCEPT\")
- " } else {
- " fmt.Println(\"FAIL\")
- " }
- "}
-
- send Output
- ~var inp []string = []string {
-
- for InputString: indep::input_string in RagelTree {
- send Output [^InputString ",\n"]
- }
-
- send Output
- "};
- "
-
- send Output
- "func main() {
- " for _, data := range inp {
- " prepare()
- " exec(data)
- " finish()
- " }
- "}
-}