我正在编写一个工具来解析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类.有一个虚拟的游客回国true的VisitStmt,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时解决这个问题.传递 …
我正在使用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) 我正在使用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) 以下是我的语法规则:
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(不确定这是否是正确的方法...).但是我不知道如何获得他们的行号.
有帮助吗?
生产者/消费者和读者/作家很容易想到,但是餐饮哲学家呢?在什么样的情况下,N个进程和N个资源将位于环形拓扑上并相互交错?我可以想到N个进程争用M个资源,但是在这种情况下,每个进程都可以使用任何两个资源。
维基百科说Dijkstra用它来模拟竞争磁带机外围设备的计算机。这种情况在现代仍然存在吗?
我正在优化 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) 我正在使用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) 我有一个地图,并希望手动进一步分片,简化的代码是
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) clang ×2
go ×2
xtext ×2
concurrency ×1
eclipse ×1
libclang ×1
parsing ×1
pickle ×1
postgresql ×1
pprof ×1
psycopg2 ×1
python ×1
validation ×1