ANTLR 如何区分相同类型的输入参数

编程入门 行业动态 更新时间:2024-10-27 23:30:40
本文介绍了ANTLR 如何区分相同类型的输入参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时送ChatGPT账号..

如果我有我的输入消息:

If I have my input message:

姓名 (乔恩、泰德)不是(彼得);

name IS (Jon, Ted) IS NOT (Peter);

我想要这个 AST:

      name
       |
    |-----|
   IS   IS NOT
    |     |
    |    Peter
 |----|
Jon  Ted

但我收到:

                name
                  |
        |-----------------|
       IS              IS NOT
        |                 |
        |                 |
   |----|-----|      |----|-----|
  Jon  Ted  Peter   Jon  Ted  Peter 

我的语法文件有:

...

expression
    |   NAME 'IS' OParen Identifier (Comma Identifier)* CParen 'IS NOT' OParen 
Identifier (Comma Identifier)* CParen
    ->  ^(NAME ^('IS' ^(Identifier)*) ^('IS NOT' ^(Identifier)*))
    ;

...

NAME
    :   'name'
    ;

Identifier
    :   ('a'..'z' | 'A'..'Z' | '_' | '.' | Digit)*
    ;

我如何区分什么属于"是",什么属于不是"?

How can I differentiate what "belongs" to the 'IS' and what to belongs to the 'IS NOT' ?

推荐答案

应该这样做:

expression
 : NAME IS left=id_list IS NOT right=id_list -> ^(NAME ^(IS $left) ^(NOT $right))
 ;

id_list
 : '(' ID (',' ID)* ')' -> ID+
 ;

IS : 'IS';
NOT : 'NOT'; // not a single token that is 'IS NOT'

ID
 : ('a'..'z' | 'A'..'Z' | '_' | '.' | Digit)+ 
   // Not `(...)*`: it should always match a single char!
 ;

这篇关于ANTLR 如何区分相同类型的输入参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

更多推荐

[db:关键词]

本文发布于:2023-04-20 07:34:35,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/979028.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:参数   类型   ANTLR

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!