标签: programming-languages

从Java字节码构造一个解析树/ AST

有没有可用的方法或库可用于从Java字节码构建解析树?我的实际目标是创建AST。我知道有一些库可用于从源代码构建AST,只是想知道仅从字节码构建AST的方法。

java parsing programming-languages bytecode

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

通过#define宏创建自定义类

我正在尝试使用#define创建一个宏,它允许我按需创建新类.这是我的代码:

#pragma once

#include "PDDefFileReader.h"

#define SET_LANG( lang ) *( new std::string( lang ) ) 

#define LANG( cName, lName )
class cName
{
public:
    cName()
    {
        _langName = SET_LANG( lName );                 <- HERE !!!!
        _reader = new PDDefFileReader( _langName );
    }
    ~cName(){}

    std::string Str(){ return _langName; }

private:
    PDDefFileReader* _reader;
    std::string _langName;
};
Run Code Online (Sandbox Code Playgroud)

所以我想知道如果我想将define的"lName"参数作为std :: string对象,我应该怎么做.现在(在"HERE !!!!"行)我收到错误:

Error: Identifier "lName" is undefined
Run Code Online (Sandbox Code Playgroud)

知道我想做什么是可能的吗?

为了给你一些背景,我正在做一个自定义的多语言阅读器.所以我可以通过以下方式简单地定义新语言:

LANG( Cpp, "cpp" )
LANG( Perl, "pl" )
Run Code Online (Sandbox Code Playgroud)

谢谢 !!

c++ programming-languages

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

编译为机器代码的编译器是否需要在汇编中编写?

排除将一种高级语言转换为另一种语言的编译器,编译为机器代码的编译器是否需要用汇编编写?

compiler-construction programming-languages machine-code low-level

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

为什么没有设计完全编译检查的语言?

原谅设计非常糟糕的伪代码,但我希望它能解决这个问题:

float sqrt takes float n : [0,inf)
    // fancy algorithm
    return result

void main
    x = sqrt -1             // Compilation error
    y = sqrt float.max      // This works
    z = (y + 1) * (y + 1)   // Compilation error (this would result in overflow)
Run Code Online (Sandbox Code Playgroud)

在编译期间,编译器会分析sqrt函数并将其表征为

sqrt : [0,float.max] -> [0, sqrt float.max[
Run Code Online (Sandbox Code Playgroud)

它通过对+, -, *, /运算符执行相同的操作来实现此目的.


main函数中,第一个语句不能编译,因为sqrt不接受负输入.第三个语句不编译,因为*运算符只接受会导致输出的输入[float.min, float.max].

programming-languages

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

不同语言的切入点

我知道在C/C++和Java中,程序的入口点就是函数main(),
现在我有以下两个问题,

  1. 用MASM,NASM和其他语言编写的程序入口点是什么?

  2. 什么是CPU知道在哪里找到程序入口点的惯例?

== - 编辑 - ==

问题2不是一个有意义的问题,因为CPU负责找到入口点是错误的.没有这样的惯例.见Eric Lippert澄清.

c assembly programming-languages entry-point

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

R中符号%>%的含义

我是一个入门级的R用户.可能这个问题听起来很简单,但如果有人可以提供帮助,那将会很棒.R编码中这个符号的含义是什么......

  %>%
Run Code Online (Sandbox Code Playgroud)

谢谢

programming-languages symbols r

1
推荐指数
2
解决办法
2万
查看次数

有C++命令行吗?

因此,Python有一种命令行的东西,Linux bash(显然)也是如此,我确信其他编程语言也可以,但C++呢?如果没有,为什么必须首先编译C++脚本然后运行?

c++ command-line programming-languages

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

为什么脚本语言会"有目的地变成非完整"?

所以,我在他们的官方文档上阅读有关比特币脚本的内容,并发现这句话:" 脚本很简单,基于堆栈,并且从左到右处理.有目的地没有图灵完整,没有循环. "我试图推理很难,但无法理解为什么有人会使一种语言" 有目的地非图灵完整 ".这是什么原因?如果一种语言成为图灵完成会怎样?并进一步扩展," 无循环 " 是否非图灵完成的脚本有关?

scripting programming-languages turing-machines turing-complete bitcoin

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

交换逻辑运算符参数以加快评估速度?

是否有任何编程语言实现逻辑运算的参数交换(例如AND,OR)以便更快地进行评估?

示例(我认为这种方法可以用像Haskell这样的惰性评估语言实现)

  1. 让我们说我们已经定义了两个谓词AB.
  2. 在程序执行期间,B评估为"True"并且A未评估
  3. 在后来的执行中我们有条件 IF A OR B
  4. 交换"OR"的参数,条件变为 IF B OR A
  5. 在不进行评估的情况下将条件评估为"真" A

haskell programming-languages lazy-evaluation multiple-languages

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

如何编程语言实现跨平台功能?

自从Swift成为开源并且linux端口缺乏费用以来,这更像是一个普遍的问题.

有许多跨平台编程语言.让我们以Go为例.(真棒)Go标准库有很多包.一些是基于原始数据类型的有用结构和函数.但其他人实现I/O,网络,操作系统和同步.

这与Swift和LLVM编译器基础结构相比如何?

对于clang我认为存在例如跨平台并发,我们可以交叉编译.但对于Swift来说,存在平台差异,其中Mac版本依赖于"Darwin.C"而Linux版本依赖于"Glibc".这导致一些尴尬的代码片段:

#if os(Linux)
import Glibc
#else
import Darwin.C
#endif
Run Code Online (Sandbox Code Playgroud)

...

#if os(Linux)
            let j = Int(random() % (count - i)))) + i
#else
            let j = Int(arc4random_uniform(UInt32(count - i))) + i
#endif
Run Code Online (Sandbox Code Playgroud)

Swift/LLVM是否总是在编译器的前端处理这些平台特定的功能,以便它们依赖于c库?或者他/他们会将它们作为编译器的一部分来实现吗?

我读到Go/Rust编译器本身是用Go/Rust编写的.这使我相信编译器的实现方式不同,每个操作系统都具有并发性,网络功能 - 独立于c库.

是这样吗?或者是一些编程语言更好地隐藏其依赖关系?

programming-languages llvm go swift

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