我已经用C编写了一个Lexer,它目前成功地使用ASCII文件,但是我对如何使用unicode感到困惑。我需要什么unicode lex,例如我应该支持utf-8,utf-16等.Rust或Go等语言支持什么?
如果有的话,有任何图书馆可以帮助我,虽然我更愿意尝试自己做,所以我可以学习。即便如此,我可以阅读的小型图书馆也很棒。
答案 0 :(得分:1)
已经有lex版本(以及支持UniCode的其他词法工具),它们在WikiPedia页面上列表:List of Lexer Generators。 Wikipedia Parser Page上还有一个词法工具列表。总之,以下工具处理UniCode:
当然,W3.org使用的技术由@jim mcnamara在http://www.w3.org/2005/03/23-lex-U引用。
您说您已经在 C 中编写了自己的词法分析器,但您已将标记lex
用于名为lex
的工具;也许那是疏忽?
在评论中你说你没有使用正则表达式,但也想学习。学习语言识别理论是学习高效和有效词汇的关键。被识别的符号被分类为Chomsky Type 3 Language或Regular Language,可由Regular Expressions描述。正则表达式可以通过实现有限状态自动机(或Finite State Machine)的编码来实现。 The standard implementation for a finite state machine is coded by a loop containing a switch。大多数有经验的程序员应该知道并能够识别并利用这种形式:
while ( not <<EOF>> ) {
switch ( input_symbol ) {
case ( state_symbol[0] ) :
...
case ( state_symbol[1] ) :
...
default:
....
}
}
如果您使用此样式进行编码,则相同的编码可以简单地处理所处理的符号是8位还是16位,因为算法编码模式保持不变。
词汇分析器的Ad-Hoc编码在不了解基础理论和实践的情况下最终会有其局限性。我想你会发现在这个领域多读一点是有益的。