我正在为Excel公式编写词法分析器和解析器。
在Excel中,我们可以为单元格指定名称。例如,abc
是有效名称,而禁止命名单元格B2
以避免与单元格混淆
B2
。因此,一旦我们遇到公式=B2
,我们就确定B2
引用的是单元格而不是用户定义的名称。
在我的lexer_formula.mll
中,我定义了标识符:
let lex_cell = ['A' - 'Z']+ ['0' - '9']+ (* regular expressions to include all the cells *)
let lex_name = ['A' - 'Z' '0' - '9']+ (* regular expressions to include all the names *)
但像B2
这样的字符串匹配lex_cell
和lex_name
,有人知道我怎么能告诉词法分析者先考虑lex_cell
,然后{{1} }?将lex_name
放在lex_cell
之前的lex_name
是否足够?
答案 0 :(得分:0)
根据ocamllex manual,将lex_cell
放在第一位就足够了:
如果多个正则表达式与输入的前缀匹配,则应用“最长匹配”规则:选择与输入的最长前缀匹配的正则表达式。如果是tie,则会选择规则中较早出现的正则表达式。