From e0ed33a34ad42e2d4be740389bf051a726a58bea Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Tue, 29 Dec 2020 15:00:43 -0500 Subject: Reconfigure C macro start conditions --- bin/hilex/c.l | 55 ++++++++++++++++++++++++++----------------------------- 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/bin/hilex/c.l b/bin/hilex/c.l index ea29abb8..c0bd516d 100644 --- a/bin/hilex/c.l +++ b/bin/hilex/c.l @@ -21,21 +21,36 @@ #include "hilex.h" %} -%x MacroLine MacroInclude +%s MacroLine MacroInclude %x CharLiteral StringLiteral +ident [_[:alpha:]][_[:alnum:]]* width "*"|[0-9]+ %% static int pop = INITIAL; -[[:space:]]+ { return Normal; } +[[:blank:]]+ { return Normal; } -^"%" { +^"#"[[:blank:]]*("include"|"import") { + BEGIN(pop = MacroInclude); + return Macro; +} +^[#%][[:blank:]]*{ident} { BEGIN(pop = MacroLine); return Macro; } +"<"[^>]+">" { return String; } + +{ + "\n" { + BEGIN(pop = INITIAL); + return Normal; + } + "\\\n" { return Macro; } +} + ([-+*/%&|^=!<>]|"<<"|">>")"="? | [=~.?:]|"++"|"--"|"&&"|"||"|"->" | sizeof|(_A|alignof) { @@ -55,18 +70,19 @@ register|restrict|return|static|struct|switch|typedef|union|volatile|while | return Keyword; } -[_[:alpha:]][_[:alnum:]]* { return Identifier; } +{ident} { return Macro; } +{ident} { return Identifier; } -"//"([^\n]|"\\\n")* | -"/*"([^*]|"*"[^/])*"*"+"/" { +"//"([^\n]|"\\\n")* | +"/*"([^*]|"*"[^/])*"*"+"/" { return Comment; } -[LUu]?"'" { +[LUu]?"'" { BEGIN(CharLiteral); return String; } -([LU]|u8?)?"\"" { +([LU]|u8?)?"\"" { BEGIN(StringLiteral); return String; } @@ -102,28 +118,9 @@ register|restrict|return|static|struct|switch|typedef|union|volatile|while | [^%\\""]+|. { return String; } } -^"#" { - BEGIN(pop = MacroLine); - return Macro; -} -^"#"[[:blank:]]*("include"|"import") { - BEGIN(pop = MacroInclude); - return Macro; -} -"<"[^>]+">" { - BEGIN(pop = MacroLine); - return String; -} -{ - "\n" { - BEGIN(pop = INITIAL); - return Macro; - } - "\\\n" { return Macro; } - [^\\\n/<>''""]+|. { return Macro; } -} +. { return Macro; } -. { return Normal; } +.|\n { return Normal; } %{ (void)yyunput; -- cgit 1.4.1