【问题标题】:What syntax sugar or language features makes a language hard/tough to parse?哪些语法糖或语言特性使语言难以/难以解析?
【发布时间】:2011-02-19 03:22:14
【问题描述】:

我进行了一些搜索,但没有找到“直接”回答此问题的问题。

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

这可能是主观的,但我正在考虑例如解析语言的差异,例如 Lisp 的(func parms 等)结构,而不是像 C++ 的所有模板、括号等等。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 啊,这确实有道理!我从来没有想过支持/解析可以自我扩展自己语法的语言的问题,这确实是一个棘手的问题。但是,我也想知道一些“更正常”的语法内容,例如 Python 的空格与 C 的括号样式?这将如何影响解析?
      猜你喜欢
      • 2012-06-15
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多