目前,我试图将PreProcessor实现为ANTLR4 for c#,并在查找相关信息时遇到了很大的困难。我在C#项目的C#源代码中的挖掘并没有真正成功,可悲的是.
我的目标是保留令牌偏移量(这样就不会被预处理的流抛出列和行)示例来粗略解释:
#define foo(bar) foobar(bar + bar * bar / 0.2)
int smthng = 2;
smthng += foo(12); //the ; should be at the same spot like the macro was a function
希望您能向我指出正确的文档,或者提供一个简单的示例解决
我在学野牛/跳蚤。我成功地使用bison/flex解析了一个简单的c代码文件。现在,我想知道如何使用bison/flex解析测试c代码中包含的头文件。它能做到吗?
为了简单起见,我附加了示例代码,以说明我的问题。
下面是包含头文件(.h)的测试文件。
test.c,它包含一个头文件header.h
#include <stdio.h>
#include "header.h"
int main (int c, int b)
{
bigNumber a; /* I wanted that when parser c
我使用C#版本来生成ANTLR4文件。我已经通过使用此选项TokenLabelType=Token使用了自定义令牌。一切都很好,但是c#编译器在MAtch(..)和input(...)中给出了错误,因为这不会类型转换为我的自定义标记。而ANTLR3为这个函数提供了正确的类型转换。我从这个类Antlr4.Runtime.CommonToken扩展了我自己的令牌。
C#编译器抛出此错误
Cannot implicitly convert type 'Antlr4.Runtime.IToken' to 'Grammar.ActionParser.Token'. An
我需要解释一下宏的定义和其他条件。
当我使用下面的函数时,我得到的值为5
#include <stdio.h>
#define CHANGE var
int var;
int main()
{
var = 5;
printf("%d",CHANGE);
}
输出:5
但如果我这样用:
#include <stdio.h>
#define CHANGABLE_VALUE var
int var;
int main()
{
var = 5;
#if CHANGABLE_VALUE == 5
printf("
我在Terrence的一篇文章中找到了代码(如下所示),该文章展示了如何在ANTLR3 for Java中处理包含文件。我试图将其添加到我在ANTLR4中使用的语法(带有C++目标)中,但是当我试图生成解析器时,我得到了错误
error(50): : syntax error: '^' came as a complete surprise to me
error(50): : syntax error: mismatched input '->' expecting SEMI while matching a rule
error(50): : sy
一旦初始化了解析器lexer并获得了translationUnit上下文,如何直接跳转到(最近的) ParserRuleContext,其中包含antlr4中的特定行和字符位置(CPP运行时)?
通常,我使用Listener模式来遍历translationUnit上下文。在每个访问的上下文中,我可以使用以下代码获得上下文的对应行和字符位置:
antlr4::Token* tokenclass = _tokenstream->get(myContext->getSourceInterval().a); // use ".b" if end of interval is
我无法说服windows上的avr-gcc包含另一个目录中的*.h文件:
>avr-gcc -Wa,-gdwarf2 -x assembler-with-cpp -c -mmcu=atmega256rfr2 halW1.S
C:\Users\me\AppData\Local\Temp\ccjzoYpN.s: Assembler messages:
C:\Users\me\AppData\Local\Temp\ccjzoYpN.s:6: Error: can't open halGccD.h for reading: No such file or directory
所需的文件位