词法分析器操作中不允许使用属性引用
attribute references not allowed in lexer actions
我找到了一个简单的语法来开始学习ANTLR。我把它放在 myGrammar.g 文件中。这是语法:
grammar myGrammar;
/* This will be the entry point of our parser. */
eval
: additionExp
;
/* Addition and subtraction have the lowest precedence. */
additionExp
: multiplyExp
( '+' multiplyExp
| '-' multiplyExp
)*
;
/* Multiplication and division have a higher precedence. */
multiplyExp
: atomExp
( '*' atomExp
| '/' atomExp
)*
;
atomExp
: Number
| '(' additionExp ')'
;
/* A number: can be an integer value, or a decimal value */
Number
: ('0'..'9')+ ('.' ('0'..'9')+)?
;
/* We're going to ignore all white space characters */
WS
: (' ' | '\t' | '\r'| '\n') {$channel=HIDDEN;}
;
当我使用这个命令时:
java -jar /usr/local/...(antlr path) /home/ali/Destop/...(myGrammar.g path)
我有这个错误:
myGrammar.g:39:36: attribute references not allowed in lexer actions: $channel
问题是什么,我该怎么办?
看来您使用的是antlr4,所以请将{$channel=HIDDEN;}
替换为-> channel(HIDDEN)
。
示例:
/* We're going to ignore all white space characters */
WS
: (' ' | '\t' | '\r'| '\n') -> channel(HIDDEN)
;
我也替换
WS: (' ' | '\t' | '\r'| '\n') {$channel=HIDDEN;};
有了这个:
WS : (' ' | '\t' | '\r'| '\n') -> skip;
成功了。
我找到了一个简单的语法来开始学习ANTLR。我把它放在 myGrammar.g 文件中。这是语法:
grammar myGrammar;
/* This will be the entry point of our parser. */
eval
: additionExp
;
/* Addition and subtraction have the lowest precedence. */
additionExp
: multiplyExp
( '+' multiplyExp
| '-' multiplyExp
)*
;
/* Multiplication and division have a higher precedence. */
multiplyExp
: atomExp
( '*' atomExp
| '/' atomExp
)*
;
atomExp
: Number
| '(' additionExp ')'
;
/* A number: can be an integer value, or a decimal value */
Number
: ('0'..'9')+ ('.' ('0'..'9')+)?
;
/* We're going to ignore all white space characters */
WS
: (' ' | '\t' | '\r'| '\n') {$channel=HIDDEN;}
;
当我使用这个命令时:
java -jar /usr/local/...(antlr path) /home/ali/Destop/...(myGrammar.g path)
我有这个错误:
myGrammar.g:39:36: attribute references not allowed in lexer actions: $channel
问题是什么,我该怎么办?
看来您使用的是antlr4,所以请将{$channel=HIDDEN;}
替换为-> channel(HIDDEN)
。
示例:
/* We're going to ignore all white space characters */
WS
: (' ' | '\t' | '\r'| '\n') -> channel(HIDDEN)
;
我也替换
WS: (' ' | '\t' | '\r'| '\n') {$channel=HIDDEN;};
有了这个:
WS : (' ' | '\t' | '\r'| '\n') -> skip;
成功了。