Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
itdan3344
stb
提交
83a2489d
S
stb
项目概览
itdan3344
/
stb
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
stb
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
83a2489d
编写于
3月 03, 2017
作者:
S
Sean Barrett
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix compilation on non-C99 compilers
上级
ed050483
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
61 addition
and
12 deletion
+61
-12
stb_c_lexer.h
stb_c_lexer.h
+14
-12
tests/c_lexer_test.c
tests/c_lexer_test.c
+47
-0
未找到文件。
stb_c_lexer.h
浏览文件 @
83a2489d
...
@@ -727,18 +727,20 @@ int stb_c_lexer_get_token(stb_lexer *lexer)
...
@@ -727,18 +727,20 @@ int stb_c_lexer_get_token(stb_lexer *lexer)
#ifdef STB__CLEX_use_stdlib
#ifdef STB__CLEX_use_stdlib
lexer
->
int_number
=
strtol
((
char
*
)
p
,
(
char
**
)
&
q
,
16
);
lexer
->
int_number
=
strtol
((
char
*
)
p
,
(
char
**
)
&
q
,
16
);
#else
#else
stb__clex_int
n
=
0
;
{
for
(
q
=
p
+
2
;
q
!=
lexer
->
eof
;
++
q
)
{
stb__clex_int
n
=
0
;
if
(
*
q
>=
'0'
&&
*
q
<=
'9'
)
for
(
q
=
p
+
2
;
q
!=
lexer
->
eof
;
++
q
)
{
n
=
n
*
16
+
(
*
q
-
'0'
);
if
(
*
q
>=
'0'
&&
*
q
<=
'9'
)
else
if
(
*
q
>=
'a'
&&
*
q
<=
'f'
)
n
=
n
*
16
+
(
*
q
-
'0'
);
n
=
n
*
16
+
(
*
q
-
'a'
)
+
10
;
else
if
(
*
q
>=
'a'
&&
*
q
<=
'f'
)
else
if
(
*
q
>=
'A'
&&
*
q
<=
'F'
)
n
=
n
*
16
+
(
*
q
-
'a'
)
+
10
;
n
=
n
*
16
+
(
*
q
-
'A'
)
+
10
;
else
if
(
*
q
>=
'A'
&&
*
q
<=
'F'
)
else
n
=
n
*
16
+
(
*
q
-
'A'
)
+
10
;
break
;
else
break
;
}
lexer
->
int_number
=
n
;
}
}
lexer
->
int_number
=
n
;
#endif
#endif
if
(
q
==
p
+
2
)
if
(
q
==
p
+
2
)
return
stb__clex_token
(
lexer
,
CLEX_parse_error
,
p
-
2
,
p
-
1
);
return
stb__clex_token
(
lexer
,
CLEX_parse_error
,
p
-
2
,
p
-
1
);
...
@@ -880,7 +882,7 @@ void dummy(void)
...
@@ -880,7 +882,7 @@ void dummy(void)
{
{
double
some_floats
[]
=
{
double
some_floats
[]
=
{
1
.
0501
,
-
10.4e12
,
5E+10
,
1
.
0501
,
-
10.4e12
,
5E+10
,
#if
def STB__clex_hex_floats
#if
0 // not support in C++ or C-pre-99, so don't try to compile it
0x1.0p+24, 0xff.FP-8, 0x1p-23,
0x1.0p+24, 0xff.FP-8, 0x1p-23,
#endif
#endif
4
.
4
.
...
...
tests/c_lexer_test.c
浏览文件 @
83a2489d
#define STB_C_LEX_C_DECIMAL_INTS Y // "0|[1-9][0-9]*" CLEX_intlit
#define STB_C_LEX_C_HEX_INTS Y // "0x[0-9a-fA-F]+" CLEX_intlit
#define STB_C_LEX_C_OCTAL_INTS Y // "[0-7]+" CLEX_intlit
#define STB_C_LEX_C_DECIMAL_FLOATS Y // "[0-9]*(.[0-9]*([eE][-+]?[0-9]+)?) CLEX_floatlit
#define STB_C_LEX_C99_HEX_FLOATS Y // "0x{hex}+(.{hex}*)?[pP][-+]?{hex}+ CLEX_floatlit
#define STB_C_LEX_C_IDENTIFIERS Y // "[_a-zA-Z][_a-zA-Z0-9]*" CLEX_id
#define STB_C_LEX_C_DQ_STRINGS Y // double-quote-delimited strings with escapes CLEX_dqstring
#define STB_C_LEX_C_SQ_STRINGS Y // single-quote-delimited strings with escapes CLEX_ssstring
#define STB_C_LEX_C_CHARS Y // single-quote-delimited character with escape CLEX_charlits
#define STB_C_LEX_C_COMMENTS Y // "
/* comment */
"
#define STB_C_LEX_CPP_COMMENTS Y // "// comment to end of line\n"
#define STB_C_LEX_C_COMPARISONS Y // "==" CLEX_eq "!=" CLEX_noteq "<=" CLEX_lesseq ">=" CLEX_greatereq
#define STB_C_LEX_C_LOGICAL Y // "&&" CLEX_andand "||" CLEX_oror
#define STB_C_LEX_C_SHIFTS Y // "<<" CLEX_shl ">>" CLEX_shr
#define STB_C_LEX_C_INCREMENTS Y // "++" CLEX_plusplus "--" CLEX_minusminus
#define STB_C_LEX_C_ARROW Y // "->" CLEX_arrow
#define STB_C_LEX_EQUAL_ARROW Y // "=>" CLEX_eqarrow
#define STB_C_LEX_C_BITWISEEQ Y // "&=" CLEX_andeq "|=" CLEX_oreq "^=" CLEX_xoreq
#define STB_C_LEX_C_ARITHEQ Y // "+=" CLEX_pluseq "-=" CLEX_minuseq
// "*=" CLEX_muleq "/=" CLEX_diveq "%=" CLEX_modeq
// if both STB_C_LEX_SHIFTS & STB_C_LEX_ARITHEQ:
// "<<=" CLEX_shleq ">>=" CLEX_shreq
#define STB_C_LEX_PARSE_SUFFIXES Y // letters after numbers are parsed as part of those numbers, and must be in suffix list below
#define STB_C_LEX_DECIMAL_SUFFIXES "uUlL" // decimal integer suffixes e.g. "uUlL" -- these are returned as-is in string storage
#define STB_C_LEX_HEX_SUFFIXES "lL" // e.g. "uUlL"
#define STB_C_LEX_OCTAL_SUFFIXES "lL" // e.g. "uUlL"
#define STB_C_LEX_FLOAT_SUFFIXES "uulL" //
#define STB_C_LEX_0_IS_EOF N // if Y, ends parsing at '\0'; if N, returns '\0' as token
#define STB_C_LEX_INTEGERS_AS_DOUBLES N // parses integers as doubles so they can be larger than 'int', but only if STB_C_LEX_STDLIB==N
#define STB_C_LEX_MULTILINE_DSTRINGS Y // allow newlines in double-quoted strings
#define STB_C_LEX_MULTILINE_SSTRINGS Y // allow newlines in single-quoted strings
#define STB_C_LEX_USE_STDLIB N // use strtod,strtol for parsing #s; otherwise inaccurate hack
#define STB_C_LEX_DOLLAR_IDENTIFIER Y // allow $ as an identifier character
#define STB_C_LEX_FLOAT_NO_DECIMAL Y // allow floats that have no decimal point if they have an exponent
#define STB_C_LEX_DEFINE_ALL_TOKEN_NAMES Y // if Y, all CLEX_ token names are defined, even if never returned
// leaving it as N should help you catch config bugs
#define STB_C_LEX_DISCARD_PREPROCESSOR Y // discard C-preprocessor directives (e.g. after prepocess
// still have #line, #pragma, etc)
#define STB_C_LEXER_DEFINITIONS // This line prevents the header file from replacing your definitions
#define STB_C_LEXER_IMPLEMENTATION
#define STB_C_LEXER_IMPLEMENTATION
#define STB_C_LEXER_SELF_TEST
#define STB_C_LEXER_SELF_TEST
#include "../stb_c_lexer.h"
#include "../stb_c_lexer.h"
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录