相关疑难解决方法(0)

与C++相比,Vala是一种理解的语言吗?

解析C++的问题是众所周知的.它不能纯粹基于语法进行解析,它不能像LALR那样完成(无论术语是什么,我不是语言理论家),语言规范是一个很多页面等等.由于这个和其他原因我为我的个人项目决定另一种语言.

Vala看起来很好.虽然提供了许多比C++更多的改进,但解析起来同样麻烦吗?或者它有一个整洁,合理的长度形式语法,或一些逻辑描述,适合构建编译器,源分析器和其他工具的解析器?

无论答案是什么,Genie替代语法都是如此?

(我也很想知道D和其他后C++非VM语言不太强烈.)

c++ parsing vala

7
推荐指数
2
解决办法
2990
查看次数

带有解析/匹配示例的C++ BNF语法

我正在开发一个C++解析器(用于IDE),所以现在尝试详细了解C++语法.虽然我在http://www.nongnu.org/hcb/找到了一个优秀的语法源,但我很难理解它的某些部分 - 特别是,哪些"真正的"语言结构对应于各种制作.

所以我正在寻找一个C/C++ BNF语法指南,其中包含与各种制作/规则相匹配的代码示例.有吗?

c++ grammar parsing bnf

7
推荐指数
1
解决办法
5294
查看次数

在可以区分比较和模板实例之前,C++的解析器会做什么?

在阅读完这个问题之后,我想知道当主要的C++编译器解析这样的代码时会发生什么(关于AST):

struct foo 
{
  void method() { a<b>c; }

  // a b c may be declared here
};
Run Code Online (Sandbox Code Playgroud)

他们像GLR解析器一样处理它还是以不同的方式处理它?还有哪些方法可以解析这个和类似的案例?

例如,我认为可以推迟解析方法体,直到整个结构被解析,但这是否真的可行且实用?

c++ compiler-construction parsing gcc clang

7
推荐指数
1
解决办法
168
查看次数

antlr C语法创建AST

是否有可用的C语法生成AST,其中包括使用"^"和"!"的所有解析器规则.符号?

我阅读了Terence Parr写的这本书来编写这样的语法,但似乎为C语言编写一个这样的语法是一个耗时的过程,所以想知道它是否已经可用,这可以节省大量时间!

(对于较小的C语言子集的语法也很好..)

谢谢 :)

c grammar antlr abstract-syntax-tree

5
推荐指数
1
解决办法
3860
查看次数

确定性上下文无关语法与上下文无关语法?

我正在阅读我的比较语言课的笔记,我有点困惑......

上下文无关文法和确定性上下文无关文法有什么区别?我正在专门阅读有关 CFG 的解析器是 O(n^3) 以及 DCFG 的编译器是 O(n) 的内容,并且并不真正理解时间复杂度的差异如何如此之大(更不用说我仍然对使 CFG 成为 DCFG 的特征感到困惑)。

非常感谢您!

big-o parsing programming-languages context-free-grammar context-free-language

5
推荐指数
1
解决办法
2367
查看次数

C++代码的符号表是否包含函数名称和类名?

我一直在搜索有关C++代码的符号表是否包含函数名称和类名的各种帖子.我可以在帖子上找到的东西是它取决于编译器的类型,

如果它在一次通过中编译代码,则它不需要在符号表中存储类名和子程序名

但如果它是一个多遍编译器,它可以添加有关它遇到的类及其子例程的信息,以便它可以进行参数类型检查并发出有意义的错误消息.

我无法理解它是否真的依赖于编译器?我假设编译器(对于C++代码)会在表中放置带有类名的函数名,无论它是单通道还是多通道编译器.它如何依赖传球?我没有这么棒的知识.此外,任何人都可以显示一个简单的C++类的示例符号表,它会是什么样的(带有类名的函数名)?

c++ compiler-construction function class-names symbol-table

5
推荐指数
1
解决办法
3784
查看次数

Grako"代码"代

我试图理解如何重新创建由grako生成的解析器解析的文档.

