标签: gppg

使YACC输出AST(令牌树)

是否有可能使YACC(或者我是我的MPPG)输出抽象语法树(AST).

我正在阅读的所有内容都表明YACC很容易做到这一点,但是我很难知道你是如何知道何时在树中建立节点的时候.

syntax parsing yacc gppg

12
推荐指数
2
解决办法
2万
查看次数

转移减少冲突

我在理解移位/缩小语法的问题时遇到了问题,我知道语法没有歧义.这个案例是if else类型之一,但它不是'悬空的'问题,因为我有强制的END子句来分隔代码块.

这是gppg的语法(它是一个像编译器编译器一样的Bison ......而且它不是一个echo):

%output=program.cs

%start program

%token FOR
%token END
%token THINGS
%token WHILE
%token SET
%token IF
%token ELSEIF
%token ELSE
%%

program : statements
        ;

statements : /*empty */
           | statements stmt
           ;

stmt : flow
     | THINGS
     ;

flow : '#' IF '(' ')' statements else
     ;

else : '#' END
     | '#' ELSE statements '#' END
     | elseifs
     ;

elseifs : elseifs '#' ELSEIF statements else
        | '#' ELSEIF statements else
        ;
Run Code Online (Sandbox Code Playgroud)

这是冲突输出:

// Parser …
Run Code Online (Sandbox Code Playgroud)

grammar conflict gppg

10
推荐指数
1
解决办法
9198
查看次数

分析器生成器:如何一起使用GPLEX和GPPG?

在查看好的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;
%%
Run Code Online (Sandbox Code Playgroud)

谢谢!安德鲁

c# parsing gppg

7
推荐指数
1
解决办法
7074
查看次数

Dpp中的gppg/gplex等价物?

当我在C#中的工作,我发现GPPGgplex语法/词法分析器发电机是适合我的需求.我想知道D编程语言是否有类似的东西(即,在BNF或EBNF中给出语法的实用程序,输出将该语言修改/解析为抽象语法树的D代码).

我发现的最接近的是Goldie,但是我很难理解它,我无法得到任何东西.

parsing d gppg abstract-syntax-tree lexical-analysis

5
推荐指数
1
解决办法
333
查看次数