1
내가 그렇게 ANTLR 4를 사용하고 '입력에서 어떤 대안'ANTLR 4 : 잘못된 문법과
import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.TokenStream;
public class Builder
{
public static void main(String[] args)
{
CharStream input = new ANTLRInputStream("ON M1==2 && M3 == 5 && (M2 > 1 || M5 <= 5.0) "
+ "DO P5:42 P4:10");
ExprLexer lexer = new ExprLexer(input);
TokenStream tokens = new CommonTokenStream(lexer);
ExprParser parser = new ExprParser(tokens);
ExprParser.ExpressionContext uu = parser.expression();
for (int i = 0; i < uu.getChildCount(); ++i)
System.out.println(uu.getChild(i));
}
}
을 다음과 같은 문법 : 나는 다음과 같은 출력을
grammar Expr;
options
{
// antlr will generate java lexer and parser
language = Java;
}
WS : [ \t\r\n]+ -> skip ;
OP : '&&' | '||';
COMP : '==' | '<' | '>' | '<=' | '>=' | '!=';
INT : [0-9]+;
REAL : INT '.' INT | INT;
ACTION : 'P' INT ':' INT;
MEASURE : 'M' INT;
// ***************** parser rules:
cond : MEASURE COMP REAL;
condexpr : '(' condexpr ')' | cond OP condexpr | cond;
actionexpr : ACTION actionexpr | ACTION;
expression : 'ON' condexpr 'DO' actionexpr;
:
line 1:7 no viable alternative at input 'M1==2'
ON
[29]
DO
[31]
나는 내 문법에 오류가 있다고 생각하지만 나는 그것을 볼 수 없다. 아이디어가 있습니까?
귀하의 도움에 대해서는 미리 감사드립니다.
완벽하고 오류는 없습니다. – GlinesMome
Brilliant. 'fragment' 키워드에 대한 좋은 예입니다. 이것은 AntrWorks가 그래픽 출력의 오류를 강조 표시 할 때 큰 도움이 될 것입니다. –
안녕하세요 Mr.Sam, 귀찮게해서 죄송합니다. 유니 코드 (규칙 이름이 아닌 규칙 본문)와 감사 =) http://stackoverflow.com/questions/에서 규칙 이름을 작성하는 것과 관련하여 여기 내 문제를 살펴 보시기 바랍니다. 30614712/write-a-grammar-rule-in-unicode-antlr-4 –