有没有可用的方法或库可用于从Java字节码构建解析树?我的实际目标是创建AST。我知道有一些库可用于从源代码构建AST,只是想知道仅从字节码构建AST的方法。
我正在尝试使用#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)
谢谢 !!
排除将一种高级语言转换为另一种语言的编译器,编译为机器代码的编译器是否需要用汇编编写?
compiler-construction programming-languages machine-code low-level
原谅设计非常糟糕的伪代码,但我希望它能解决这个问题:
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].
我知道在C/C++和Java中,程序的入口点就是函数main(),
现在我有以下两个问题,
用MASM,NASM和其他语言编写的程序入口点是什么?
什么是CPU知道在哪里找到程序入口点的惯例?
== - 编辑 - ==
问题2不是一个有意义的问题,因为CPU负责找到入口点是错误的.没有这样的惯例.见Eric Lippert澄清.
我是一个入门级的R用户.可能这个问题听起来很简单,但如果有人可以提供帮助,那将会很棒.R编码中这个符号的含义是什么......
%>%
Run Code Online (Sandbox Code Playgroud)
谢谢
因此,Python有一种命令行的东西,Linux bash(显然)也是如此,我确信其他编程语言也可以,但C++呢?如果没有,为什么必须首先编译C++脚本然后运行?
所以,我在他们的官方文档上阅读有关比特币脚本的内容,并发现这句话:" 脚本很简单,基于堆栈,并且从左到右处理.有目的地没有图灵完整,没有循环. "我试图推理很难,但无法理解为什么有人会使一种语言" 有目的地非图灵完整 ".这是什么原因?如果一种语言成为图灵完成会怎样?并进一步扩展," 无循环 " 是否与非图灵完成的脚本有关?
scripting programming-languages turing-machines turing-complete bitcoin
是否有任何编程语言实现逻辑运算的参数交换(例如AND,OR)以便更快地进行评估?
示例(我认为这种方法可以用像Haskell这样的惰性评估语言实现)
A和B.B评估为"True"并且A未评估IF A OR BIF B OR AAhaskell programming-languages lazy-evaluation multiple-languages
自从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库.
是这样吗?或者是一些编程语言更好地隐藏其依赖关系?