Matching characters written as hex codes

Macy macyg... at gmail.com
Sun Jun 1 20:06:01 UTC 2008



On Jun 1, 10:13 pm, Adrian Thurston <thurs... at cs.queensu.ca> wrote:
> Macy wrote:
> > bom = 0xFE 0xFF @{ fprintf(stderr, "\nGot BOM UTF16"); };  -> doesn't
> > match
>
> This one should work.
>

This example doesn't work for me. Perhaps I'm doing something wrong...

-------------
(begin)-----------------------------------------------------
#include <stdio.h>

%%{

machine test;

action error { fprintf(stderr,"\nError!\n"); }
bom_utf16_le = 0xFE 0xFF @{ fprintf(stderr, "\nGot BOM UTF16 le"); };
bom_utf16_be = 0xFF 0xFE @{ fprintf(stderr, "\nGot BOM UTF16 be"); };

}%%

int main()
{
	int cs;
	char* buf = "\xFF\xFE";
	char* p = buf;
	char* pe = buf + 2;
	char* eof = pe;

	%%{
		write data;
		write init;
		main := (bom_utf16_le | bom_utf16_be) $err(error);
		write exec;
	}%%

    return 0;
}
-------------
(end)-----------------------------------------------------

$ ragel -C test.rl && gcc test.c -o test && ./test

Error!
$

rlgen-dot doesn't work for some reason, it crashes.

$ ragel -x test.rl > test.xml && rlgen-dot test.xml
digraph test {
        rankdir=LR;
        node [ shape = point ];
        ENTRY;
        en_1;
        eof_1;
        eof_2;
        eof_3;
        node [ shape = circle, height = 0.2 ];
        err_1 [ label=""];
        err_2 [ label=""];
        err_3 [ label=""];
        err_4 [ label=""];
        node [ fixedsize = true, height = 0.65, shape =
doublecircle ];
        4;
        node [ shape = circle ];
Segmentation fault (core dumped)

$ gdb `which rlgen-dot` core
[.............]
[New process 18840]
#0  0x0000000000404474 in Key (this=0x7fffc4b4b5d0, key=@0x0) at ../
common/common.h:52
52      ../common/common.h: No such file or directory.
        in ../common/common.h
(gdb) bt
#0  0x0000000000404474 in Key (this=0x7fffc4b4b5d0, key=@0x0) at ../
common/common.h:52
#1  0x000000000040311b in GraphvizDotGen::ONCHAR (this=0x1b6e270,
lowKey=@0x7fffc4b4b850, highKey=@0x7fffc4b4b840) at gvdotgen.cpp:136
#2  0x0000000000403924 in GraphvizDotGen::writeTransList
(this=0x1b6e270, state=0x1b6ea68) at gvdotgen.cpp:188
#3  0x0000000000404015 in GraphvizDotGen::writeDotFile
(this=0x1b6e270) at gvdotgen.cpp:284
#4  0x00000000004043e3 in GraphvizDotGen::finishRagelDef
(this=0x1b6e270) at gvdotgen.cpp:325
#5  0x0000000000412ea7 in Parser::parseLangEl (this=0x7fffc4b4d1d0,
type=195, token=0x7fffc4b4c0d0) at xmlparse.kl:132
#6  0x00000000004159ff in Parser::token (this=0x7fffc4b4d1d0,
tokenId=195, tok=@0x7fffc4b4c0d0) at xmlparse.kl:960
#7  0x0000000000415b0d in Parser::token (this=0x7fffc4b4d1d0,
tokenId=195, col=1, line=84) at xmlparse.kl:972
#8  0x0000000000410f47 in xml_parse (input=@0x1b68010,
fileName=0x7fffc4b4ec8e "test.xml", outputActive=false,
wantComplete=false) at xmlscan.rl:265
#9  0x0000000000402821 in main (argc=2, argv=0x7fffc4b4d488) at
main.cpp:225

$ ragel -v
Ragel State Machine Compiler version 6.2 March 2008
Copyright (c) 2001-2007 by Adrian Thurston




More information about the ragel-users mailing list