标签: yacc

用GDB检查Bison的$$变量

如果我在Bison .y文件中设置断点,有没有办法可以检查该断点处的$$伪变量的内容?

c gdb yacc bison

3
推荐指数
1
解决办法
1190
查看次数

在没有%prec或%left的情况下在Bison中设置优先级和关联性

如何在不使用%prec或%left的情况下在Bison中设置优先级和关联性?有没有办法在不需要的地方编写语法?

compiler-construction yacc lex bison flex-lexer

3
推荐指数
1
解决办法
2306
查看次数

如何在yacc/bison中找到错误报告的不平衡分隔符?

我有一个语法,它使用括号和方括号作为分隔符.当bison生成的解析器被赋予带有不平衡分隔符的输入时,YYLTYPE*传递给的传入的错误位置yyerror是输入的结尾.所以,例如,在输入中xx(yy,void yyerror(YYLTYPE* yylloc, Context* ctx, const char* msg)我有这个yylloc->first_column == yylloc->last_column == 5.不幸的是,输入的结尾不是指示不匹配分隔符的最显着位置.更有用的是左括号或左方括号的位置,没有匹配.(在该示例中,这将是左括号在偏移2)我推测,此信息可用在分析堆---必须有一些Ñ使得$-n是不匹配([令牌,并@-nYYLTYPE结构保持其位置---但似乎没有一个可用yyerror.我知道我可以保留一堆我自己用于跟踪分隔符的偏移并隐藏在Context我已经传递的内容中yyerror,但这似乎是不优雅和重复的,因为野牛已经在跟踪这个.

那么:如何从bison中获得它在输入中遇到的第一个不平衡分隔符的位置,以便在为解析错误生成消息时可以使用它?

yacc bison

3
推荐指数
1
解决办法
884
查看次数

将 yyin 设置为“模拟”FILE*?

我有一个 C 库,我想在不修改库的情况下与 C++ 代码进行交互。它有一个 yacc 生成的前端,可以读取yyin,这是一个FILE *. 我想设置yyin某种从内存中读取的模拟FILE *。是否有希望以可移植(Linux、Mac、Windows)的方式做到这一点——或者是否有其他技巧可以让这样的解析器从内存而不是读取FILE *

c c++ yacc stdio

3
推荐指数
1
解决办法
496
查看次数

如何解决在野牛中使用相同字符的两个不同操作符之间的模糊冲突

我执行的语言,有两家运营商之间的冲突| * |* || *-第一个是"规范"操作,其中两个|-characters环绕的表达,另一个是运营商还是,其中两个表达式三明治2个|-characters.

到目前为止,我能够解析类似的表达式||| a || b | | |- 即单个或三个级别的规范或(规范中任意数量的规范和任何系列的或运算符); 这只适用于表达式的尾部包含|彼此之间有空格的字符 - 即||| a || b | | |可以工作,但||| a || b |||会导致语法错误.我希望能够将最后一个版本解析为a or b内部的三个规范.

我的实现的简约版本(即相关部分):

野牛/ Yacc部分:

%token NUM
%token OR
%token NORM

%right LOR ROR 
%right NORM
%right OR
%right '|'

%%

expression:
    NUM
    | lnorm expression rnorm %prec NORM
    | expression LOR ROR expression %prec OR …
Run Code Online (Sandbox Code Playgroud)

c yacc bison flex-lexer

3
推荐指数
1
解决办法
641
查看次数

如何获取开始规则的返回值

如何$$使用 Yacc/Bison 获取语法的起始规则的“返回”值(变量)?

yyparse 返回解析器的错误代码。

yacc bison

3
推荐指数
1
解决办法
1217
查看次数

如何设置ply的yacc优先级

我需要使用 ply 从正则表达式创建 AST。例如,如果 RE 是 (a|b*)abc,我想将一个配对元组制作为 (':', (':', (':', ('|', 'a', ('* ', 'b')), 'a'), 'b'), 'c') <-- ':' 表示将字符串分成两部分。

这是我的代码。

tokens = (
    "SYMBOL",
    "LBRACKET",
    "RBRACKET",
    "STAR",
    "UNION"
)

t_ignore = ' \t\n'
t_SYMBOL = r'[a-zA-Z0-9]'
t_LBRACKET = r'\('
t_RBRACKET = r'\)'
t_STAR = r'\*'
t_UNION = r'\|'

def t_error(t):
    raise TypeError("Unknown text '%s'" % t.value)

def p_multiple(p) :
    '''string : SYMBOL SYMBOL
              | string SYMBOL
              | string string'''
    p[0] = (':', p[1], p[2])    

def p_union(p) :
    '''string …
Run Code Online (Sandbox Code Playgroud)

python regex yacc ply abstract-syntax-tree

3
推荐指数
1
解决办法
3625
查看次数

为什么 Bison (Yacc) 显然无缘无故地打印新行?

我正在尝试使用 Flex 和 Bison 为简单的格式化语言构建一个编译器。我还处于起步阶段,我已经编写了一些功能。

不过,在这个阶段,我仍然没有将yyout任何东西打印到任何地方。我有一些错误情况,其中输出文件中打印了某些内容,但此输入显然不会发生这种情况。我所有的其他打印语句都将打印到控制台。因此,我希望输出文件将完全为空。但是,当我尝试使用以下内容作为我的输入文件时:

\begin {document}

\tabsize( 5)
\title{"Why I Love Compiler Design"}
\author{"COMP421 Student"}
\date{29/12/2016}
\pagesetup{30,100 }

\end{document}
Run Code Online (Sandbox Code Playgroud)

生成的输出文件为:

在此处输入图片说明

有 9 行空行,对应于我在输入文件中的 9 行。然而,我期望的输出只有 1 个空行。

这是我的.l文件:

\begin {document}

\tabsize( 5)
\title{"Why I Love Compiler Design"}
\author{"COMP421 Student"}
\date{29/12/2016}
\pagesetup{30,100 }

\end{document}
Run Code Online (Sandbox Code Playgroud)

这是我的.y文件:

%{
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "y.tab.h"
    void yyerror(const char *);
    int yylex(void);
    /* "Connect" with the output file  */
    extern FILE *yyout;
    extern int  yyparse(); …
Run Code Online (Sandbox Code Playgroud)

compiler-construction yacc lex bison flex-lexer

3
推荐指数
1
解决办法
1549
查看次数

警告:非终结符在语法中无用:const_declaration [-Wother]

我有以下yacc语法:

%{
#include  <stdio.h>
extern FILE* yyin;
extern char* yytext;

%}

%token VAR ID_NAME TYPE_STRING TYPE_BOOL TYPE_NUMBER CONST

%%

var_declaration: VAR ':' type ID_NAME ';' { printf("var\n"); }
    ;

const_declaration: CONST ':' type ID_NAME ';' {printf("const\n");}
    ;

type: TYPE_NUMBER
    | TYPE_STRING
    | TYPE_BOOL
    ;

%%
void yyerror (char const *s) {
    fprintf (stderr, "%s\n", s);
}

int main(int argc, char** argv[])
{

    yyparse();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它应该描述一种小语言,此时应该允许表单的变量声明var:<type> <name>;和表单的常量声明const:<type> <name>;

当我运行时,yacc -vd grammar.y我得到: …

parsing yacc bison

3
推荐指数
1
解决办法
7892
查看次数

iOS的标准语法分析器是什么?

适用于iPad和iPhone的iOS是否支持解析器?特别是,lex/yacc或flex/bison可用于iOS开发吗?xcode4是否有本机支持的库?(我可以通过lex/yacc生成我的语法,然后获取*.c文件并将它们放入我的项目中,但我希望有更严格支持的库.)

有任何想法吗?

parsing yacc lex ios

2
推荐指数
1
解决办法
1035
查看次数

标签 统计

yacc ×10

bison ×7

c ×3

flex-lexer ×3

lex ×3

compiler-construction ×2

parsing ×2

abstract-syntax-tree ×1

c++ ×1

gdb ×1

ios ×1

ply ×1

python ×1

regex ×1

stdio ×1