Antlr linphone line 2:0 required(...)+ loop与'V'字符不匹配

时间:2014-01-28 05:29:13

标签: antlr sip linphone

我在linphone sip decode antlr文件中制作.g文件的简单副本,以便清楚地表达。 我的问题是当我使用这个文件解码sip的第一行时,它有时会失败。 该文件如下所示:

    grammar sipmessage;
    options{
        language = Java;
        output = AST;
    }

    @lexer::header{
        package org.meri.antlr_step_by_step.parsers;
        import java.util.HashMap;
    }

    @parser::header{
       package org.meri.antlr_step_by_step.parsers;
       import java.util.HashMap;
    }

    status_line :    
        sip_version 
        sptab status_code {System.out.println($status_code.text);}
        sptab reason_phrase {System.out.println($reason_phrase.text);}
        CRLF
    ;

    sip_version   
        :    word;// 'SIP/' DIGIT '.' DIGIT;


    reason_phrase
       :    ~(CRLF)*;

    status_code     
        :    extension_code;

    word        
        :     
       (alphanum | mark   | '%'  
        | PLUS | '`' |
            LAQUOT | RAQUOT |
            COLON | '\\' | DQUOTE | SLASH | '[' | ']' | '?' | '{' | '}' 
        )+
    ;

    extension_code  :   DIGIT+;
    alphanum :  alpha | DIGIT ; 
    mark    :   '-' | '_' | '.' | '!' | '~' | STAR | '\'' | LPAREN | RPAREN ; 
    alpha   :   HEX_CHAR | COMMON_CHAR;     
    COMMON_CHAR :   'g'..'z' | 'G'..'Z' ;                

    HEX_CHAR:   'a'..'f' |'A'..'F';
    RPAREN  :   ')';
    LPAREN  :   '(';
    STAR    :   '*';
    DIGIT   : '0'..'9' ;
    PLUS: '+';
    COLON   :   ':';
    RAQUOT  :   '>';
    LAQUOT  :   '<';
    DQUOTE  : '"';
    SLASH   :   '/';

    SP  :   ' ';
    CRLF    : '\r\n';
    HTAB    : ' ';
    LWS :   (SP* CRLF)? SP+ ; //linear whitespace
    sptab : (SP|HTAB)+;

MyProblem是:解码str时:例如: “SIP / 2.0 200 OK。\ r \ nVia:SIP / 2.0 / TCP 192.168.26.116:46448;alias;branch=z9hG4bK.TteIOuQeu;rport\r\n” 它可以打印第一行的状态代码和原因权利。那就是200而且没问题。

但是如果我在Via之前的第一个\ r \ n之前添加一些空格, “SIP / 2.0 200 OK。\ r \ nVia:SIP / 2.0 / TCP 192.168.26.116:46448;alias;branch=z9hG4bK.TteIOuQeu;rport\r\n”

结果是如此错误。 打印出来的原因将变为“OK.ia:SIP / 2.0 / TCP 192.168.26.116:46448aliasbranchz9hG4bK.TteIOuQeurport”

我得到一个警告:“第2行:0要求(...)+循环与字符'V'上的任何内容都不匹配”

有人可以告诉我为什么,我不太擅长英语和Antlr。 提前谢谢!

0 个答案:

没有答案