[ragel-users] Can someone supply a Simple example of C# Ragel State machine code

Adrian Thurston thurston at complang.org
Sun Jun 29 15:01:53 UTC 2014


This was created by the C# test case translator. You need TXL and GMCS 
in order for the C# test cases to be created.

-Adrian

On 14-05-30 03:39 PM, Jerry wrote:
> I am attempting to use QFSM which outputs in Ragel but is C based so I
> need to see if I can create a template for easy conversion of the QFSM
> Ragel output to C#. A simple example would be a great start.
>
> Thanks
>
> Jerry
>
>
> _______________________________________________
> ragel-users mailing list
> ragel-users at complang.org
> http://www.complang.org/mailman/listinfo/ragel-users
>
-------------- next part --------------
/*
 * @LANG: csharp
 * @GENERATED: yes
 */
using System;
// Disables lots of warnings that appear in the test suite
#pragma warning disable 0168, 0169, 0219, 0162, 0414
namespace Test {
class atoi1_csharp
{
	bool neg;
	int val;
	%%{
	    machine atoi1_csharp;
	    action begin {
	        neg = false;
	        val = 0;
	    }
	    action see_neg {
	        neg = true;
	    }
	    action add_digit {
	        val = val * 10 + (fc - 48);
	    }
	    action finish {
	        if (neg)
	        {
	            val = - 1 * val;
	        }
	    }
	    action print {
	        Console.Write (val);
	        Console.Write ("\n");
	    }
	    atoi = (('-' @ see_neg | '+') ? (digit @ add_digit) +) > begin % finish;
	    main := atoi '\n' @ print;
	}%%

	int cs;
	%% write data;

	void init()
	{
		val = 0;
		neg = false;
		%% write init;
	}

	void exec( char[] data, int len )
	{
		int p = 0;
		int pe = len;
		int eof = len;
		string _s;
		%% write exec;
	}

	void finish( )
	{
		if ( cs >= atoi1_csharp_first_final )
			Console.WriteLine( "ACCEPT" );
		else
			Console.WriteLine( "FAIL" );
	}

	static readonly string[] inp = {
		"1\n",
		"12\n",
		"222222\n",
		"+2123\n",
		"213 3213\n",
		"-12321\n",
		"--123\n",
		"-99\n",
		" -3000\n",
	};

	static readonly int inplen = 9;

	public static void Main (string[] args)
	{
		atoi1_csharp machine = new atoi1_csharp();
		for ( int i = 0; i < inplen; i++ ) {
			machine.init();
			machine.exec( inp[i].ToCharArray(), inp[i].Length );
			machine.finish();
		}
	}
}
}
/* _____OUTPUT_____
1
ACCEPT
12
ACCEPT
222222
ACCEPT
2123
ACCEPT
FAIL
-12321
ACCEPT
FAIL
-99
ACCEPT
FAIL
_____OUTPUT_____ */
-------------- next part --------------
_______________________________________________
ragel-users mailing list
ragel-users at complang.org
http://www.complang.org/mailman/listinfo/ragel-users


More information about the ragel-users mailing list