在浏览了大量关于C解析器生成器的文章之后,我偶然发现了gplex和gppg。我想使用gplex生成令牌,以便gppg解析和创建树(类似于lex/yacc关系)。然而,我似乎找不到一个例子来说明这两者是如何相互作用的。使用lex/yacc,lex返回由yacc定义的令牌,并可以在yylval中存储值。在gplex/gppg中是如何做到的(它们的文档中缺少这个功能)?
附件是我要转换为gplex的lex代码:
%{
#include <stdio.h>
#include "y.tab.h"
%}
%%
[Oo][Rr] return OR;
[Aa][Nn][Dd] return AND;
[Nn][Oo][Tt] return NOT;
[A-Za-z][A-Za-z0-9_]* yylval=yytext; return ID;
%%
谢谢!
安得烈
最佳答案
我有一个类似的问题-不知道如何使用我的输出从gplex与gppg,因为明显缺乏文件。我认为问题源于这样一个事实:gplex发行版包括gppg.exe和gplex.exe,但仅包含gplex的文档。
如果您访问gppg主页并下载该发行版,您将获得gppg的文档,其中描述了输入文件的要求、如何构造语法等。哦,您还将获得两个二进制文件-gppg.exe和gplex.exe。
似乎把所有东西都放在一个包里会更简单。它肯定可以消除一些混乱,特别是对于那些可能是新的词法分析(标记化)和句法分析(可能不是100%熟悉,但两者之间的差异)。
不管怎样,对于那些第一次这么做的人来说:
GPLEX http://gplex.codeplex.com -用于标记化/扫描/词法分析(同一事物)
gppghttp://gppg.codeplex.com/-将令牌赋予器的输出作为要解析的输入。例如,解析器使用语法,可以做一些简单的记号赋予器不能做的事情,比如检测括号集是否匹配。