正如你们中的一些人所知,我正在开发自己的 IDE。你可能会想“哦不,再来一个?!” - 别担心,没有人强迫你使用它,我怀疑它无论如何都会被认真发布。
所以,继续讨论主要问题。我正在尝试实现一个自动完成系统。确切的用户界面不是问题。但是,以灵活的方式存储语言/库标记是我的主要问题。
假设我们向用户建议 CSS 选择器或属性。我们会有类似的东西:
- css/core
- a // anchor tag
- etc // all valid html tags
- .stuff // class name parsed from user project
- ?etc // more stuff parsed from user project (ids, classes...)
- css/properties
- border // regular css properties - we also need to associate
// <border-style> and <color> value tokens
- etc // the rest of them
- css/values/border-style // property value tokens
- solid
- dotted
- css/values/color
- red
- green
- fucshia
所以每个令牌都有一个命名空间,这样我们就可以在令牌之间进行跟踪。与 BNF 类似,一些标记值由子标记组成,例如边框和颜色的大小写。
1.不要忘记我们需要存储可能与具有奇异语法的语言相关的任何内容。2.另外,重要的是要注意,我需要以某种方式将上述信息与上下文相关的信息合并,例如从项目文件中收集的类名列表。这应该是快速有效的,不会导致任何重复的令牌等。
所以,总而言之,这里的事情非常复杂,老实说,我想不出一种方法来获得一个通用和灵活的解决方案。请记住,IDE 应该适合任何类型的语言,这使得这变得更加复杂。
我不确定这个问题是否更适合程序员,所以我会留给模组来决定。