|
2
|
| java.is.for.desktop · 技术社区 · 16 年前 |
|
|
1
4
关于标记器的一句话标记器(*TokenManager)匹配尽可能多的输入字符。PI_数据是“~[](1个字符),因此它将匹配任何单个输入字符 如果 它找不到更长的匹配项。PI_END是“?”>(2个字符),因此它将始终匹配,而不是PI_数据。你语法的这一部分是正确的。 意外的嫌疑犯问题其实可能来自名字。你没有写下这个代币的实际定义,所以我只能假设一下。如果名称的定义是 太贪婪了 ,它将匹配状态PROC_INST中的太多输入字符,并且您可能永远不会遇到PI_数据或PI_END。 小心一个“(…)+”用空格,或者邪恶的“(~[])*”吃掉所有东西直到EOF。 其他嫌疑人我看到的一个潜在问题是,PI_目标可能会被匹配好几次,尽管您希望PI_数据会被匹配。再一次,我只能猜测,因为我没有名字的定义。 您可能想澄清的另一点是:您定义了WSS令牌,但没有在state PROC_INST中使用它。它应该是PI_数据的一部分吗?如果没有,你可能想跳过它。 不要滥用标记器如果你发现你不能让标记器服从你,你可能想把棘手的部分移到解析器那里。在您的情况下,可能很难区分PI_目标和PI_数据(如上所述)。 解析器可以 预料 PI目标之后是PI数据,而标记化器不能(或几乎不能)对从一个标记到下一个标记有期望。 解析器的另一个优点是,您甚至可以编写Java代码来窥视下一个标记并做出相应的反应。这应该被视为最后的手段,但在您必须将多个令牌连接到一个已知的令牌时,这可能很有用。这可能就是你在这里寻找的(以PI_END为主题) 终结者令牌 ). 最后,一个技巧下面是一个简化语法的技巧:
JavaCC(稀疏…)中提供了有关在标记器操作中操作标记图像的详细信息文档这就像设置StringBuffer的长度一样简单。 |
|
2
0
语法的一个问题是WSS只在默认状态下应用。重写为
错误消息是,它本应为WSS,但发现了“”。 至于排除整个字符串,常见问题解答中概述了几种方法。 |
|
|
John Veridan · 在Python笔记本中仅选择列[无行] 8 年前 |
|
|
seanysull · 修改regex以包含连字符单词 8 年前 |
|
|
Ovaflow · 使用nltk中的标记集计算语音中的不同单词 8 年前 |
|
|
Laurent R · 根据空格和标点符号标记,标点符号保留 8 年前 |
|
|
mrfr · StreamTokenizer在遇到斜杠时停止 8 年前 |
|
|
Rose · Elasticsearch:术语搜索不适用于特殊字符 8 年前 |
|
|
vakarami · 用于提取文件名的模式标记器 8 年前 |
|
|
Konstantin · 用Ruby将单词分解成字母 8 年前 |