2016-05-30 27 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第一:

如果幾個正則表達式匹配輸入時,「最長匹配」規則適用的前綴:正則表達式匹配的最長前綴輸入被選中。如果匹配,則選擇規則中較早出現的正則表達式。