lalr

    5热度

    3回答

    我目前正在尝试按照“编译器原理技巧和工具”(也称为“龙书”)中所述实现LALR解析器生成器。 很多已经工作。解析器生成器当前能够生成完整的goto-graph。 Example Grammar: S' --> S S --> C C C --> c C C --> d Nonterminals: S', S, C Ter

    3热度

    1回答

    我一直在使用PLY为我的语言构建解析器,但是我遇到了移位/减少冲突,这给我造成了一些麻烦。我的语言具有语法ala C++模板的泛型类型。所以现在我有这样的规则: expression : expression LESS expression %prec COMPARISON expression : template template : NAME | NAME

    4热度

    2回答

    我有一个简单的LALR(1)语法,但遇到了问题。 start ::= spec. spec ::= MOD STRING top_stmt. spec ::= top_stmt. top_stmt ::= stmt. top_stmt ::= conditional. stmt ::= expr. stmt ::= assignment. conditional ::= IF stm

    1热度

    2回答

    我找了一个LALR解析器生成的C++,让我产生真正好的错误信息的最佳解决方案。我真的很讨厌的语法错误,MySQL的生成,我想借此解析器,并以“皮棉”检查取代它会告诉我不仅仅是 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server

    4热度

    3回答

    我正在使用CUP创建我需要的论文的解析器。我的语法有一个转换/减少冲突。我有这样的产生式规则: command ::= IDENTIFIER | IDENTIFIER LPAREN parlist RPAREN; ,我有这样的警告: Warning : *** Shift/Reduce conflict found in state #3 between command ::= IDENTI

    1热度

    1回答

    Hy guys,我正在开发一个带f​​lex和bison的脚本引擎,现在我正在实现这种语言的eval和load函数。 只给你一个例子,语法是这样的: import std.*; load("some_script.hy"); eval("foo = 123;"); println(foo); 所以,在我的词法分析器我已经实现的功能: void hyb_parse_string(co

    2热度

    2回答

    我正在尝试使用LALR(1)解析器生成器(Bison,但该问题不是特定于该工具)解析简单语法,而且正在打击转变 - 减少冲突。我发现有关解决这些文档和其他来源往往说一个或多个以下: 如果语法是不明确的(如IF-THEN-ELSE歧义),改变语言来解决歧义。 如果是运算符优先级问题,请明确指定优先级。 接受默认分辨率,并告诉生成器不要抱怨它。 然而,所有的这些似乎适用于我的情况:语法是明确的,只要我

    1热度

    1回答

    我最近被授权使用Java CUP的代码。有人还在使用它吗?我发现了一些小资源,但是看起来主站点Java Cup Website上没有太多文档。如果有任何邮件列表或用户在那里,我想知道。顺便说一句,我不能使用慕尼黑人正在维护的新引擎,我必须坚持0.1版。

    3热度

    2回答

    在整个Bison语法中,我使用了右递归,并且我已经读过左递归更好,因为它不必先构建整个堆栈。 但是,当我尝试切换到任何一个左递归时,我总是会遇到很多冲突,而且我不明白为什么。 任何人都可以告诉我一个通用的例子,使用左递归而不是正确的会导致冲突(当右递归不会导致冲突时)。然后,切换到左侧以纠正这种冲突时需要做些什么。我认为一个基本的例子将帮助我不仅仅是修正我自己的语法。 编辑: 但我想我应该有一个具

    1热度

    2回答

    我有以下的柠檬语法(从实际语法简化): %right ASSIGN . %nonassoc FN_CALL . program ::= expression . expression ::= expression ASSIGN expression . expression ::= function_call . [FN_CALL] expression ::= IDENTIFIER