如果你有一个简单的C程序,比如
int main(void) {return 0;}
Run Code Online (Sandbox Code Playgroud)
它可以编译 gcc -o test test.c.
据我所知,gcc执行编译,组装然后链接.后两步是通过运行as和实现的ld.
我可以使用生成汇编代码gcc -S test.c.
你会在终端中输入什么内容,将汇编代码转换为可执行文件?
(这样做的原因是学习装配)
我有一个代表火车的数据结构,它可以由许多类型的汽车组成,例如火车引擎,谷物汽车,乘用车等等:
struct TrainCar {
// ...
Color color;
std::string registration_number;
unsigned long destination_id;
}
struct PowerCar : TrainCar {
// ...
const RealPowerCar &engine;
}
struct CargoCar : TrainCar {
// ...
const RealCargoCar &cargo;
bool full;
}
std::vector<TrainCar*> cars;
cars.push_back(new TrainCar(...));
cars.push_back(new TrainCar(...));
cars.push_back(new CargoCar(...));
cars.push_back(new CargoCar(...));
cars.push_back(new CargoCar(...));
Run Code Online (Sandbox Code Playgroud)
算法将遍历列车中的汽车,并决定如何路由/分流每辆车(是否将其保留在列车中,将其移至列车中的另一个点,将其从列车中移除).此代码如下所示:
std::vector<TrainCar*>::iterator it = cars.begin();
for (; it != cars.end(); ++it) {
PowerCar *pc = dynamic_cast<PowerCar*>(*it);
CargoCar *cc = dynamic_cast<CargoCar*>(*it);
if (pc) {
// Apply some PowerCar routing specific logic …Run Code Online (Sandbox Code Playgroud) 我有以下ANTLR语法:
grammar mygrammar;
ASSIGNMENT
: ID '=' INT
;
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
;
INT : '0'..'9'+
;
WS : ( ' '
| '\t'
| '\r'
| '\n'
) {$channel=HIDDEN;}
;
Run Code Online (Sandbox Code Playgroud)
只有ASSIGNMENT规则实际上是我的,其余的是ANTLRWorks 1.4.3添加的默认值.
当我在解释器中尝试语法时,诸如"a = 5"之类的字符串成功,但是诸如"b [space] = [space] 6"之类的字符串失败:由于空格,我得到MismatchedTokenException:

从阅读ANTLR网站,和
Ignore rules: WS和
{$channel=HIDDEN} 文本/语法规则,似乎应该忽略空格,但事实并非如此.
我究竟做错了什么?