Semantic predicates in ANTLR4?

前端 未结 1 706
心在旅途
心在旅途 2020-12-03 07:56

How would you translate this portion of code written in ANTLR 3 into ANTLR 4?

expr: (Identifier \'.\')=> (refIdentifier)
  | (Identifier \'!\')=> (refI         


        
相关标签:
1条回答
  • 2020-12-03 08:29

    In ANTLR v4, there are no longer gated semantic predicates, { ... }?=>, and there are also no longer syntactic predicates, ( ... )=>, because the parsing algorithm used in v4 can resolve the ambiguities (the need for such predicates are no longer needed). So, this should just work for you:

    expr
     : refIdentifier
     | refIdentifier
     | lambdaExpression
     ;
    

    Note that there is just one type of predicate in v4: semantic predicates, { ... }?. If you need to inspect the contents of a token, for example, you can do it like this:

    id_capitals_only
     : {_input.LT(1).getText().matches("[A-Z]+")}? ID
     ;
    
    ID
     : [a-zA-Z]+
     ;
    

    EDIT

    And as Sam Harwell mentions in the comments:

    The semantic predicates {...}? in V4 work like the gated semantic predicates did in V3. The ungated predicates from V3 do not have a counterpart in ANTLR 4.

    0 讨论(0)
提交回复
热议问题