我正在尝试将Java中的命令行参数解析为以下用法:
Usage: gibl FILE
-h, --help Displays this help message.
-v, --version Displays the program version.
FILE Source file.
Run Code Online (Sandbox Code Playgroud)
使用Apache Commons CLI库,我知道我可以选择使用Option来解析-h和-v命令,然后使用CommandLine.getArgs()来获取剩余的参数FILE,然后根据需要进行解析,但实际上我想将其指定为OptionCLI中的一个。
目前,我执行以下操作:
if (cmd.getArgs().length < 1) {
System.out.println("Missing argument: FILE");
help(1); // Prints the help file and closes the program with an exit code of 1.
}
String file = cmd.getArgs()[0];
Run Code Online (Sandbox Code Playgroud)
但是,当我调用HelpFormatter.printHelp(String, Options)我的额外参数时,它不会包含在自动生成的帮助文本中。
我所追求的是这样的:
Option file = new Option("Source file.");
file.setRequired(true);
options.addOption(file);
Run Code Online (Sandbox Code Playgroud)
我有一个参数,但没有附加相应的选项标识符的地方,因此可以将其传递给 …
假设我写了一种编程语言;对于同名,我将其称为lang。
为了开始编写lang的漫长旅程,我决定从自己编写lang开始。我实际上不能运行它,因为没有什么可以运行自己运行的程序。
因此,我首先使用Java 为lang编写另一个编译器。这次,当我完成后,我决定将其转换为Bytecode,然后保留它。我现在有一个正在运行的编译器,它将把我所有的lang代码转换为Bytecode。
因此,我决定将自己的语言编译器插入我刚用Java编写的编译器中。然后,我将自编译器转换为Bytecode,然后剔除Java编译器。现在,我有了一个纯粹由自己编写的lang编译器,可以将其转换为Bytecode,以备使用。
这样就创建了一个可靠的程序,我理解了所有这些内容,但是我的问题是,相对于JVM的编译器设计,如果决定发布针对该语言的更新该怎么办?我该如何更新字节码?我是否只用旧版本重写了该语言的更新版本?
我问这是因为这是我想要做的。自己编写一种不存在的语言,然后通过首先使用Java创建编译器将其引导到JVM。
这与使用C ++所做的相同。先编写带有类的C,然后再编写C ++,最后,将带有类的C替换为自举的C ++。但是他们到底是怎么更新语言的呢?
我正在研究一个C++项目,并试图弄清楚如何制作一个"动态"变量.
在Python中,变量可以有多种类型:
variable = 0
variable = "Hello"
Run Code Online (Sandbox Code Playgroud)
在Java中,这也是(有些)可以实现的:
Object o = 0;
o = "Hello";
Run Code Online (Sandbox Code Playgroud)
从我能找到的与C++相关的内容中,没有object类型或"动态"对象.
我需要这样的原因,是我试图创建一个对象这需要在以下任一类型:
int,float,char,string,bool,和让我做操作,如:
object o = 0; // currently an int
o -= 2.5; // now a float
o += "Test"; // now a string
Run Code Online (Sandbox Code Playgroud)
这种变量有默认功能吗?如果没有,可以用宏struct,等等吗?
我发现了这样的事情:
template <typename name>
Run Code Online (Sandbox Code Playgroud)
但不知道如何使用它.
我在Eclipse编程,发现了一些奇怪的东西......
如果我创建一个这样的类:
public abstract class Test {
public Test(Object obj) {}
}
Run Code Online (Sandbox Code Playgroud)
任何儿童班显然都需要super()填写.
同样适用于:
public abstract class Test {
public Test(Object[] obj) {}
}
Run Code Online (Sandbox Code Playgroud)
那么为什么我的IDE不会在我执行以下操作时抱怨,而不提供super()?
public abstract class Test {
public Test(Object... obj) {}
}
Run Code Online (Sandbox Code Playgroud)
你说"只是运行程序,它会失败"之前,我用JUnit和程序运行正常,没有在扩展的类提供一个构造函数.我的问题是,为什么会发生这种情况?
子类看起来像这样:
public class Child extends Test {
// Should throw error.
}
Run Code Online (Sandbox Code Playgroud) 当我尝试编译以下代码(在下面的小片段中将其截断)时,
#include <iostream>
using namespace std;
template <typename value_type>
class Tree {
public:
Tree();
~Tree();
};
template <typename value_type>
const std::ostream& operator<<(const std::ostream& o, const Tree<value_type>& t) {
return o;
}
int main() {
Tree<int> tree;
cout << tree << endl;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
铛在Mac
error: reference to overloaded function could not be resolved;
did you mean to call it?
cout << tree << endl;
^~~~
Run Code Online (Sandbox Code Playgroud)
Debian Linux上的gnu gcc
error: no match for 'operator<<'
(operand types are
'const ostream …Run Code Online (Sandbox Code Playgroud) 我正在制作一个Lexer,并选择使用正则表达式来分割我的代币.
我正在研究所有不同的令牌,除了真正让我烦恼的是单词和标识符.
你看,我现有的规则如下:
我想要的例子:
_foo <- Invalid.
foo_ <- Invalid.
_foo_ <- Invalid.
foo_foo <- Valid.
foo_foo_foo <- Valid.
foo_foo_ <- Partially Valid. Only "foo_foo" should be picked up.
_foo_foo <- Partially Valid. Only "foo_foo" should be picked up.
Run Code Online (Sandbox Code Playgroud)
我正在接近,因为这是我现在拥有的:
([a-zA-Z]+_[a-zA-Z]+|[a-zA-Z]+)
除此之外,它仅检测下划线的第一次出现.我想要所有这些.
个人要求:
我宁愿将答案包含在一个组中,因为我已经围绕它们构建了我的tokeniser,除非我能够更好地改变我的设计,如果你能想到更好的处理方式.这是我目前使用的:
private void tokenise(String regex, String[] data) {
Set<String> tokens = new LinkedHashSet<String>();
Pattern pattern = Pattern.compile(regex);
// First pass. Uses regular expressions to split data and catalog …Run Code Online (Sandbox Code Playgroud) java ×4
c++ ×2
c++98 ×1
constructor ×1
extends ×1
identifier ×1
jvm ×1
jvm-bytecode ×1
lexer ×1
ostream ×1
python ×1
regex ×1
templates ×1
type-safety ×1
types ×1