- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在为简单的编程语言构建某种解释器时,我偶然发现了一个有趣的问题。我称之为“符号前瞻”问题。
我这是什么意思?例如,在 C/C++ 编译器中,您将要使用的符号必须始终已在代码上方的某处声明。像这样:
struct int_pair;
struct rectangle {
int_pair position;
int_pair size;
};
struct int_pair {
int x, y;
};
而不是这样:
struct rectangle {
int_pair position;
int_pair size;
};
struct int_pair {
int x, y;
};
在 C# 或 Java 中,可以在文件中的任意位置使用任何符号:
public class Rectangle {
private IntPair position, size; // using IntPair before declaring it
}
public class IntPair {
public int Sum() { // using x and y before declaring it
return x + y;
}
public int x, y;
}
那么我的问题是什么?
我发现,在构建 AST 时,了解代码中的符号是否引用函数、变量或其他东西很有用,这样解释器就可以决定以下代码应该是什么样子,哪个改善了很多事情。这要求这个符号已经在我的程序中的某个地方声明,但我真的不喜欢这种“C”风格的编程。我想要的是像 Java 或 C# 那样的编程风格:声明可以位于代码中的任何位置,不受特定顺序的限制 - 并且解释器在构建 AST 时可以依赖于符号含义。
解决这个问题的一种方法可能是构建某种先行算法,该算法会飞越程序并捕获所有相关符号,而不是其他任何东西。但对我来说,这看起来相当困惑并且类似于解决方法。
所以我的问题是,需要使用 C# 和 Java 方式来声明内容(请参阅上面的代码片段),但我自己弄清楚如何在解释器中实现此功能。 所以我要求一个想法/代码片段/算法/策略,让我可以预见符号及其含义。
非常感谢您的帮助。 :)
最佳答案
Java 和 C# 的语法设计方式使得即使您不知道子表达式(包括标识符)的类型,表达式(例如函数调用)也是明确的。 C 不是这样设计的。
明确语法的优点之一是您可以在不进行任何类型分析的情况下创建 AST,这意味着不需要预先声明。一旦你有了 AST,你就可以做任何你想做的分析,比如通过遍历解析树来检查函数原型(prototype)和调用点。
并且无需同时进行所有分析;您可以根据需要多次行走这棵树。这使得组织代码变得更加容易,并且不会造成任何重大开销。
关于c - 编译器/解释器中的符号前瞻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58903689/
我有一个看起来像这样的字符串: text = "9) 9 的文本\r\n10) 10 的文本\r\n11) 11 的文本\r\n12) ...\r\n123) 123 的文本" 我正在尝试将其拆分如下
下一代的 3D Tiles 前瞻 原文:Introducing 3D Tiles Next, Streaming Geospatial to the Metaverse 原文发布时间:2021年11月
我有一个使用正则表达式回顾的 string.replace() 函数。 myString.replace(/(?
我是一名优秀的程序员,十分优秀!