summaryrefslogtreecommitdiff
path: root/test/ragel.d/cppscan5.rl
diff options
context:
space:
mode:
Diffstat (limited to 'test/ragel.d/cppscan5.rl')
-rw-r--r--test/ragel.d/cppscan5.rl273
1 files changed, 0 insertions, 273 deletions
diff --git a/test/ragel.d/cppscan5.rl b/test/ragel.d/cppscan5.rl
deleted file mode 100644
index e4244129..00000000
--- a/test/ragel.d/cppscan5.rl
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * @LANG: d
- */
-
-/*
- * Test in and out state actions.
- */
-
-import std.c.stdio;
-import std.string;
-
-static const int TK_Dlit = 192;
-static const int TK_Slit = 193;
-static const int TK_Float = 194;
-static const int TK_Id = 195;
-static const int TK_NameSep = 197;
-static const int TK_Arrow = 211;
-static const int TK_PlusPlus = 212;
-static const int TK_MinusMinus = 213;
-static const int TK_ArrowStar = 214;
-static const int TK_DotStar = 215;
-static const int TK_ShiftLeft = 216;
-static const int TK_ShiftRight = 217;
-static const int TK_IntegerDecimal = 218;
-static const int TK_IntegerOctal = 219;
-static const int TK_IntegerHex = 220;
-static const int TK_EqualsEquals = 223;
-static const int TK_NotEquals = 224;
-static const int TK_AndAnd = 225;
-static const int TK_OrOr = 226;
-static const int TK_MultAssign = 227;
-static const int TK_DivAssign = 228;
-static const int TK_PercentAssign = 229;
-static const int TK_PlusAssign = 230;
-static const int TK_MinusAssign = 231;
-static const int TK_AmpAssign = 232;
-static const int TK_CaretAssign = 233;
-static const int TK_BarAssign = 234;
-static const int TK_DotDotDot = 240;
-static const int TK_Whitespace = 241;
-static const int TK_Comment = 242;
-
-class Scanner
-{
- int cs, act;
- const(char) *ts, te;
-
- void token( int tok )
- {
- const(char) *data = ts;
- long len = te - ts;
- printf( "<%i> ", tok );
- for ( int i = 0; i < len; i++ )
- printf( "%c", data[i] );
- printf( "\n" );
- }
-
- %%{
-
- machine Scanner;
-
- main := |*
-
- # Single and double literals.
- ( 'L'? "'" ( [^'\\\n] | /\\./ )* "'" )
- => { token( TK_Slit );};
- ( 'L'? '"' ( [^"\\\n] | /\\./ )* '"' )
- => { token( TK_Dlit );};
-
- # Identifiers
- ( [a-zA-Z_] [a-zA-Z0-9_]* )
- =>{ token( TK_Id );};
-
- # Floating literals.
- fract_const = digit* '.' digit+ | digit+ '.';
- exponent = [eE] [+\-]? digit+;
- float_suffix = [flFL];
-
- ( fract_const exponent? float_suffix? |
- digit+ exponent float_suffix? )
- => { token( TK_Float );};
-
- # Integer decimal. Leading part buffered by float.
- ( ( '0' | [1-9] [0-9]* ) [ulUL]{0,3} )
- => { token( TK_IntegerDecimal );};
-
- # Integer octal. Leading part buffered by float.
- ( '0' [0-9]+ [ulUL]{0,2} )
- => { token( TK_IntegerOctal );};
-
- # Integer hex. Leading 0 buffered by float.
- ( '0' ( 'x' [0-9a-fA-F]+ [ulUL]{0,2} ) )
- => { token( TK_IntegerHex );};
-
- # Only buffer the second item, first buffered by symbol. */
- '::' => {token( TK_NameSep );};
- '==' => {token( TK_EqualsEquals );};
- '!=' => {token( TK_NotEquals );};
- '&&' => {token( TK_AndAnd );};
- '||' => {token( TK_OrOr );};
- '*=' => {token( TK_MultAssign );};
- '/=' => {token( TK_DivAssign );};
- '%=' => {token( TK_PercentAssign );};
- '+=' => {token( TK_PlusAssign );};
- '-=' => {token( TK_MinusAssign );};
- '&=' => {token( TK_AmpAssign );};
- '^=' => {token( TK_CaretAssign );};
- '|=' => {token( TK_BarAssign );};
- '++' => {token( TK_PlusPlus );};
- '--' => {token( TK_MinusMinus );};
- '->' => {token( TK_Arrow );};
- '->*' => {token( TK_ArrowStar );};
- '.*' => {token( TK_DotStar );};
-
- # Three char compounds, first item already buffered. */
- '...' => { token( TK_DotDotDot );};
-
- # Single char symbols.
- ( punct - [_"'] ) => { token( ts[0] );};
-
- action comment {
- token( TK_Comment );
- }
-
- # Comments and whitespace.
- '/*' ( any* $0 '*/' @1 ) => comment;
- '//' ( any* $0 '\n' @1 ) => comment;
- ( any - 33..126 )+ => { token( TK_Whitespace );};
-
- *|;
-
- }%%
-
- %% write data noprefix;
-
- void init( )
- {
- %% write init;
- }
-
- void execute( const(char)* data, ulong len )
- {
- const(char) *p = data;
- const(char) *pe = data + len;
- const(char) *eof = pe;
-
- %% write exec;
- }
-
- // Indicate that there is no more data. Returns -1 if the machine finishes
- // in the error state and does not accept, 0 if the machine finishes
- // in any other non-accepting state and 1 if the machine finishes in an
- // accepting state.
- int finish( )
- {
- if ( cs == error )
- return -1;
- if ( cs >= first_final )
- return 1;
- return 0;
- }
-};
-
-static const int BUFSIZE = 12;
-
-void test( const(char) buf[] )
-{
- Scanner scanner = new Scanner();
- scanner.init();
-
- scanner.execute( buf.ptr, buf.length );
- if ( scanner.cs == Scanner.error ) {
- /* Machine failed before finding a token. */
- printf("PARSE ERROR\n");
- }
- scanner.finish();
-}
-
-int main()
-{
- test(
- "\"\\\"hi\" /*\n"
- "*/\n"
- "44 .44\n"
- "44. 44\n"
- "44 . 44\n"
- "44.44\n"
- "_hithere22"
- );
-
- test(
- "'\\''\"\\n\\d'\\\"\"\n"
- "hi\n"
- "99\n"
- ".99\n"
- "99e-4\n"
- "->*\n"
- "||\n"
- "0x98\n"
- "0x\n"
- "//\n"
- "/* * */"
- );
-
- test(
- "'\n"
- "'\n"
- );
-
- return 0;
-}
-
-##### OUTPUT #####
-<192> "\"hi"
-<241>
-<242> /*
-*/
-<241>
-
-<218> 44
-<241>
-<194> .44
-<241>
-
-<194> 44.
-<241>
-<218> 44
-<241>
-
-<218> 44
-<241>
-<46> .
-<241>
-<218> 44
-<241>
-
-<194> 44.44
-<241>
-
-<195> _hithere22
-<193> '\''
-<192> "\n\d'\""
-<241>
-
-<195> hi
-<241>
-
-<218> 99
-<241>
-
-<194> .99
-<241>
-
-<194> 99e-4
-<241>
-
-<214> ->*
-<241>
-
-<226> ||
-<241>
-
-<220> 0x98
-<241>
-
-<218> 0
-<195> x
-<241>
-
-<242> //
-
-<242> /* * */
-PARSE ERROR