0
我是Ragel的新手,一直試圖解析正則表達式的特定模式。如果發現匹配,我想要執行動作done
,如果沒有匹配,即使對於任何單個字符丟失,也要執行parse_error
。如何讓Ragel執行不同的解析操作
這是我寫的代碼:
#include <iostream>
#include <string.h>
#include <stdio.h>
%%{
action done {
printf("done\n");
}
action parse_error {
printf("error : %c\n",fc);
}
machine ldf;
main := (':'.'LoadSdf'.[0-9]+.[a-zA-Z0-9_\-\.])@done | //execute done
(^(':'.'LoadSdf'.[0-9]+.[a-zA-Z0-9_\-\.])) $err(parse_error); //execute parse error for no match
}%%
%%write data;
int main(int argc, char** argv)
{
int cs;
if(argc > 1) {
char *p = argv[1];
char *pe = p+strlen(p) + 1;
%%write init;
%%write exec;
}
return 0;
}
我看到的現象是,當有正則表達式表達的完美匹配的行動done
和parse_error
都執行。
任何人都可以提供一些關於如何解決這種情況的提示?
最好修復[其他問題](http://stackoverflow.com/questions/ 43341913/compiling-errors-with-ragel-and-c),然後還提供一些測試用例來顯示行爲以及它與預期結果的不同之處。 –