私は算術式にこの文法の助けが必要です。ANTLR4:算術式の文法 - ゼロチェックによる除算、キーワードチェック
0で除算しようとすると、またはVHDL keywords(ターゲット言語)を変数名として使用すると、エラーメッセージが表示されます。
しかし、私はANTLRに新しいですし、私はこの文法を拡張する方法を見つけ出すカント:
grammar arithmetic;
@header {
package generated;
}
stat
: Left = VARIABLE Op = ASSIGMENT Right = expr # Assigment
;
expr
: '(' Exp = expr ')' # Parens
| MINUS Exp = expr # UnaryMinus
| Left = expr Op = (TIMES | DIV) Right = expr # MulDiv
| Left = expr Op = (PLUS | MINUS) Right = expr # AddSub
| (VARIABLE | CONSTANT) # Element
;
ASSIGMENT : '=' ;
PLUS : '+' ;
MINUS : '-' ;
TIMES : '*' ;
DIV : '/' ;
LPAREN : '(' ;
RPAREN : ')' ;
VARIABLE : (LETTER+|DIGIT+|'_')+ ;
CONSTANT : INTEGER ;
INTEGER : DIGIT+ ;
LETTER : ('a' .. 'z') | ('A' .. 'Z') ;
DIGIT : ('0' .. '9') ;
WS : [ \r\n\t] + -> skip ;
0による除算は、コンパイル時ではなく、実行時に発生します。 ANTLRシステムはすでにキーワードと識別子を区別しています。あなたの質問は理にかなっていません。 – EJP
私はVHDLコードに式をコンパイルしています。だから、私は "abs"、 "access"、 "after"、 "alias"、 "all"、 "and"、 "architecture"、 "array"、 "assert"、 "attribute"などのVHDLキーワードを取り除く必要があります。 、 "begin"、 "block"、 "body"などです。上記のキーワードは単なる例であり、thnxを編集します。 – Samuel