在 lex 上定义表达式不适用于某些字母
define expression on lex doesn't work on some letters
我已经在终端中安装了 flex
OS: ubuntu 15.10
character [a-z|A-Z]
digit [0-9]
digits {digit}{digit}+
string [{digit}+{character}+{digit}*{character}*]*
%%
{string} printf("string ");
%%
编译代码后,对于输入"gg",输出为"string"。
对于输入"ff",输出为"ff"。
我正在这样编译文件:
lex file_name.txt
cc lex.yy.c -o file_name.out
如果我这样定义字符串:
string ({digit}+{character}+{digit}*{character}*)*
它工作正常。
什么原因?
不让我用C语言
这一行
string [{digit}+{character}+{digit}*{character}*]*
做了一些与您预期不同的事情。它是包含在 [
和 ]
中的 个字符 的零次或多次出现。也就是说,它等同于这些更简单的模式:
string [{}digit+character+*]*
string [{}digtchare+*]*
(除非我有错别字)。跟这个不一样:
string ({digit}+{character}+{digit}*{character}*)*
这是 (
和 )
.
中包含的 模式 的零次或多次重复
我已经在终端中安装了 flex
OS: ubuntu 15.10
character [a-z|A-Z]
digit [0-9]
digits {digit}{digit}+
string [{digit}+{character}+{digit}*{character}*]*
%%
{string} printf("string ");
%%
编译代码后,对于输入"gg",输出为"string"。
对于输入"ff",输出为"ff"。
我正在这样编译文件:
lex file_name.txt
cc lex.yy.c -o file_name.out
如果我这样定义字符串:
string ({digit}+{character}+{digit}*{character}*)*
它工作正常。
什么原因?
不让我用C语言
这一行
string [{digit}+{character}+{digit}*{character}*]*
做了一些与您预期不同的事情。它是包含在 [
和 ]
中的 个字符 的零次或多次出现。也就是说,它等同于这些更简单的模式:
string [{}digit+character+*]*
string [{}digtchare+*]*
(除非我有错别字)。跟这个不一样:
string ({digit}+{character}+{digit}*{character}*)*
这是 (
和 )
.