什么语法糖或语言功能使语言难以解析?

时间:2010-05-13 14:46:34

标签: parsing syntax language-features language-design syntactic-sugar

我做了一些搜索,没有找到“直接”回答这个问题的问题。

无论如何,这个问题的基本要点是我想知道什么是“语言特性”或“语法”使语言成为构建解析器,语法高亮等主要的痛苦?

这可能是主观的,但我想的是例如解析像Lisp这样的语言的区别,例如它的(func parms等等)结构,而不是类似C ++的所有模板,括号等等。

2 个答案:

答案 0 :(得分:4)

除非您可以正确扩展宏,否则无法完全解析通过宏或其他方式支持语法扩展的语言。对于具有完整过程宏(如Lisp或Curl)的语言,如果不实现语言本身,则无法完全解析!

通常,对于此类语言的语法突出显示,您不要尝试扩展宏并假设宏遵循传统的语言习语。

答案 1 :(得分:1)

从正式语言和语法的角度来看,恕我直言有两个主要方面。首先,您语言的语法应该属于一些易于处理的类别。例如,具有无上下文语法的语言,这意味着例如你的语言有太多的元素,其数量相互依赖,例如开放和闭括号,可能需要可能无限量的内存来解析。 C ++具有上下文敏感语法,更糟糕的是,例子可能是具有三个具有相互依赖的ammounts的元素的语法。另一个方面是解析时的歧义。在模糊的语法中,你可以用不同的方式解析相同的文本,这意味着你必须找到解析算法的正确方法 - 大多数都不允许含糊不清。

我不完全确定,但我会说,解析括号和空格(合理定义时)同样复杂。对于这两种情况,您需要一个计数器来检查块嵌套的级别,但是使用空格可以在本地识别级别(通过计算空格)并且您可以确定,您的计数器不会低于零,这可能发生在您关闭括号比打开更多。