C ragel如何从文件中读取源代码?
我不知道ragel是如何从文件中读取源代码的。我看到的所有例子都是从stdin读来的C ragel如何从文件中读取源代码?,c,ragel,C,Ragel,我不知道ragel是如何从文件中读取源代码的。我看到的所有例子都是从stdin读来的 请给我举一个C语言与Ragel接口的例子,其中程序不从标准中读取?Ragel希望一些变量在范围内,并指向它正在扫描的缓冲区的各个重要部分。您可以了解它希望它们被调用什么,以及如何在中更改它们。第5节,宿主程序的接口,是你们的朋友 在第一个参数上运行扫描仪的手册示例: #include <stdio.h> #include <string.h> %%{ machine foo;
请给我举一个C语言与Ragel接口的例子,其中程序不从标准中读取?Ragel希望一些变量在范围内,并指向它正在扫描的缓冲区的各个重要部分。您可以了解它希望它们被调用什么,以及如何在中更改它们。第5节,宿主程序的接口,是你们的朋友 在第一个参数上运行扫描仪的手册示例:
#include <stdio.h>
#include <string.h>
%%{
machine foo;
write data;
}%%
int main( int argc, char **argv )
{
int cs;
if ( argc > 1 ) {
char *p = argv[1];
char *pe = p + strlen( p );
%%{
main := [0-9]+ ( '.' [0-9]+ )?;
write init;
write exec;
}%%
}
printf("result = %i\n", cs >= foo_first_final );
return 0;
}
#包括
#包括
%%{
美孚;
写入数据;
}%%
int main(int argc,字符**argv)
{
int cs;
如果(argc>1){
char*p=argv[1];
char*pe=p+strlen(p);
%%{
main:=[0-9]+('.[0-9]+)?;
写初始化;
写exec;
}%%
}
printf(“结果=%i\n”,cs>=foo\u first\u final);
返回0;
}
基本上,cs
保持机器的状态,p
和pe
分别指向缓冲区的开始和结束
手册中的定义如下:
•cs-当前状态。这必须是一个整数,并且应该在调用
当数据被分解成独立处理的块时,机器将自动运行。这个变量
可以从执行循环外部修改,但不能从内部修改
•p-数据指针。在C/D代码中,该变量应该是指向字符数据的指针
处理。在每次运行数据块时,应将其初始化为数据块的开头
机器。在Go、Java和Ruby中,它用作数据的oset,必须是整数。在里面
在这种情况下,应在机器每次运行时将其初始化为零
•pe-数据端指针。这应该初始化为p加上每次运行时的数据长度
机器。在Go、Java和Ruby代码中,这应该初始化为数据长度
•eof-文件结束指针。当正在处理的buer块被删除时,应将其设置为pe
最后一个,否则应设置为null。在Go中,必须使用Java和Ruby代码-1
而不是null。如果EOF事件只能在nal buer块被删除后才能知道
已处理,则可以设置p=pe=eof并运行执行块
•数据-此变量仅在Go、Java和Ruby代码中需要。它必须是一个数组
包含要处理的数据
•堆栈-这必须是一个整数数组。它用于存储表示
国家。如果堆栈必须动态调整大小,则可以使用Pre push和Post Pop语句
用于执行此操作(第5.6节和第5.7节)
•top-这必须是一个整数值,并将作为oset用于堆栈,给出下一个
堆栈顶部的可用点
•act-这必须是一个整数值。它是扫描程序代码有时用来保持
跟踪最近成功的模式匹配
•ts-这必须是指向字符数据的指针。在Go、Java和Ruby代码中,这必须是
整数。详见第6.3节