标签: yacc

多个flex/bison解析器

在项目中处理多个Flex/Bison解析器的最佳方法是什么?

我写了一个解析器,现在我需要在同一个项目中使用第二个解析器.到目前为止,在parser1.y我插入main(..)方法的第三部分并yyparse从那里调用.

我想获得是一种有两个不同的解析器(什么parser1.yparser2.y),并能够从外部函数中使用它们(让我们假设mainmain.cpp).

我应该使用哪些预防措施来导出文件yyparse外的函数.y以及如何处理两个解析器?

PS.我正在使用g ++编译而不是Flex和Bison的C++版本,我想保持这种方式(因此避免将解析器封装在对象中).

yacc lex bison parser-generator

6
推荐指数
3
解决办法
4854
查看次数

适用于yacc/byacc/bison和lex/flex

我读到的与这些实用程序有关的大多数帖子通常都建议使用其他方法来获得相同的效果.例如,通常提到这些工具的问题至少有一个答案包含以下一些内容:

  • 使用boost库(在此插入适当的boost库)
  • 不要创建DSL使用(在这里插入喜欢的脚本语言)
  • Antlr更好

假设开发人员......

  • ...对C语言感到满意
  • ...确实知道至少一种脚本语言(例如,Python,Perl等)
  • ...必须在几乎所有项目中编写一些解析代码

所以我的问题是:

  • 什么是适合这些公用事业的适当情况?
  • 是否存在任何(合理的)情况,除了yacc和lex(或衍生物)之外没有比问题更好的替代方案?
  • 在实际的解析问题中,有多少人会期望遇到yacc和lex中的任何缺点,这些缺点可以通过更新的解决方案得到更好的解决?
  • 对于那些还不熟悉这些工具的开发人员来说,花时间学习他们的语法/习语是值得的吗?这些与其他解决方案相比如何?

parsing yacc flex-lexer

6
推荐指数
1
解决办法
2374
查看次数

没有动态内存分配的Lex和Yacc

我正在设计要在禁止使用动态内存的嵌入式环境中运行的软件。Lex和Yacc非常适合该应用程序。

我可以配置Lex和Yacc完全不使用动态内存分配吗?

是否可以将Lex和Yacc配置为使用预定义的内存块,并将动态内存使用限制为该预定义的空间?

是否可以将动态内存的使用限制为仅对程序进行初始化(即程序首次运行时)?

编辑: 作为对TonyK的响应,我希望解析器不使用动态内存。

谢谢

c++ embed yacc memory-management lex

6
推荐指数
1
解决办法
706
查看次数

在Xcode中使用Yacc和Lex

我已经读过Xcode 4(我想以前的版本)内置了对Yacc和Lex的支持,我正在学习.我正在尝试建立一个简单的项目来测试它们,但由于我是Xcode和Yacc/Lex的新手,我似乎无法找到正确的方法.

任何人都可以推荐在Xcode 4中使用Yacc/Lex的有用指南或教程吗?

xcode yacc lex objective-c xcode4

6
推荐指数
1
解决办法
3715
查看次数

解析器YACC中的EOF错误

我试图使用PLY库中为Python提供的yacc解析器来解析字符串.解析器本身很长,但我遇到的问题是它总是给我同样的错误,无论我放什么样的字符串.错误是这样的:

yacc:输入中的解析错误.EOF

而词法分析器运行完美,所以我认为解析器就是问题所在.但我不明白这个错误,所以我甚至不知道在哪里首先要解决这个问题

有任何想法吗?非常感谢你!

python parsing yacc ply

6
推荐指数
1
解决办法
1691
查看次数

M4“没有此类文件或目录”。

这是我在skener.y文件中的代码

 %{
#include <stdio.h>
%}
%token T_Int
%%

exp:      T_Int           { $$ = $1;         }
| exp exp '+'     { $$ = $1 + $2;    }
| exp exp '-'     { $$ = $1 - $2;    }
| exp exp '*'     { $$ = $1 * $2;    }
| exp exp '/'     { $$ = $1 / $2;    }

;
%%
Run Code Online (Sandbox Code Playgroud)

当我用命令“ bison -d skener.y”进行编译时,出现错误“ m4:无此类文件或目录”。当然,在提示符下键入命令时,我位于工作文件夹中。我不知道是关于什么的?

parsing yacc bison

6
推荐指数
2
解决办法
5836
查看次数

YACC规则没有减少

我正在努力学习YACC并且在弄清楚它给我的警告信息时遇到了一些麻烦.这是我的文件的一部分:

