小编Ray*_* Wu的帖子

libtooling找不到stddef.h或其他头文件

我正在编写一个工具来解析C系列源代码项目,基本上是在ubuntu 12.04上的clang 3.4(trunk 192426)上的这两个教程1 2之后.

根据官方教程,它说我能通过compile_commands.json通过-p,但是,如果我只输入$ ./main -p [path of compile_commands.json],它会抱怨缺少左右位置参数.看起来我仍然需要将所有文件名作为参数传递,如果项目非常庞大,这是不切实际的.我更喜欢它可以简单地解析指定的所有文件compile_commands.json而不询问,但无法找到如何打开它.

由于我找不到CommonOptionsParser的教程来做任何自定义的东西,我改用CompilationDatabase类.有一个虚拟的游客回国trueVisitStmt,VisitDecl并且VisitType因此我将跳过.该main功能是非常简单的:

int main(int argc, const char **argv) {
    string errorMsg = "";
    CompilationDatabase *cd = CompilationDatabase::autoDetectFromDirectory (argv[1], errorMsg);
    ClangTool Tool(*cd, cd->getAllFiles());

    int result = Tool.run(newFrontendActionFactory<ExampleFrontendAction>());

    return result;
}
Run Code Online (Sandbox Code Playgroud)

我选择opencv解析因为使用cmake gaurantee正确性compile_commands.json(对吗?).但是,出现了很多错误(附在最后).LibTooling抱怨它找不到stdarg.h,stddef.h也没有emmintrin.h.这是clang 的FAQ,但它说明了为什么会发生这种情况,但没有说明如何在使用libtooling时解决这个问题.传递 …

clang

12
推荐指数
3
解决办法
6416
查看次数

clang无法独立解析我的.h文件

我正在使用libclang的python绑定,但我认为这个问题是由libclang而不是python绑定引起的.

我有一个标题 object.h

#ifndef OBJECT_H
#define OBJECT_H

class Object {
public:
  int run();
};

#endif
Run Code Online (Sandbox Code Playgroud)

并实施 object.cpp

#include "object.h"

int Object::run() {
  int a = 0;
  return a*a;
}
Run Code Online (Sandbox Code Playgroud)

如果我访问翻译单元的object.hAST,那么最后一个AST节点就是VAR_DECL class Object它.它不会访问public:...部分.如果我用clang直接检查语法就会抱怨我的头文件是错误的.

