【发布时间】:2012-12-19 11:50:10
【问题描述】:
使用 fslex 我想为一个模式返回多个标记,但我看不到如何实现它。甚至使用另一个返回多个令牌的规则函数也对我有用。
我正在尝试使用这样的东西:
let identifier = [ 'a'-'z' 'A'-'Z' ]+
// ...
rule tokenize = parse
// ...
| '.' identifier '(' { let value = lexeme lexbuf
match operations.TryFind(value) with
// TODO: here is the problem:
// I would like to return like [DOT; op; LPAREN]
| Some op -> op
| None -> ID(value) }
| identifier { ID (lexeme lexbuf) }
// ...
我在这里要解决的问题是匹配预定义令牌(请参阅:operations 映射),前提是 identifier 介于 . 和 ( 之间。否则,匹配应返回为ID。
我对 fslex 还很陌生,所以我很高兴看到正确方向的任何指示。
【问题讨论】:
-
该死,我似乎总是把这两个混淆 ;-) 我希望这个问题还是有意义的。
-
这可以解决(虽然不应该,您可能应该重新设计您的词法分析器) - 如果没有其他人这样做,我会在使用舒适的键盘后发布解决方案。