0
我想了解過去2天的Ragel,並且一直面臨着與Ragel語法相關的一些問題。我的目標是編寫一個解析器,以C++作爲宿主語言識別Regex命令。現在我想認識與分析器以下命令 - :LoadSdf [0-9]+
使用Ragel和C++編譯錯誤
下面是下面的代碼我想:
#include <iostream>
#include <string.h>
#include <stdio.h>
%%{
action done {
printf("done\n");
}
machine ldf;
main := (':'.'LoadSdf'.[0-9])@done;
}%%
%%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;
}
當我嘗試用命令ragel ldf.cpp
編譯 - 我得到以下錯誤:
ldf.cpp:10:1: this specification has no name, nor does any previous specification
ldf.cpp:16:31: action lookup of "done" failed
但是,如果我寫的直接代碼
main := (':'.'LoadSdf'.[0-9])@{printf("done\n");} //this compiles.
第二個問題我已經是當我嘗試寫我的狀態機如下 -
main := (':'.'LoadSdf'.[0-9])@{printf("done\n");} $err{printf("error : %c",fc);};
我想打印一個錯誤,當預期的命令不匹配。 上面的代碼用ragel命令編譯。 然而,當我嘗試用g++ ldf.c -o ldf
編譯 - 這提供了以下編譯器錯誤:
ldf.c: In function ‘int main(int, char**)’:
ldf.c:171:12: error: ‘eof’ was not declared in this scope
if (p == eof)
′
任何建議都歡迎。