$ clang -Xclang -ast-dump -fsyntax-only object/object.h
object/object.h:4:1: error: unknown type name 'class'
class Object {
^
object/object.h:4:13: error: expected ';' after top level declarator
class Object {
            ^
            ;
TranslationUnitDecl 0x7f816102d2d0 <<invalid sloc>>
|-TypedefDecl 0x7f816102d7d0 <<invalid sloc>> __int128_t '__int128'
|-TypedefDecl 0x7f816102d830 <<invalid …
Run Code Online (Sandbox Code Playgroud)

clang libclang

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

xtext处理左递归语法

我正在使用xtext 2.4并希望同时支持map和set,我的语法看起来像这样

<term> ::- <collection>
<collection> ::- <map> | <set>
<map> ::- '{' (<term> ':' <term> (',' <term> ':' <term> )*)? '}'
<set> ::- '{' (<term> (',' <term>)* )+ '}'
Run Code Online (Sandbox Code Playgroud)

所以它可以简化为

<term> ::- '{' (<term> ':' <term> (',' <term> ':' <term> )*)? '}' |
           '{' (<term> (',' <term>)* )+ '}'
Run Code Online (Sandbox Code Playgroud)

antlr抱怨这个语法开始左递归,我不知道为什么,因为它在右边有'{'.

即使我想要将相同的部分考虑在内,我也不知道如何在xtext中执行此操作,因为EObject现在被拆分为两个生成规则,并且解析的数据不能存储在同一个对象中.

任何帮助?

================================================== ==========================我写的对应的xtext语法是

grammar org.xtext.problem.Term with org.eclipse.xtext.common.Terminals

generate term "http://www.xtext.org/problem/Term"

Term:
    term = Collection
;

Collection:
    MyMap | MySet
; 

MyMap:
    {MyMap} '{'( keys+= Term ':' values += …
Run Code Online (Sandbox Code Playgroud)

eclipse compiler-construction parsing xtext

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

如何获取原始文档中EObject的位置(#-th行)?

以下是我的语法规则:

Stmts: (stmts += Stmt ';')* ;
Stmt: Stmt1 | Stmt2 | Stmt3 ... ;
Run Code Online (Sandbox Code Playgroud)

我想知道每个Stmt#是stmts中的#th stmt及其确切位置(原始文档中的#th行).这样我可以在用户犯错时指出位置.

我重写验证器构造函数并存储一个HashMap <Stmt, Integer>以获取每个Stmt#是stmts中的#th stmt(不确定这是否是正确的方法...).但是我不知道如何获得他们的行号.

有帮助吗?

validation xtext

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

餐饮哲学家的真实例子?

生产者/消费者和读者/作家很容易想到,但是餐饮哲学家呢?在什么样的情况下,N个进程和N个资源将位于环形拓扑上并相互交错?我可以想到N个进程争用M个资源,但是在这种情况下,每个进程都可以使用任何两个资源。

维基百科说Dijkstra用它来模拟竞争磁带机外围设备的计算机。这种情况在现代仍然存在吗?

concurrency synchronization dining-philosopher

5
推荐指数
2
解决办法
2210
查看次数

如何解释 go pprof/mutex 显示等待解锁?

我正在优化 Go 程序的性能。在查看互斥锁分析时,我得到了

> go tool pprof -seconds 30 -ignore .*Shopify.*  http://HOST/debug/pprof/mutex
(pprof) top 20
Active filters:
ignore=.*Shopify.*
Showing nodes accounting for 3.08mins, 91.03% of 3.39mins total
Dropped 82 nodes (cum <= 0.02mins)
    flat  flat%   sum%        cum   cum%
3.08mins 91.03% 91.03%   3.08mins 91.03%  sync.(*Mutex).Unlock
       0     0% 91.03%   0.06mins  1.75%  ....func2
       0     0% 91.03%   0.06mins  1.75%  ....func3
Run Code Online (Sandbox Code Playgroud)

代码片段是

     .          .    502:    w.mu.Lock()

     .          .    ... some calculation

     .   5.02mins    510:    w.mu.Unlock()
     .          .    511:
     .          .    512:    return nil
     .          . …
Run Code Online (Sandbox Code Playgroud)

go pprof

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

如何在python中通过psycopg2模块取消存储在postgresql中的二进制数据?

我正在使用cPickle和psycopg2将一些向量存储到数据库中.这是我存储二进制数据的代码

binary_vec = cPickle.dumps(vec, -1)
db.cur.execute('''
               INSERT INTO feature_vector (vector, id) 
               VALUES (%s, %s);
               ''', (psycopg2.Binary(binary_vec), thread_id)
db.conn.commit()
Run Code Online (Sandbox Code Playgroud)

但是,当我使用fetchall()加载我的数据时,类型是缓冲区.我找不到如何将此缓冲区对象恢复到列表(vec).

这就是我获取数据的方式

db.cur.execute("SELECT * FROM feature_vector;")
m = db.cur.fetchall()
Run Code Online (Sandbox Code Playgroud)

结果看起来像这样

[(3169187, <read-only buffer for 0x1002b0f10, size 3462, offset 0 at 0x1004a7430>), 
(3169275, <read-only buffer for 0x1002b0f50, size 3462, offset 0 at 0x1004a7570>), 
(3169406, <read-only buffer for 0x1002b0f70, size 3462, offset 0 at 0x10140b0b0>), 
(3169541, <read-only buffer for 0x10141c030, size 3462, offset 0 at 0x10140b2b0>), 
(3169622, <read-only buffer for 0x10141c050, size 3462, offset …
Run Code Online (Sandbox Code Playgroud)

python postgresql psycopg2 pickle

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

使用互斥锁但仍然可以进行并发映射写入

我有一个地图,并希望手动进一步分片,简化的代码是

const (
    dictShardNum = 16
    dictShardSize = 1 << 28
)

type shard struct {
    mu sync.Mutex
    m  map[int64]uint32
}

type dict struct {
    shards []shard
}

func newDict() *dict {
   shards := make([]shard, 0, dictShardNum)
   for i := 0; i < dictShardNum; i++ {
      shards = append(shards, shard{ m: make(map[int64]uint32) })
   }
   return &dict{ shards }
}

func (d *dict) insert(n int64) uint32 {
    shardNum := int(n % dictShardNum)
    shard := d.shards[shardNum]
    shard.mu.Lock()
    defer shard.mu.Unlock()

    tempID, ok := …
Run Code Online (Sandbox Code Playgroud)

go

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