Tag: 标记化

如何在实时语法荧光笔中处理多行注释?

我正在编写自己的文本编辑器,在Java中使用语法高亮显示,目前它只是在每次用户输入单个字符时解析并突出显示当前行。 虽然可能不是最有效的方式,但它足够好并且不会引起任何明显的性能问题。 在伪Java中,这将是我的代码的核心概念: public void textUpdated(String wholeText, int updateOffset, int updateLength) { int lineStart = getFirstLineStart(wholeText, updateOffset); int lineEnd = getLastLineEnd(wholeText, updateOffset + updateLength); List foundTokens = tokenizeText(wholeText, lineStart, lineEnd); for(Token token : foundTokens) { highlightText(token.offset, token.length, token.tokenType); } } 真正的问题在于多行注释。 要检查输入的字符是否在多行注释中,程序需要解析回最近出现的“/ *”,同时还要知道这种情况是出现在文字还是其他注释中。 如果文本量很小,这不会是一个问题,但如果文本包含20,000行代码,则可能必须在每个按键上扫描并重新突出显示20,000行代码,这将是非常低效的。 所以我的最终问题是:如何在语法高亮显示中处理多行令牌/注释,同时保持高效?

用于复杂数学表达式的高级标记生成器

我想标记一个由整数,浮点数,运算符,函数,变量和括号组成的字符串。 以下示例应该提亮问题的本质: 当前状态: String infix = 4*x+5.2024*(Log(x,y)^z)-300.12 期望的状态: String tokBuf[0]=4 String tokBuf[1]=* String tokBuf[2]=x String tokBuf[3]=+ String tokBuf[4]=5.2024 String tokBuf[5]=* String tokBuf[6]=( String tokBuf[7]=Log String tokBuf[8]=( String tokBuf[9]=x String tokBuf[10]=, String tokBuf[11]=y String tokBuf[12]=) String tokBuf[13]=^ String tokBuf[14]=z String tokBuf[15]=) String tokBuf[16]=- String tokBuf[17]=300.12 所有提示和解决方案将不胜感激。

Java StringTokenizer.nextToken()跳过空字段

我使用标签(/ t)作为分隔符,我知道我的数据中有一些空字段,例如: one->two->->three 其中 – >等于标签。 正如您所看到的,空白字段仍然被选项卡正确包围。 使用循环收集数据: while ((strLine = br.readLine()) != null) { StringTokenizer st = new StringTokenizer(strLine, “\t”); String test = st.nextToken(); … } 然而,Java忽略了这个“空字符串”并跳过该字段。 有没有办法绕过这种行为并迫使java在空字段中读取?