public override void RecognitionException(RecognitionException e) { if (backtracking > 0) { return; } ParseTree ruleNode = callStack.Peek(); ParseTree errorNode = Create(e); ruleNode.AddChild(errorNode); }
public override void EnterRule(string filename, string ruleName) { if (backtracking > 0) { return; } ParseTree parentRuleNode = callStack.Peek(); ParseTree ruleNode = Create(ruleName); parentRuleNode.AddChild(ruleNode); callStack.Push(ruleNode); }
public override void ConsumeToken(IToken token) { if (backtracking > 0) { return; } ParseTree ruleNode = callStack.Peek(); ParseTree elementNode = Create(token); elementNode.hiddenTokens = this.hiddenTokens; this.hiddenTokens = new List <IToken>(); ruleNode.AddChild(elementNode); }
public override void ExitRule(string filename, string ruleName) { if (backtracking > 0) { return; } ParseTree ruleNode = callStack.Peek(); if (ruleNode.ChildCount == 0) { ruleNode.AddChild(EpsilonNode()); } callStack.Pop(); }
public void TestMismatchedTokenError() { Assert.Inconclusive("May be failing on just my port..."); Grammar pg = new Grammar( "parser grammar p;\n" + "prog : WHILE ID LCURLY (assign)* RCURLY;\n" + "assign : ID ASSIGN expr SEMI ;\n" + "expr : INT | FLOAT | ID ;\n"); Grammar g = new Grammar(); g.FileName = Grammar.IGNORE_STRING_IN_GRAMMAR_FILE_NAME + "string"; g.ImportTokenVocabulary(pg); g.SetGrammarContent( "lexer grammar t;\n" + "WHILE : 'while';\n" + "LCURLY : '{';\n" + "RCURLY : '}';\n" + "ASSIGN : '=';\n" + "SEMI : ';';\n" + "ID : ('a'..'z')+ ;\n" + "INT : (DIGIT)+ ;\n" + "FLOAT : (DIGIT)+ '.' (DIGIT)* ;\n" + "fragment DIGIT : '0'..'9';\n" + "WS : (' ')+ ;\n"); ICharStream input = new ANTLRStringStream("while x { i=1 y=3.42; z=y; }"); Interpreter lexEngine = new Interpreter(g, input); FilteringTokenStream tokens = new FilteringTokenStream(lexEngine); tokens.SetTokenTypeChannel(g.GetTokenType("WS"), 99); //System.out.println("tokens="+tokens.toString()); Interpreter parseEngine = new Interpreter(pg, tokens); ParseTree t = parseEngine.Parse("prog"); string result = t.ToStringTree(); string expecting = "(<grammar p> (prog while x { (assign i = (expr 1) MismatchedTokenException(5!=9))))"; assertEquals(expecting, result); }
public void TestNoViableAltError() { Grammar pg = new Grammar( "parser grammar p;\n" + "prog : WHILE ID LCURLY (assign)* RCURLY;\n" + "assign : ID ASSIGN expr SEMI ;\n" + "expr : {;}INT | FLOAT | ID ;\n"); Grammar g = new Grammar(); g.ImportTokenVocabulary(pg); g.FileName = "<string>"; g.SetGrammarContent( "lexer grammar t;\n" + "WHILE : 'while';\n" + "LCURLY : '{';\n" + "RCURLY : '}';\n" + "ASSIGN : '=';\n" + "SEMI : ';';\n" + "ID : ('a'..'z')+ ;\n" + "INT : (DIGIT)+ ;\n" + "FLOAT : (DIGIT)+ '.' (DIGIT)* ;\n" + "fragment DIGIT : '0'..'9';\n" + "WS : (' ')+ ;\n"); ICharStream input = new ANTLRStringStream("while x { i=; y=3.42; z=y; }"); Interpreter lexEngine = new Interpreter(g, input); FilteringTokenStream tokens = new FilteringTokenStream(lexEngine); tokens.SetTokenTypeChannel(g.GetTokenType("WS"), 99); //System.out.println("tokens="+tokens.toString()); Interpreter parseEngine = new Interpreter(pg, tokens); ParseTree t = parseEngine.Parse("prog"); string result = t.ToStringTree(); string expecting = "(<grammar p> (prog while x { (assign i = (expr NoViableAltException(10@[4:1: expr : ( INT | FLOAT | ID );])))))"; Assert.AreEqual(expecting, result); }
public ParseTreeBuilder(string grammarName) { ParseTree root = Create("<grammar " + grammarName + ">"); callStack.Push(root); }