词法分析器中的优先顺序

时间:2016-05-30 02:50:45

标签: lexical-analysis ocamllex

我正在为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_celllex_name,有人知道我怎么能告诉词法分析者先考虑lex_cell,然后{{1} }?将lex_name放在lex_cell之前的lex_name是否足够?

1 个答案:

答案 0 :(得分:0)

根据ocamllex manual,将lex_cell放在第一位就足够了:

  

如果多个正则表达式与输入的前缀匹配,则应用“最长匹配”规则:选择与输入的最长前缀匹配的正则表达式。如果是tie,则会选择规则中较早出现的正则表达式。