parsing - 如何解析实际代码,如 stackoverflow/intellisense/等?

标签 parsing xsd code-structure

我想知道 stackoverflow 如何解析各种不同的代码并识别关键字、特殊字符、空格格式等。我相信它对大多数代码都是这样做的,而且我注意到它甚至足够复杂以理解所有内容之间的关系它解析如下:

String mystring1 = "inquotes"; //incomment
String mystring2 = "inquotes//incomment";
String mystring3 = //incomment"inquotes";

许多 IDE 也这样做。这是如何完成的?

编辑:进一步解释 - 我不是在问文本的解析,我的问题是,一旦我完成了该部分..是否有类似通用 XML 方案或描述哪些字符串的跨代码格式层次结构之类的东西是关键字,哪些字符表示注释、文本字符串、逻辑运算符等。或者我必须成为我希望准确解析的任何语言的语法大师吗?

最佳答案

要真正让您的 IDE/编译器/解释器“理解”代码并对代码进行着色,您需要解析它并提取不同的语法部分。对此的经典引用是 Dragon Book ,“编译器:原理、技术和工具”。您可以看到像这样的构造中的一些困难

i+++++i; 

list<list<hash<list<int>,hash<int,<list>>>>>;
//or just matching parens 

正确执行此操作是 hard problem 。有些语言(例如 java)比其他语言(例如 C 和 C++(都有标准)或 ruby​​(甚至没有规范,并且依赖于规范的实现))使此操作更容易。然而,如果您只想做一些突出显示,您可以跳过大部分语法并更轻松地获得 80% 的解决方案。我怀疑 SO 引擎了解字符串和一些不同类型的注释,这足以满足其目的。

80% 到 100% 之间的难度是大多数 IDE 都具有 C++ 语法突出显示功能但 Visual C++ 仍然不支持 C++ 重构的原因之一。突出显示一些错误可能是可以的。当您重构时,您需要真正理解不同命名空间中的变量范围以及各种指针内容。

关于parsing - 如何解析实际代码,如 stackoverflow/intellisense/等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3517674/

相关文章:

.net - 未定义的complexType 'http://schmeas.xmlsoap.org/soap/encoding/:Array'用作复杂类型限制的基础

javascript - 我可以在 JavaScript 中包含另一个源文件吗?

java - 嵌入方法参数表达式是不好的做法吗?

python - 我应该在 main() 内部还是外部定义函数?

java - 如何编写用于算术计算java解析器的递归while循环

c - C语言读取文件

facebook - 您将如何编写类似于 Facebook Graph Search 的解析器

java - JAVA如何解析HTTP响应参数?

iphone - iOS 上的 XSD 验证

java - JAXB 从 xsd 生成类始终具有 @XmlElement(required=true)