簡體   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