天道酬勤,学无止境

tokenize

Antlr3 matching tokens without whitespace

Given the input "term >1", the number(1) and comparison operator(>) should generate seperate nodes in an AST. How can this be achieved? In my tests matching only occured if "c" and "1" where seperated with a space like so "term < 1". Current grammar: startExpression : orEx; expressionLevel4 : LPARENTHESIS! orEx RPARENTHESIS! | atomicExpression; expressionLevel3 : (fieldExpression) | expressionLevel4 ; expressionLevel2 : (nearExpression) | expressionLevel3 ; expressionLevel1 : (countExpression) | expressionLevel2 ; notEx : (NOT^)? expressionLevel1; andEx : (notEx -> notEx) (AND? a=notEx -> ^

2022-01-18 12:44:30    分类:问答    antlr   whitespace   tokenize   antlr3

How to implement XSLT tokenize function?

It seems like EXSLT tokenize function is not available with PHP XSLTProcessor (XSLT 1.0). I tried to implement it in pure XSL but I can't make it work : <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:func="http://exslt.org/functions" xmlns:exsl="http://exslt.org/common" xmlns:my="http://mydomain.com/"> <func:function name="my:tokenize"> <xsl:param name="string"/> <xsl:param name="separator" select="'|'"/> <xsl:variable name="item" select="substring-before(concat($string,$separator),$separator)"/> <xsl:variable name="remainder" select="substring-after(

2022-01-17 04:29:16    分类:问答    php   xml   xslt   tokenize

将文本拆分为句子,将句子拆分为单词:BreakIterator vs 正则表达式(Splitting text to sentences and sentence to words: BreakIterator vs regular expressions)

问题 我不小心回答了一个问题,原始问题涉及将句子拆分为单独的单词。 作者建议使用 BreakIterator 对输入字符串进行标记,有些人喜欢这个想法。 我只是没有那么疯狂:25 行复杂的代码怎么能比带有正则表达式的简单单行代码更好? 请解释一下使用 BreakIterator 的优点以及应该使用它的真实案例。 如果它真的如此酷和合适,那么我想知道:你真的在你的项目中使用BreakIterator的方法吗? 回答1 从该答案中发布的代码来看, BreakIterator似乎考虑了文本的语言和区域设置。 通过正则表达式获得这种级别的支持肯定会是一个相当大的痛苦。 也许这是它优于简单正则表达式的主要原因? 回答2 BreakIterator提供了一些很好的显式控制,并以嵌套方式干净地迭代每个句子和单词。 我不熟悉指定语言环境对您的确切作用,但我相信它有时也很有帮助。 它根本没有让我觉得复杂。 只需为句子级别设置一个迭代器,为单词级别设置另一个迭代器,将单词第一个嵌套在第二个中。 如果问题变成了不同的东西,那么您对另一个问题的解决方案可能就已经不在了。 但是,这种遍历句子和单词的模式可以做很多事情。 找出任何单词出现次数最多的句子。 连同那个词一起输出找出整个字符串中使用次数最多的单词。 找出每个句子中出现的所有单词查找在 2 个或更多句子中出现素数的所有单词 名单还在继续……

2022-01-15 23:40:11    分类:技术分享    java   regex   string   comparison   tokenize

Splitting text to sentences and sentence to words: BreakIterator vs regular expressions

I accidentally answered a question where the original problem involved splitting sentence to separate words. And the author suggested to use BreakIterator to tokenize input strings and some people liked this idea. I just don't get that madness: how 25 lines of complicated code can be better than a simple one-liner with regexp? Please, explain me the pros of using BreakIterator and the real cases when it should be used. If it's really so cool and proper then I wonder: do you really use the approach with BreakIterator in your projects?

2022-01-15 20:44:05    分类:问答    java   regex   string   comparison   tokenize

标记化模块中的 Python 2 换行标记(Python 2 newline tokens in tokenize module)

问题 我在 Python 中使用tokenize模块,想知道为什么有 2 个不同的换行符: NEWLINE = 4 NL = 54 任何会产生两个令牌的代码示例都将不胜感激。 回答1 根据python文档: 标记化.NL 用于指示非终止换行符的标记值。 NEWLINE 标记表示 Python 代码逻辑行的结束; 当逻辑代码行跨越多条物理行时,会生成 NL 令牌。 更多信息:https://docs.python.org/2/library/tokenize.html 回答2 Python 代码中至少有 4 种可能的'\n'情况; 其中 2 个由令牌编码: 语句终止换行符:tokenize.NEWLINE - 这是或多或少对应于 C 或 Java 的标记; . 任何不终止语句且不属于情况 3 或 4 的换行符:tokenize.NL。 多行字符串中的换行符。 在换行符出现的换行符\ - 与文档似乎表明的相反,这种情况根本不会产生任何标记。 因此下面的例子: # case 1 a = 6 b = 7 # case 2 answer = ( a * b ) # case 3 format = """ A multiline string """ # case 4 print "something that is continued" \ "on the following line."

2022-01-15 16:25:28    分类:技术分享    python   tokenize

Python 2 newline tokens in tokenize module

I am using the tokenize module in Python and wonder why there are 2 different newline tokens: NEWLINE = 4 NL = 54 Any examples of code that would produce both tokens would be appreciated.

2022-01-15 13:57:56    分类:问答    python   tokenize

传递多个多字符分隔符时,String.Split 方法如何确定分隔符优先级?(how does the String.Split method determine separator precedence when passed multiple multi-character separators?)

问题 如果您有此代码: "......".Split(new String[]{"...", ".."}, StringSplitOptions.None); 结果数组元素是: 1. "" 2. "" 3. "" 现在如果你颠倒分隔符的顺序, "......".Split(new String[]{"..", "..."}, StringSplitOptions.None); 结果数组元素是: 1. "" 2. "" 3. "" 4. "" 从这两个示例中,我倾向于得出结论,Split 方法在从左到右遍历数组的每个元素时递归地进行标记。 但是,一旦我们将包含字母数字字符的分隔符放入等式中,很明显上述理论是错误的。 "5.x.7".Split(new String[]{".x", "x."}, StringSplitOptions.None) 结果: 1. "5" 2. ".7" "5.x.7".Split(new String[]{"x.", ".x"}, StringSplitOptions.None) 结果: 1. "5" 2. ".7" 这次我们获得了相同的输出,这意味着基于第一组示例理论化的规则不再适用。 (即:如果分隔符的优先级始终根据数组中分隔符的位置确定,那么在最后一个示例中,我们将获得"5." & "7"而不是"5" & ".7" 。 至于为什么我浪费时间试图猜测

2022-01-15 06:59:19    分类:技术分享    c#   string   tokenize   stringtokenizer

how does the String.Split method determine separator precedence when passed multiple multi-character separators?

If you have this code: "......".Split(new String[]{"...", ".."}, StringSplitOptions.None); The resulting array elements are: 1. "" 2. "" 3. "" Now if you reverse the order of the separators, "......".Split(new String[]{"..", "..."}, StringSplitOptions.None); The resulting array elements are: 1. "" 2. "" 3. "" 4. "" From these 2 examples I feel inclined to conclude that the Split method recursively tokenizes as it goes through each element of the array from left to right. However, once we throw in separators that contain alphanumeric characters into the equation, it is clear that the above

2022-01-15 06:12:04    分类:问答    c#   string   tokenize   stringtokenizer

正则表达式/“正则表达式”中的正则是什么意思?(what does regular in regex/"regular expression" mean?)

问题 短语“正则表达式”中的“常规”是什么意思? 我听说正则表达式曾经是常规的,但不再是 回答1 正则表达式中的正则来自于它匹配正则语言。 形式语言理论中使用的正则表达式的概念与 PCRE 等引擎所称的正则表达式有很大不同。 PCRE 和其他类似引擎具有前瞻、条件和递归等功能,这使得它们能够匹配非常规语言。 回答2 它来自常规语言。 这是形式语言理论的一部分。 查看 Chomsky 层次结构以了解其他形式语言。 回答3 这表明它是一种常规语言。 正则表达式仍然很受欢迎。 有些人不喜欢它们,但它们仍然是匹配某些类型字符串的快速简便(如果您知道如何使用它们)的方式。 另一种方法通常是几行代码循环遍历字符串并提取您需要的位,这更令人讨厌! 我仍然经常使用它们(完全是双关语),给你一个我前几天用来匹配吉他和弦线条而不是歌词的用例。 它们也常用于电子邮件地址的基本验证等。 他们当然没有死。 回答4 我认为它来自正则表达式描述的语法类别的术语:正则语法(或“常规”语言)。 访问维基百科可能会回答该术语的来源。 现代正则表达式引擎实现了所有这些花哨的前瞻、模式重新匹配和子表达式计数功能,嗯,它们正在识别一类语法,它是正则语法的超集。 “经典”正则表达式以机械方式对应于称为“有限自动机”的理论机器。 这本身就是一个非常有趣的主题。

2022-01-15 05:02:02    分类:技术分享    regex   perl   parsing   tokenize

'IDENTIFIER' 规则还使用 ANTLR Lexer 语法中的关键字('IDENTIFIER' rule also consumes keyword in ANTLR Lexer grammar)

问题 在处理用于 Java 解析的 Antlr 3.5 语法时,注意到“ IDENTIFIER ”规则在 ANTLR Lexer 语法中消耗的关键字很少。 词法分析器语法是 lexer grammar JavaLexer; options { //k=8; language=Java; filter=true; //backtrack=true; } @lexer::header { package java; } @lexer::members { public ArrayList<String> keywordsList = new ArrayList<String>(); } V_DECLARATION : ( ((MODIFIERS)=>tok1=MODIFIERS WS+)? tok2=TYPE WS+ var=V_DECLARATOR WS* ) {...}; fragment V_DECLARATOR : ( tok=IDENTIFIER WS* ( ',' | ';' | ASSIGN WS* V_VALUE ) ) {...}; fragment V_VALUE : (IDENTIFIER (DOT WS* IDENTIFIER WS* '(' | ',' | ';')) ; MODIFIERS : (PUBLIC | PRIVATE | FINAL)+

2022-01-14 11:57:56    分类:技术分享    java   parsing   antlr   tokenize   antlr3