有没有办法在我需要之前跳过令牌?为了更清楚,这里有一个尽可能接近我想要的语法:
grammar example;
file : statement* EOF ;
statement : ID EOL
| '{' (EOL statement*)? '}' EOL
;
EOL : ('\r'? '\n' | '\r') -> skip ;
WHITESPACE : [ \t]+ -> skip ;
希望我的意图很明确:在正常情况下会跳过所有空格(包括换行符),但我可以随时要求换行符,所以
foo
{
bar
}
baz
符合语法,但不适合
foo {
bar
} baz
或
foo bar
{
baz
}
有没有办法做到这一点,或者我只需要在语法中加入很多EOL*
?
答案 0 :(得分:0)
不久前,我回答了另一个需要相同机制的问题 有关详细信息,请参阅here。
基本上,您可以通过提供自己的自定义TokenStream
来实现此目的,该自定义populateCashierRiskProfiles() {
const that = this;
//// Observable technique
this.service.getCashierRiskProfiles()
.subscribe((riskProfiles) => {
that.cashierRiskProfiles = riskProfiles
});
}
实现了一种跳过空格或根据其设置将其提供给解析器的机制。