ANTLR语法中的电子表格FixedCell参考($1、$a1、$1等…)问题

ANTLR语法中的电子表格FixedCell参考($1、$a1、$1等…)问题,antlr,grammar,lexer,Antlr,Grammar,Lexer,我正在为一个web电子表格编辑功能,我需要识别单元格引用、范围引用,然后根据我的要求对它们着色。我能够识别单元格引用并为其上色,但无法识别固定单元格引用($1、$a1、$1等),因为它在输入美元(“$”)符号后抛出错误。有人能帮我吗 当我尝试将单元格引用输入为“$A$1”时,在为行引用输入第二个美元符号后,它不会抛出任何可行的异常,我不知道为什么。如何读取“$”符号以识别固定单元格引用 仅供参考,我已经扩展了语法发现@ 我正在使用语法进行单元格/范围引用,如下所示 CELLREFERENCE

我正在为一个web电子表格编辑功能,我需要识别单元格引用、范围引用,然后根据我的要求对它们着色。我能够识别单元格引用并为其上色,但无法识别固定单元格引用($1、$a1、$1等),因为它在输入美元(“$”)符号后抛出错误。有人能帮我吗

当我尝试将单元格引用输入为“$A$1”时,在为行引用输入第二个美元符号后,它不会抛出任何可行的异常,我不知道为什么。如何读取“$”符号以识别固定单元格引用

仅供参考,我已经扩展了语法发现@

我正在使用语法进行单元格/范围引用,如下所示

CELLREFERENCE
    :  '$'?('a'..'z'|'A'..'Z')+'$'?('0'..'9')+
    ;

RANGEREFERENCE
    : '$'?('a'..'z'|'A'..'Z')+'$'?('0'..'9')+ ':' '$'?('a'..'z'|'A'..'Z')+'$'?('0'..'9')+
    ;

This will work for identifying the colon,

RANGEREFERENCE : CELLREFERENCE ((':' CELLREFERENCE)=> ':' CELLREFERENCE)?;

Still not sure about the '$' issue in cell reference.
请在此处找到完整的语法:

grammar Excel;

options {
  output=AST;
  language=JavaScript;
}

tokens {
    // define pseudo-operations
    FUNC;
    CALL;
    NEGATE;
}

parse
  :  exp EOF -> exp
  ;

exp
  :  orExp
  ;

orExp
  :  andExp (OR^ andExp)*
  ;

andExp
  :  eqExp (AND^ eqExp)*
  ;

eqExp
    : relExp (( EQUALS | NOTEQUALS)^ relExp)*
    ;

relExp
    : addExp ( (LT^|LTEQ^|GT^|GTEQ^) addExp)*
    ;

addExp
    : multExp ( (PLUS^| MINUS^) multExp)*
    ;
multExp 
    : unaryExp (( MULT^ | DIV^ | MOD^ |POW^| IS^) unaryExp)*
    ;

unaryExp
  :  NOT atom -> ^(NOT atom)
  |  MINUS atom -> ^(NEGATE atom)
  |  ASSIGN atom -> ^(ASSIGN atom)
  |  atom
  ;

atom
  :  TRUE
  |  FALSE
  |  INT
  |  FLOAT
  |  function
  |  CELLREFERENCE
  |  RANGEREFERENCE
  |  '(' exp ')' -> exp
  ;

POW : '^';
DIV : '/';
MOD : '%';
MULT : '*';
PLUS : '+';
MINUS : '-';
LT   : '<';
LTEQ : '<=';
GT   : '>';
GTEQ : '>=';
EQUALS : '==';
ASSIGN: '=';
NOTEQUALS : '<>';
INT    : '0'..'9'+;
FLOAT  : ('0'..'9')* '.' ('0'..'9')+;
OR     : 'or' ;
AND    : 'and' ;
IS     : 'is' ;
NOT    : 'not' ;
TRUE   : 'true' ;
FALSE  : 'false' ;

function
    :   IDENT '(' ( exp (',' exp)* )? ')' -> ^(FUNC IDENT (exp)*)
    ;
CELLREFERENCE
    :  '$'?('a'..'z'|'A'..'Z')+'$'?('0'..'9')+
    ;

RANGEREFERENCE
    : '$'?('a'..'z'|'A'..'Z')+'$'?('0'..'9')+ ':' '$'?('a'..'z'|'A'..'Z')+'$'?('0'..'9')+
    ;

IDENT
    :   ('a'..'z' | 'A'..'Z') ('a'..'z' | 'A'..'Z' |'0'..'9')*
    ;   

SPACE  : (' ' | '\t' | '\r' | '\n') {$channel=HIDDEN;} ;

ERRCHAR : Err =. { /*console.log($Err);*/ } ;
语法Excel;
选择权{
输出=AST;
语言=JavaScript;
}
代币{
//定义伪操作
FUNC;
呼叫
否定;
}
作语法分析
:exp EOF->exp
;
经验
:orExp
;
orExp
:andExp(或^andExp)*
;
安第斯山脉
:eqExp(和^eqExp)*
;
eqExp
:relExp((等于| NOTEQUALS)^relExp)*
;
释放
:addExp((LT^ LTEQ^ GT^ GTEQ^)addExp)*
;
加法器
:multExp((加^减^)multExp)*
;
multExp
:unaryExp((MULT^ DIV^ MOD^ POW^ IS^)unaryExp)*
;
一元表达式
:非原子->^(非原子)
|负原子->^(负原子)
|分配原子->^(分配原子)
|原子
;
原子
:对
|假的
|INT
|浮动
|作用
|细胞参考
|范围参考
|“(“exp”)”->exp
;
战俘:“^”;
分区:“/”;
MOD:“”;
MULT:“*”;
加:“+”;
减:'-';
LT:'=';
等于:'=';
分配:'=';
NOTEQUALS:“”;
INT:'0'..'9'+;
浮点数:('0'..'9')*'。('0'..'9')+;
或:‘或’;
和:'和';
是‘是’;
不是‘不是’;
真:‘真’;
假:‘假’;
功能
:IDENT'('(exp(','exp)*)?')->^(FUNC IDENT(exp)*)
;
细胞参考
:“$”?(“a”…“z”|“a”…“z”)+“$”?(“0”…“9”)+
;
范围参考
:“$”?(“a”…“z”…“a”…“z”)+“$”?(“0”…“9”)+:“$”?(“a”…“z”…“a”…“z”)+“$”?(“0”…“9”)+
;
识别
:('a''z''a''z')('a''z''a''z''a''z''0''9'))*
;   
空格:(“”|’\t’|’\r’|’\n’{$channel=HIDDEN;};
ERRCHAR:Err=。{/*console.log($Err);*/};

我无法复制它

当我复制粘贴您的原始语法时(不带谓词
(…)=>
!),并将
parse
规则更改为:

parse
:(t=.{console.log('type:',$t.type,'text:',$t.text);})*EOF
//exp-EOF->exp
;
然后我生成一个lexer/parser:

java -cp antlr-3.3-complete.jar org.antlr.Tool Excel.g 其中Excel.tokens文件包含:

CELLREFERENCE=28 RANGEREFERENCE=29 CELLREFERENCE=28
RANGEREFERENCE=29I可以通过更改RANGEREFERENCE:CELLREFERENCE((“:”CELLREFERENCE)=>“:”CELLREFERENCE)的代码来修复冒号问题?;但是,仍然无法解决以“$”作为单元格参考的问题。感谢您抽出时间。我在下面详细解释了这一点。你可以在空闲时把它看一遍,让我知道语法上的错误~拉梅什 CELLREFERENCE=28 RANGEREFERENCE=29