gpt4 book ai didi

c - 我如何在 C 中对 unicode 字符进行 lex?

转载 作者:太空宇宙 更新时间:2023-11-03 23:24:55 24 4
gpt4 key购买 nike

我用 C 语言编写了一个词法分析器,它目前可以成功地对 ASCII 文件进行词法分析,但是我对如何对 unicode 进行词法分析感到困惑。我需要 lex 什么 unicode,例如我应该支持 utf-8、utf-16 等。Rust 或 Go 等语言支持什么?

如果有的话,有没有图书馆可以帮助我,尽管我更愿意自己尝试做,这样我就可以学习。即便如此,一个我可以阅读并从中学习的小型图书馆也很棒。

最佳答案

已经有 lex 版本(以及其他支持 UniCode 的词法分析器工具),它们列在维基百科页面上:List of Lexer Generators . Wikipedia Parser Page 上还有一个词法分析器工具列表。 .总之,以下工具处理 UniCode:

  • JavaCC - JavaCC generates lexical analyzers written in Java.
  • JFLex - A lexical analyzer generator for Java.
  • Quex - A fast universal lexical analyzer generator for C and C++.
  • FsLex - A lexer generator for byte and Unicode character input for F#

当然,还有 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 位,相同的编码都可以简单地工作,因为算法编码模式保持不变。

在不了解基础理论和实践的情况下,词法分析器的临时编码最终将有其局限性。我认为您会发现多阅读一些有关该领域的内容会有所帮助。

关于c - 我如何在 C 中对 unicode 字符进行 lex?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29659671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com