我正在尝试使用 Ragel 编写一个简单的 Lexer,并将其输出为 Java 有效代码,但生成的代码无法编译。
这是我正在使用的 Lexer.rl:
public class Lexer {
%%{
machine simple_lexer;
integer = ('+'|'-')?[0-9]+;
float = ('+'|'-')?[0-9]+'.'[0-9]+;
assignment = '=';
identifier = [a-zA-Z][a-zA-Z_]+;
main := |*
integer => { emit("integer"); };
float => { emit("float"); };
assignment => { emit("assignment"); };
identifier => { emit("identifier"); };
space => { emit("space"); };
*|;
}%%
%% write data;
public static void emit(String token) {
System.out.println(token);
}
public static void main(String[] args) {
%% write init;
%% write exec;
}
}
生成的文件和错误输出在:https ://gist.github.com/3495276 (因为太大,这里贴不上 =S )
那么,我做错了什么?