关于使用 yacc 解析器构建符号表的问题
如果我的 yacc 解析器遇到以下代码: int foo(int a, int b) 是否应该添加 int a 和 int b 作为 foo 的属性?按照我现在的方式,它输入 a 和 b 作为单…
Yacc 程序无法识别函数声明
我认为我的程序应该能够将以下内容识别为函数声明: int fn(int i) { int n return } 但事实并非如此。 这是我的 yacc 文件的相关部分: program : de…
此 yacc 代码中是否存在移位/归约错误?
我收到 yacc 发来的消息,说存在移位/归约冲突。我认为它来自 yacc 文件的这一部分。 statement : expression_stmt | compound_stmt | selection_stmt…
在 Linux 上使用 Bison --graph=[file] 的技巧
最近(大约一个月前),我试图向公司的内部扩展语言引入新的构造,并与一些减少-减少错误作斗争。虽然我最终解决了这个问题,但深入研究 y.output 文…
为什么使用 flex 和 yacc 编写的程序中出现语法错误?
我编写了一个应该识别简单语法的程序。当我输入我认为有效的语句时,我收到错误。具体来说,如果我输入 int a 整数b; 它不起作用。当我输入 int a 后…
如何将文字从 flex 返回到 yacc?
在我的 yacc 文件中,我有如下内容: var_declaration : type_specifier ID '' | type_specifier ID '[' NUM ']' '' type_specifier : INT | VOID I…
使用 ANTLR 容忍格式错误的语句(例如,用于代码完成)
我有一个简单 DSL 的 ANTLR 语法,如果没有语法错误,一切都会顺利进行。然而,现在我需要支持自动完成机制,我需要从对属性、函数等执行基本类型检查…
正则表达式排除 101 和 110
接受语言 {0,1} 上的所有内容但不包含子字符串 110 或 101 的正则表达式是什么? 接受: 111111 000011111 100001000001001 010 1 拒绝: 100110 0101…
消除 E := EE+|EE-|id 的左递归
如何消除以下语法的左递归? E := EE+|EE-|id 使用通用过程: A := Aa|b 翻译为: A := b|A' A' := ϵ| Aa 将其应用到我们得到的原始语法: A = E, a …