小编Ore*_*lom的帖子

GCC和Clang解析器真的是手写的吗?

似乎GCC和LLVM-Clang使用手写递归下降解析器,而不是机器生成,基于Bison-Flex,自下而上解析.

请问有人请确认是这种情况吗?如果是这样,为什么主流编译器框架使用手写解析器?

更新:这里有关此主题的有趣博客

c compiler-construction parsing compilation

84
推荐指数
5
解决办法
3万
查看次数

在单个集合中合并多个集合元素

我想知道是否有任何std库或boost工具可以轻松地将多个集合的内容合并为一个.

在我的情况下,我有一些我想要合并的整数组.

c++ stl set

58
推荐指数
4
解决办法
6万
查看次数

如何判断语言是否为LL(1)LR(0)SLR(1)

是否有一种简单的方法来确定语法是LL(1),LR(0),SLR(1)......只是从查看语法而不进行任何复杂的分析?

例如:要确定BNF语法是否为LL(1),您必须计算First和Follow集 - 在某些情况下这可能很耗时.

有谁知道如何更快地做到这一点?真的很感激任何帮助!

theory compiler-construction grammar parsing bnf

23
推荐指数
4
解决办法
3万
查看次数

Python 中 typedef 的等价物

定义(非类)类型的Python方法是什么:

typedef Dict[Union[int, str], Set[str]] RecordType
Run Code Online (Sandbox Code Playgroud)

python user-defined-types

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

::没有命名空间

考虑以下代码行:

::CGContextRef cgContext = cocoa::createCgBitmapContext( surface );
Run Code Online (Sandbox Code Playgroud)

为什么在::之前没有指定名称空间?这是否意味着它使用与您所在类相同的命名空间?

c++ namespaces

11
推荐指数
3
解决办法
1860
查看次数

配置Postfix以在Ubuntu上使用Gmail SMTP

我在这里使用这个在线指南,通过一些gmail帐户启用从linux(ubuntu)终端发送简单邮件和postfix.我已经完成了那里列出的步骤:

sudo apt-get install postfix mailutils libsasl2-2 ca-certificates libsasl2-modules
vim /etc/postfix/main.cf
Run Code Online (Sandbox Code Playgroud)

并添加以下行:

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_use_tls = yes
Run Code Online (Sandbox Code Playgroud)

然后编辑此文件:

vim /etc/postfix/sasl_passwd
Run Code Online (Sandbox Code Playgroud)

要添加指南中所说的行:

[smtp.gmail.com]:587    USERNAME@gmail.com:PASSWORD
Run Code Online (Sandbox Code Playgroud)

(当然有我自己的邮件和密码)然后最后:

sudo chmod 400 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd
Run Code Online (Sandbox Code Playgroud)

然后:

sudo /etc/init.d/postfix reload
Run Code Online (Sandbox Code Playgroud)

当我尝试发送一封简单的邮件时,没有任何反应:

echo "Test mail from postfix" | mail -s "Test Postfix" you@example.com
Run Code Online (Sandbox Code Playgroud)

(当然这里也有一些其他有效的电子邮件)

我究竟做错了什么?谢谢!

gmail smtp postfix

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

简单循环某个目录makefile中的文件

我可以轻松地从以下位置打印某个目录中的所有文件bash

$ cat go.sh
BASEDIR=~/Downloads
MYDIR=${BASEDIR}/ddd
for f in $(ls ${MYDIR}); do echo $f; done

$ ./go.sh
m.txt
d.txt
Run Code Online (Sandbox Code Playgroud)

当我尝试从中做类似的事情时,makefile效果不佳:

$ cat makefile
BASEDIR = ${HOME}/Downloads
MYDIR = ${BASEDIR}/ddd
all:
    for f in $(ls ${MYDIR}); do echo ${f}; done

$ make
for f in ; do echo ; done
Run Code Online (Sandbox Code Playgroud)

这是另一个不起作用的试验:

$ cat makefile
BASEDIR = ${HOME}/Downloads
MYDIR = ${BASEDIR}/ddd
all:
    for f in $(shell ls ${MYDIR}); do echo ${f}; done

$ make
for f in d.txt …
Run Code Online (Sandbox Code Playgroud)

bash ls makefile

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

具有类型提示的 const 方法的 python 等效项

我正在尝试找到与 C++const方法等效的 Python 方法。也就是说,禁止更改其类的任何数据成员的方法。

from typing import Final

age: Final = 2
age += 3               # <----- warn about this -- works!

class Person:
    def __init__(self, age: int) -> None:
        self.age = age
    def happy_birthday(self: Final[Person]) -> None:
        self.age += 1  # <----- warn about this -- how?
Run Code Online (Sandbox Code Playgroud)

我从未见过使用过类型提示self,所以它看起来有点奇怪(并且不起作用)

main.py:4: error: Cannot assign to final name "age"
main.py: note: In member "happy_birthday" of class "Person":
main.py:9: error: Final can be only used as …
Run Code Online (Sandbox Code Playgroud)

python constants type-hinting mypy

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

全局变量位于elf文件中的哪个位置

我想学习elf文件,但是当我想到全局变量,全局静态变量和范围静态变量时,我有些困惑.例如:

int a = 2;
int b;

static int c = 4;
static int d;

void fun(){
  static int e = 6;
  static int f;
}


int main(void){
   fun();
}
Run Code Online (Sandbox Code Playgroud)

谁能告诉每个变量属于哪个细分?在我看来, b,df属于.bss段和a,c以及e属于数据段,但我不知道全局静态变量和ELF文件的全局变量之间的差异.

c linux elf

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

Graphviz 点垂直对齐节点

我有以下 graphviz 点输入文件:

digraph structs {
rankdir = LR;
node [shape=record];
hashTable [label="<f0>0|<f1>1|<f2>2|<f3>3|<f4>4|<f5>5|<f6>6|<f7>7|<f8>8"];
node_1_0 [label="<f0> one|<f1> two |<f2> three"];
node_1_1 [label="<f0> un |<f1> deux|<f2> trois"];
struct3 [label="<f0> einz|<f1> swei|<f2> drei"];
hashTable:f1 -> node_1_0:f0;
node_1_0:f2  -> node_1_1:f0;
hashTable:f4 -> struct3:f0;
}
Run Code Online (Sandbox Code Playgroud)

渲染如下:

在此输入图像描述

如何让[one|two|third]节点与[un|deux|trois]节点垂直对齐?谢谢!

dot graphviz

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