在深入了解grako源代码后,我相信我终于明白了如何从AST返回到生成的文档.有人可以检查我的以下理解是否正确,如果有更直接的方法,请告诉我?

  1. 一个人创建了一个希望解析的PEG语法.Grako基于它创建了一个解析器类和一个sematics类.
  2. 一个(手动)创建一个python模块,其中包含(或多或少)一个grako.model.Node语法中每个规则的单独类(子类).每个类必须至少有一个构造函数,其中包含相应规则中每个命名元素的参数,并将其值存储在类属性中.
  3. 一个子类(手动)生成的语义类,用步骤2中创建的相应类替换每个规则的ast.
  4. 一个人(手工)创建一个python模块,这个子类grako.codegen.ModelRenderer定义了"代码"生成模板,用于(或多或少)一个语法中的每个规则.
  5. 一个提供由Node子类组成的AST和包含模板的python模块grako.codegen.CodeGenerator().render(...)来创建输出.

这可能是对的吗?这看起来根本不直观.

  • 为什么要经过第2步和第3步的重大努力,除了存储已包含在AST中的信息之外什么都不做?
  • 这种方法的优点是什么,而不是直接从AST工作?
  • 如果只想重新创建原始语法中的文档,是否有办法自动化或回避步骤2和3?
  • 给定PEG语法定义,理论上可以自动创建"代码生成器生成器",就像创建"解析器生成器"一样吗?

python code-generation grako

5
推荐指数
1
解决办法
584
查看次数

如何在 ANTLR 中实现 C 解析器的词法分析器 hack

是否可以使用标准 C 语法(如官方 ANTLR4 GitHub 存储库中找到的语法)来实现经典的Yacc 词法分析器 hack,以区分 ANTLR4 生成的 C 解析器中的标识符名称和类型名称?

看来可以插入 ANTLR4 词法分析器的临时代码非常有限。在《The Definitive ANTLR4 Reference》一书中,Terrence Parr 说道:

“一种长期存在的常见做法涉及从解析器向词法分析器发送反馈,以便词法分析器可以向解析器发送精确的标记。[...]不幸的是,这对于 ANTLR 语法来说是不可能的,因为 ANTLR 生成的解析器通常在令牌流中向前看以做出解析决策。[...]”

有什么方法可以规避上述问题并实现反馈循环吗?或者在访问解析树时如果不采取疯狂的黑客手段,在 ANTLR4 中实现 C 解析器是不可能的吗?

c parsing antlr abstract-syntax-tree antlr4

5
推荐指数
1
解决办法
1172
查看次数

如何从过程调用中告诉数组?

上下文

我正在解析代码,其中......

所以我有这个lExpression解析器规则是有问题的,因为第一个alternative(#indexExpr)匹配数组和过程调用:

lExpression :
    lExpression whiteSpace? LPAREN whiteSpace? argumentList? whiteSpace? RPAREN                                     # indexExpr
    | lExpression mandatoryLineContinuation? DOT mandatoryLineContinuation? unrestrictedIdentifier                  # memberAccessExpr
    | lExpression mandatoryLineContinuation? EXCLAMATIONPOINT mandatoryLineContinuation? unrestrictedIdentifier     # dictionaryAccessExpr
    | ME                                                                                                            # instanceExpr
    | identifier                                                                                                    # simpleNameExpr
    | DOT …
Run Code Online (Sandbox Code Playgroud)

parsing antlr4

5
推荐指数
1
解决办法
123
查看次数

如何从源代码为任何应用程序创建数据流图 (DFG/SDFG)

我进行了大量研究,以弄清楚如何从应用程序的源代码为应用程序创建 DFG。对于某些应用程序,例如 MP3 解码器、JPEG 压缩和 H.263 解码器,可以在线使用 DFG。

我无法弄清楚如何从源代码中为 HEVC 等应用程序创建 DFG?是否有任何工具可以为此类复杂的应用程序立即生成数据流图,还是必须手动完成?

请就此事给我建议。

编辑:我将 Doxygen 用于 HEVC,我可以看到不同的功能如何相互交互。然而,每个函数都有许多入口和出口点,一段时间后 Doxygen 的输出变得太混乱而无法理解。

我还看了 StreamIt:http ://camlunity.ru/swap/Library/Conflux/Stream%20Programming/streamit-cc_stream_graph_programming_language.pdf

它看起来很方便,但它为更简单的应用程序(如 MP3 解码器)生成的图表太复杂了。为了生成连贯的 DFG,我是否必须重新编写整个源代码?

algorithm parallel-processing open-source dataflow data-structures

5
推荐指数
1
解决办法
2988
查看次数