banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Những thảo luận khác Cần giúp đỡ về Ragel  XML
  [Programming]   Cần giúp đỡ về Ragel 17/04/2013 00:37:08 (+0700) | #1 | 274982
[Avatar]
van7hu
Member

[Minus]    0    [Plus]
Joined: 03/07/2010 02:38:47
Messages: 63
Location: Thuỷ điện Hoà Bình
Offline
[Profile] [PM]
Chào mọi người,
mình mới bắt đầu học Ragel, tuy nhiên có phần này mình nghĩ cũng đơn giản, nhưng mò mẫm hàng tiếng mà vẫn chưa ra được

module: microscript.rl -- parse numbers from input
Code:
#include <stdio.h>
#include <inttypes.h>

%%{
	machine microscript;

	action clear_number {
		current_number = 0;
	}

	action record_digit {
		uint8_t digit = (*p) - '0';
		current_number = current_number*10 + digit;
	}

	action print_current_number {
		printf("%d\n", current_number);
	}

	number = ((digit @record_digit)+) >clear_number;
	whitespace = (space)+;

	main := number @ print_current_number (whitespace number @ print_current_number)*;
}%%


%% write data;

static uint8_t cs;
static uint8_t current_number;

void init_microscript(void) {
	%% write init;
}


void parse_microscript(const char *p, uint16_t len, uint8_t is_eof) {
	const char * pe = p + len;
	char * eof = is_eof? pe : ((char*)0);

	%% write exec;
}


Chương trình C sử dụng module microscript.pl: main.c
Code:
int 
main (int argc, char *argv[])
{
	char * buffer = "89 1 234  5|6 789a";
	init_microscript();
	parse_microscript(buffer, 10, 0);
	return 0;
}


Kêt quả mà mình mong muốn:
Code:
89
1
234


Tuy nhiên, kết quả thực tế:
Code:
8
89
1
2
23
234
https://www.facebook.com/buivan.thu.94
Được phục vụ cho tổ quốc, đó là một niềm vinh hạnh lớn lao..
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|