3

I did some searching and didn't find a question that "directly" answered this question.

Anyway the basic gist of this question is I am wondering what "language feature" or "syntax" that makes a language be a major pain to build a parser, syntax highlighting, etc?

This might be subjective but I was thinking of like for example the difference in parsing a language like say Lisp for example with its (func parms etc..) structure, as versus to something like C++ with all of the templates, brackets and so forth.

4

2 回答 2

4

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

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

于 2010-05-13T15:14:48.623 回答
1

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

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

于 2010-05-19T00:38:32.170 回答