繁体   English   中英

jflex语法中的空格分隔

[英]Whitespace separation in jflex grammar

假设我需要简单的语法来描述类似

foo 2
bar 21

但不是

foo1

使用jflex我写了像

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]添加另一个规则,并为其添加一个不在语法中显示的令牌类型; 那就是语法错误。

根据我对JFlex的了解,如果您能完全识别空格(似乎是这种情况),则不必使用额外的状态。 只需为“标识符”制定一条规则,为“数字”制定另一条规则。

%%
{WORD}    { return TokenType.WORD; }
{NUMBER}  { return TokenType.NUMBER; }

如果您的语言要求每一行都由一个标识符,一个空格和一个数字组成,则应通过句法分析(即解析器)而不是词法分析来检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM