2016-05-30 28 views
0

我正在为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,然后lex_name?将lex_cell放在lex_name之前是否足以将rule token = parse

+0

你实际上使用ocamllex吗?你有很多标签,但你永远不会说你正在使用哪种扫描仪发生器。 – rici

+0

是的,我正在使用'ocamllex'。 – SoftTimur

回答

0

按照ocamllex manual,它足以把lex_cell第一:

如果几个正则表达式匹配输入时,“最长匹配”规则适用的前缀:正则表达式匹配的最长前缀输入被选中。如果匹配,则选择规则中较早出现的正则表达式。