我对语法相当陌生,想知道是否有人可以帮助我使用解析树确定下面的语法是如何不明确的?我知道它需要有两个可以创建的不同字符串。
S -> (S)|SS|()
Run Code Online (Sandbox Code Playgroud)
我可以将其转换为乔姆斯基范式和格雷巴赫,但这些的歧义让我感到困惑。
我正在尝试为 JDK 11.x 创建一个解析库,它读取 Haskell 代码作为输入,然后将其转换为 Java 以供 JVM 执行。我称它为 Jaskell,但我需要知道 Haskell 的正式语法结构,以便确定需要什么类型的解析器 Jaskell(即 LL 或 LR 解析器)。
GCC/Clang 是手写解析器。我读到一篇文章说 C++ 不能被 LR(1) 解析器解析(Why can't C++ be parsed with a LR(1) parser?)。如果是这样,当 LR(1) 比递归下降更强大时,为什么 GCC/Clang 是手写的递归下降解析器?
根据正式的Pascal EBNF定义(pg69-75),我看到Pascal只支持3种原始类型:Integer,Real和String.
在C中,任何不同的值都0
可以解释为true
文字.Pascal不像C一样工作.当Pascal没有布尔类型时,它如何处理条件表达式?
C++ 中运算符的优先级和结合性是什么?
谁定义了运算符优先级和结合性,以及它与求值顺序有何关系?解释了这些属性如何从语法中出现。然而,我只是对所有规则的列表感兴趣。
这个问题应该是一个社区常见问题解答,可以参考而不是cppreference 文章。