小编mda*_*kin的帖子

在antlr4词法分析器中,如何获得一个将所有剩余"单词"作为未知标记捕获的规则?

我有一个antlr4 lexer语法.它有很多单词规则,但我也希望它为任何其他规则无法匹配的单词创建一个Unknown标记.我有这样的事情:

Whitespace : [ \t\n\r]+ -> skip;
Punctuation : [.,:;?!];
// Other rules here
Unknown : .+? ; 
Run Code Online (Sandbox Code Playgroud)

现在生成的匹配器卡子"〜"为未知的,但对于输入创建3"〜"未知令牌"~~~",而不是一个单一的"~~~"令牌.我该怎么做才能告诉lexer为未知的连续字符生成单词标记.我也试过"未知:.;" 和"未知:.+;" 没有结果.

编辑:在当前的antlr版本.+?现在抓住剩余的单词,所以这个问题似乎得到了解决.

antlr lexer antlr4

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

用于二元相关的SSE向量的Popcount?

我有这个简单的二进制相关方法,它比g3的__builtin_popcount(我认为在启用SSE4时映射到popcnt指令)更好地比x3-4和%25更好的表查找和Hakmem位twiddling方法.

这是简化的代码:

int correlation(uint64_t *v1, uint64_t *v2, int size64) {
  __m128i* a = reinterpret_cast<__m128i*>(v1);
  __m128i* b = reinterpret_cast<__m128i*>(v2);
  int count = 0;
  for (int j = 0; j < size64 / 2; ++j, ++a, ++b) {
    union { __m128i s; uint64_t b[2]} x;
    x.s = _mm_xor_si128(*a, *b);
    count += _mm_popcnt_u64(x.b[0]) +_mm_popcnt_u64(x.b[1]);
  }
  return count;
}
Run Code Online (Sandbox Code Playgroud)

我尝试展开循环,但我认为GCC已经自动执行此操作,因此我最终获得了相同的性能.您是否认为性能进一步提高而不会使代码过于复杂?假设v1和v2具有相同的尺寸和大小是均匀的.

我对它目前的表现感到满意,但我很好奇,看看它是否可以进一步改进.

谢谢.

编辑:修复了联合中的错误,事实证明这个错误使得这个版本比内置__builtin_popcount更快,无论如何我再次修改了代码,它现在再次比内置稍快(15%),但我认为不值得投资值得时间在此.感谢所有意见和建议.

for (int j = 0; j < size64 / 4; ++j, a+=2, b+=2) {
  __m128i x0 = _mm_xor_si128(_mm_load_si128(a), _mm_load_si128(b));
  count += …
Run Code Online (Sandbox Code Playgroud)

optimization performance x86 sse bit-manipulation

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

如何使用antlr 4 TokenStream作为可迭代流?

我使用antlr 4创建了一个词法分析器来标记土耳其语自然语言文本,我需要做的是拥有一个令牌流,我可以逐个获取令牌.如果我像这样使用它,CommonTokenStream返回一个List:

ANTLRInputStream inputStream = new ANTLRInputStream(input);
TurkishLexer lexer = new TurkishLexer(inputStream);
CommonTokenStream tokenStream = new CommonTokenStream(lexer);
List<Token> tokens = tokenStream.fill();
for (Token token : token) ...
Run Code Online (Sandbox Code Playgroud)

但是我不想构建一个令牌列表,因为我的输入可能很大,我只想要这样的东西:

for (Token token: tokenStream.next()) ...
Run Code Online (Sandbox Code Playgroud)

在获得EOF令牌之前我会迭代哪个.

是否有令牌流允许我迭代令牌?

lexer antlr4

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

x86上三角指令的错误是什么?

在哪里可以找到有关x86处理器上三角函数指令的错误范围的信息?

math x86

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

标签 统计

antlr4 ×2

lexer ×2

x86 ×2

antlr ×1

bit-manipulation ×1

math ×1

optimization ×1

performance ×1

sse ×1