define_character: WORD IS STRING COLOR
{
    printf("%s's full name is %s and thier color is %s", $1, $3, $4);
};

dialog: WORD COLON STRING
{
    printf("%s says %s", $1, $3);
};

change_scene: SCENE SETSCENE WORD
{
    printf("%s is the new scene", $3);
};
Run Code Online (Sandbox Code Playgroud)

它给我的警告是:

2 rules never reduced
2 useless nonterminals and 2 useless rules
warning: useless nonterminal: dialog
warning: useless nonterminal: change_scene
warning: useless rule: dialog: WORD SEMICOLON STRING
warning: useless rule: change_scene: SCENE SETSCENE WORD
Run Code Online (Sandbox Code Playgroud)

我该如何解决这些问题?我试过搜索,我发现由于转移/减少冲突而导致错误的人.似乎YACC通常会将其添加到警告输出中,如果有的话,只是为了确保我尝试从change_scene中删除WORD,这样它就不会寻找任何与其他令牌相同的令牌,但它仍然没有减少.我可以测试所有的规则,因为无论哪个都在顶部是有效的.我在第一条规则的末尾错过了一些语法,导致其余的问题?

yacc bison

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

为什么Visual Studio 2012在源文件未更改时运行自定义构建步骤?

我正在使用yacc和lex与Visual Studio 2012 C++/CLI并为yacc源文件创建了一个自定义构建步骤,如下图所示

自定义构建属性页面

输出文件有两个依赖项.它们是yacc源文件icl5kyacc.y和yyparse.c模板文件.每次构建解决方案时,即使尚未修改yyparse.c和icl5kyacc.y源文件,也会运行自定义构建步骤.这是构建后的目录列表.

  21-Sep-2012  10:19:18p         28,210    A icl5kyacc.y
  17-Sep-2012   7:32:06p          9,042    A yyparse.c
  22-Sep-2012  11:43:56a         38,233    A ICL5KYACC.cpp
  22-Sep-2012  11:43:56a          2,160    A icl5kyacc.h
Run Code Online (Sandbox Code Playgroud)

再次建造之后

2>从icl5kyacc.y生成icl5kyacc.cpp

  21-Sep-2012  10:19:18p         28,210    A icl5kyacc.y
  17-Sep-2012   7:32:06p          9,042    A yyparse.c
  22-Sep-2012  11:45:46a         38,233    A ICL5KYACC.cpp
  22-Sep-2012  11:45:46a          2,160    A icl5kyacc.h
Run Code Online (Sandbox Code Playgroud)

我错误地认为使用自定义构建步骤应该在构建步骤的输入和输出文件之间自动应用标准依赖关系规则吗?我很好奇的一件事是Studio(附加依赖项)中为我提供的%(AdditionalInputs)宏.不知道那是什么,或者是否以某种方式指向正在修改的文件.

c msbuild dependencies yacc visual-studio

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

为什么编译器不能使用 LEX/YACC 来解析 C++?

我知道这是有原因的,但我还没有找到一个好的、简洁的解释来解释为什么 LEX/YACC 不能用于 C++。我也有兴趣知道 LEX/YACC 是否可以用来解析 Objective C,或者该语言是否遇到同样的问题。(请注意,我指的是 ObjC,而不是 Obj-C++。)谢谢。

c++ compiler-construction yacc bison

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

如何使用 yacc 解析器检测错误行号

我们不知道如何跟踪 yacc 解析器中的错误。yylineno我们尝试在 lex 文件中使用并尝试添加%option yylineno,但它仍然不起作用,我们无法在 yacc 中访问这些变量。

error我们想要的只是使用yacc 和行号打印出语法错误。

这是我们的.l文件

%{
#include <stdio.h>
#include <stdlib.h>
#include "y.tab.h"
int yylineno=1;

%}

%option yylineno

identifier  [a-zA-Z_][a-zA-Z0-9_]*
int_constant    [0-9]+
delimiter       ;

%%

"int"       {return INT;}
{int_constant}  return INT_CONST;
{identifier}    return IDENT;
\=      {return ASOP;}
\+      {return PLUS;}
\-      {return MINUS;}
\*      {return MULT;}
\/      {return DIV;}
\,      {return COMMA;}
\(      {return OP;} /*OP CP = Opening Closing Parenthesis*/
\)      {return CP;}
\[      {return OB;} /*OB …
Run Code Online (Sandbox Code Playgroud)

yacc lex bison

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