我使用用Antlr4编写的来生成C++目标解析器。
它有一些用Java编写的动作代码,所以我需要将它转换成C++以便它可以编译。
对于下面的代码,我不理解它的含义:
fragment
IdentifierStartChar
: // these are the valid identifier start characters below 0x7F
[a-zA-Z_]
| // these are the valid characters from 0x80 to 0xFF
[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F
是否有一种方法来解析c++源代码,并为每个变量获取它在其中声明的行?您可以忽略全局变量和函数参数,但它必须处理指针和任何用户定义的对象。
类似于:
int main(){
int x = 5,y = 6;
Car c1(1,2,3);
return 0;
}
预期产出:
x,2
y,2
c1,3
如果可以在c++或python中完成,则是首选的,但如果可以在任何其他语言中完成,则是可取的。
我一直在考虑做我自己的语言(实用性:这是一个思维实验)。我提出的一个想法是语言中的语义变异。您将编写本质上是语义正则表达式,并替换为等价的代码。你可以在D中看到一种不太直接的形式-他们有字符串混合可以转换成D代码。除了我要隐含地,以一种更循环的方式来做它们。
现在,我来自C++。因此,如果您考虑:
string a, b, c, d;
// do stuff
a = b + c + d;
这段代码会产生不同的时间。即使你有右值引用,你也会创建临时表,它们会被更有效地重用。但它们仍然存在,并且仍然浪费性能。我在想,在最简单的情况下,如何消除这些问题。您可以编写一个语义正则表达式,将其转换为最优化
在阅读之后,我想知道当主要的C++编译器解析这样的代码时会发生什么(关于AST):
struct foo
{
void method() { a<b>c; }
// a b c may be declared here
};
他们是像GLR解析器那样,还是以不同的方式来处理它?还有什么其他方法来解析这个和类似的案例呢?
例如,我认为有可能在解析完整个结构之后才解析方法的主体,但这真的可行吗?
昨天我参加了一次采访,在那里我看到了一个奇怪的节目片段。
乍一看,我就确定代码段中有编译错误。但是当我回到家,用C编译器手工尝试时,我发现我完全错了
见面试代码
#include<stdio.h>
void main()
{
for(int i=0;i=5;i=5)// here condition and increment are assigned
//wrongly and where I thought it is compilation
//error during i
对于c和c++相同的程序,当我们使用常量整数变量作为case标签时,它只在c++中有效,而在c中不有效,当我们使用常量整数数组成员作为case标签时,它对c和c++都无效。这种行为的主要原因是什么?
//for c
#include <stdio.h>
int main()
{
const int a=90;
switch(90)
{
case a://error : case label does not reduce to an integer constant
printf("error");
b
我使用的是基于eclipse的开发环境,称为STM32Cube IDE V1.5.1。我已经安装了PMD插件到相同的。PMD插件版本4.24.x和PMD版本6.35.x。在大多数链接上,我发现PMD可以用于java项目的代码分析,但是我找不到任何关于它是否可以用于C++项目的信息。如果它可以用于C++项目,任何人都可以直接我的链接。或者任何人都可以传递有关如何配置C++项目代码分析的PMD工具的信息。
致以最好的问候,萨蒂什
我想知道为什么没有像+=、-=、++、-=、<<=或x ? y : z这样的运算符(不是增强赋值.)在艾达?许多其他语言(C、C++、C#、Java、Perl)都有它们。
--示例(C/C++/.):
int a = 3;
a += 4; /* A */
// long: a = a + 4
a++; /* B */
// long: a = a + 1
a = ( a > 3 ? 10 : 5 ); /* C */
// long: ' if a > 3 then a = 10 else a = 5'
--示例(Ada):
a : integer