Compiler construction 在lexer中表示一个字符
我正在用OCaml为一种小型语言编写一个lexer,其语法部分如下:Compiler construction 在lexer中表示一个字符,compiler-construction,ocaml,lexer,Compiler Construction,Ocaml,Lexer,我正在用OCaml为一种小型语言编写一个lexer,其语法部分如下: tab-character = %x0009 eom-character = %x0019 space-character = %x0020 underscore = %x005F single-quote = %x0027 ; ' 我试图在lexer.mll中编写let single_quote=[%x0027],但编译时出现非法字符错误 有人能告诉我如何指定像%x0027这样的数字吗 编译使用语句let single.\
tab-character = %x0009
eom-character = %x0019
space-character = %x0020
underscore = %x005F
single-quote = %x0027 ; '
我试图在lexer.mll
中编写let single_quote=[%x0027]
,但编译时出现非法字符错误
有人能告诉我如何指定像%x0027
这样的数字吗
编译使用语句let single.\u quote=['']
,我还看到了另一种指定字符的方法,例如let black=['\009']
有人知道这三种方法之间有什么区别吗?我想你是在问OCaml中的字符文字。它们在中定义 对于单引号,您可以编写
'\'
或'\x27'
或'\039'
。所有这些都是等效的。所有字符文字都用单引号括起来——没有以百分比(%
)开头的形式
ocamlex中的正则表达式可以包含表示单个字符的字符文本(如上所述),也可以包含表示字符序列的字符串文本(双引号)。字符串文字遵循与字符文字相同的模式。只包含一个引号的字符串将是“'”
或“\”
或“\x27”
或“\039”
我希望这有帮助
编辑:
是的,['\x09']
和'\x09'
和“\x09”
被视为正则表达式时是相同的。一个集合中有一个事物,它本身就表示同一事物。类似地,长度为1的序列仅与一个相同
Unicode中的值0x3000表示“表意空间”(我想在中文、日文和韩文中使用)。在OCaml中处理Unicode是另一个主题。有一个用于OCaml的Unicode库,名为。我从未使用过它,但从我所看到的来看,它很受尊敬。我认为ocamlex不能与Unicode一起工作。只要用谷歌快速搜索,我就会看到一个名为lexer的生成器,它可以处理Unicode。可能还有其他的,这只是谷歌的热门
(哎哟,我看到乔纳森·普罗岑科已经推荐了ulex。对不起,太吵了。)我想你是在问OCaml中的字符文字。它们在中定义 对于单引号,您可以编写
'\'
或'\x27'
或'\039'
。所有这些都是等效的。所有字符文字都用单引号括起来——没有以百分比(%
)开头的形式
ocamlex中的正则表达式可以包含表示单个字符的字符文本(如上所述),也可以包含表示字符序列的字符串文本(双引号)。字符串文字遵循与字符文字相同的模式。只包含一个引号的字符串将是“'”
或“\”
或“\x27”
或“\039”
我希望这有帮助
编辑:
是的,['\x09']
和'\x09'
和“\x09”
被视为正则表达式时是相同的。一个集合中有一个事物,它本身就表示同一事物。类似地,长度为1的序列仅与一个相同
Unicode中的值0x3000表示“表意空间”(我想在中文、日文和韩文中使用)。在OCaml中处理Unicode是另一个主题。有一个用于OCaml的Unicode库,名为。我从未使用过它,但从我所看到的来看,它很受尊敬。我认为ocamlex不能与Unicode一起工作。只要用谷歌快速搜索,我就会看到一个名为lexer的生成器,它可以处理Unicode。可能还有其他的,这只是谷歌的热门
(哎哟,我看到乔纳森·普罗岑科已经推荐了ulex。为额外的噪音感到抱歉。)如果您需要在lexer中表示非ascii字符,那么ulex可能就是您所需要的。文档位于,主页位于如果您需要在lexer中表示非ascii字符,那么您可能需要Ulex。文档位于,主页位于谢谢。。。我只是想确保
let a=['\x09']
,let a='\x09'
和let a=“\x09”
实际上是一样的,对吧?我也看到了DBCS\u空格=%\x3000
,但是\x3000
(以及\x2028
,\x2029
)在OCaml中不存在,我怎么能解决这个问题呢?谢谢。。。我只是想确保let a=['\x09']
,let a='\x09'
和let a=“\x09”
实际上是相同的,对吧?我也看到了DBCS\u空格=%\x3000
,但是\x3000
(以及\x2028
,\x2029
)在OCaml中不存在,我如何解决这个问题?是ulex项目的继任者。是ulex项目的继任者。