java - jflex 语法中的空格分隔

标签 java jflex

假设我需要描述语言的简单语法

foo 2
bar 21

但不是

foo1

使用 jflex 我写了 smt

WORD=[a-zA-Z]+
NUMBER=[0-9]+
WHITE_SPACE_CHAR=[\ \n\r\t\f]

%state AFTER_WORD
%state AFTER_WORD_SEPARATOR

%%
<YYINITIAL>{WORD}               { yybegin(AFTER_WORD); return TokenType.WORD; }        
<AFTER_WORD>{WHITE_SPACE_CHAR}+ { yybegin(AFTER_WORD_SEPARATOR); return TokenType.WHITE_SPACE; }        
<AFTER_WORD_SEPARATOR>{NUMBER}  { yybegin(YYINITIAL); return TokenType.NUMBER; }        

{WHITE_SPACE_CHAR}+             { return TokenType.WHITE_SPACE; }

但我不喜欢用于表示单词和数字之间应该有空格的额外状态。如何简化我的语法?

最佳答案

解析时根本不需要空格标记。

摆脱 TokenType.WHITE_SPACE,当您在词法分析器中遇到空白时,忽略它而不是返回任何内容。

为防止 'foo1',为 [A-Za-z0-9] 添加另一个规则,并为其添加另一个未出现在语法中的标记类型;那么这是一个语法错误。

关于java - jflex 语法中的空格分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14588821/

相关文章:

java - 如何在 Mac OS Sierra 上安装 Jflex

java - 区分字符串和 flex

java - JAVA 文件中的 JFlex 编译错误

java - 阿姆斯特朗数java

java - JUnit 测试 : invoking parent class protected method

java - 用于从对象和/或 JSON 填充 HTML 模板的库

java - 带有 CUP 编译错误的 JFlex

java - 为什么 Symbol 的字段(左和右)总是返回 0?

java - 使用扫描器创建 ArrayList

java - 证书注册流程是什么?