你们好啊。
您如何看待这两条规则来解析空格和识别我必须翻译的文件的不同行?
1.
line: NEW_LINE {$$ = System.lineSeparator();}
| line NEW_LINE {$$ = $1 + System.lineSeparator();}
where:
NEW_LINE = \r\n|\n|\r in Jflex2.
whitespace: WHITESPACE {$$ = " ";}
| whitespace WHITESPACE {$$ = $1 + " ";}
where:
WHITESPACE = [ \t] in Jflex他们是正确的吗?感谢所有人
发布于 2014-05-16 08:52:43
line: NEW_LINE {$$ = System.lineSeparator();}
| line NEW_LINE {$$ = $1 + System.lineSeparator();},其中:
NEW_LINE = \r\n|\n|\r in Jflex如果你真的不关心多个换行符,就像这个语法所暗示的那样,在词法分析器中收集它们:
NEW_LINE = (\r\n|\n|\r)+ return NEW_LINE;而不在解析器中:
line : NEW_LINE { $$ = System.lineSeparator(); }空格通常包括行终止符,除非它们在语法中很重要(看起来很重要),但也包括换行符:
WHITESPACE [ \t\f]同样,在lexer中收集所有数据要比在解析器中收集要高效得多:
WHITESPACE [ \t\f]+
whitespace: WHITESPACE { $$ = strdup(yytext); }请注意,无论何时以$1, $2,等形式重新出现,它都必须是free()-d,并且不能直接复制到$$.
但是通常空格根本不会出现在语法中,它只是被lexer忽略了:
WHITESPACE [ \t\f]+ ;除非你真的在语法中真的需要它。这几乎是不可能的。您应该能够使用词法分析器返回给您的非空格标记。
https://stackoverflow.com/questions/23690360
复制相似问题