2014-05-15 48 views
0

Hy guys。空白和BYACC線

對於這兩個規則來說,解析空格和識別我必須翻譯的文件的不同行是什麼?

1.

line: NEW_LINE {$$ = System.lineSeparator();} 
     | line NEW_LINE {$$ = $1 + System.lineSeparator();} 

where: 
NEW_LINE = \r\n|\n|\r in Jflex 

2.

whitespace: WHITESPACE {$$ = " ";} 
      | whitespace WHITESPACE {$$ = $1 + " ";} 

where: 
WHITESPACE = [ \t]  in Jflex 

他們是正確的嗎?所有

回答

1
line: NEW_LINE {$$ = System.lineSeparator();} 
    | line NEW_LINE {$$ = $1 + System.lineSeparator();} 
感謝

其中:

NEW_LINE = \r\n|\n|\r in Jflex 

如果你真的不關心multliple換行,因爲這暗示語法,收集所有在詞法分析器:

NEW_LINE = (\r\n|\n|\r)+ return NEW_LINE; 

而不在解析器中:

line : NEW_LINE { $$ = System.lineSeparator(); } 

空白通常包括行終止,除非他們是在你的語法,他們似乎是顯著,而且換頁:

WHITESPACE [ \t\f] 

而且這又是更有效收集所有的詞法分析器而不是解析器:

WHITESPACE [ \t\f]+ 

whitespace: WHITESPACE { $$ = strdup(yytext); } 

注意,這必須是free() -d時,它重現爲$1,$2,等,而不是直接複製到$$.

但隨後通常空白不會出現在語法可言,它只是詞法分析器忽略:

WHITESPACE [ \t\f]+ ; 

,除非再次你真的真的需要它的語法。這是不太可能的。您應該能夠使用詞法分析器返回給您的非空白標記。