summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--bin/hilex/c.l55
1 files changed, 26 insertions, 29 deletions
diff --git a/bin/hilex/c.l b/bin/hilex/c.l
index e6bd9ad0..056867ce 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;
 }
 
+<MacroInclude>"<"[^>]+">" { return String; }
+
+<MacroLine,MacroInclude>{
+	"\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; }
+<MacroLine,MacroInclude>{ident} { return Macro; }
+{ident} { return Identifier; }
 
-<INITIAL,MacroLine>"//"([^\n]|"\\\n")* |
-<INITIAL,MacroLine>"/*"([^*]|"*"[^/])*"*"+"/" {
+"//"([^\n]|"\\\n")* |
+"/*"([^*]|"*"[^/])*"*"+"/" {
 	return Comment;
 }
 
-<INITIAL,MacroLine>[LUu]?"'" {
+[LUu]?"'" {
 	BEGIN(CharLiteral);
 	return String;
 }
-<INITIAL,MacroLine,MacroInclude>([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;
-}
-<MacroInclude>"<"[^>]+">" {
-	BEGIN(pop = MacroLine);
-	return String;
-}
-<MacroLine,MacroInclude>{
-	"\n" {
-		BEGIN(pop = INITIAL);
-		return Macro;
-	}
-	"\\\n" { return Macro; }
-	[^\\\n/<>''""]+|. { return Macro; }
-}
+<MacroLine,MacroInclude>. { return Macro; }
 
-. { return Normal; }
+.|\n { return Normal; }
 
 %{
 	(void)yyunput;
2019-06-16Alias date=ddateJune McEnroe Will I regret this? 2019-06-15Set sensitivity by slot in TF2June McEnroe 2019-06-15Add AcceptanceJune McEnroe 2019-06-07Add variables to bitJune McEnroe 2019-06-05Add A Closed and Common OrbitJune McEnroe 2019-06-02Add RebornJune McEnroe 2019-05-30Add bit to bin.7June McEnroe 2019-05-30Simplify and build bitJune McEnroe lex is a waste of time. 2019-05-29Add xx -p optionJune McEnroe 2019-05-27Add FrontierJune McEnroe 2019-05-27Break nicks with ZWNJJune McEnroe This should prevent bad wrapping. 2019-05-26Add DawnJune McEnroe 2019-05-20Declare vasprintf(3) for GNUJune McEnroe who the fuck is scraeming "#define _GNU_SOURCE" at my house. show yourself, coward. i will never #define _GNU_SOURCE 2019-05-20Fix comparison warning in ttpreJune McEnroe 2019-05-20Add AuthorityJune McEnroe 2019-05-19Specify precedence of unary versions of operatorsJune McEnroe 2019-05-18Add compound assignment operators to orderJune McEnroe 2019-05-15Support simple assignment in orderJune McEnroe 2019-05-15Implement sizeof in orderJune McEnroe 2019-05-15Add orderJune McEnroe 2019-05-12Add T suffix in bitJune McEnroe 2019-05-10Highlight yacc and lex files as CJune McEnroe Their %-prefixed directives should probably be highlighted Macro. 2019-05-10Use val instead of suboptargJune McEnroe suboptarg doesn't exist in GNU. Hopefully BSD getsubopt also sets val on failure? 2019-05-09Add Parable of the SowerJune McEnroe 2019-05-07Add bit without buildJune McEnroe Need to do some stuff in the Makefile for lex and yacc and generating HTML pages for it. 2019-05-04Fix MANDIR typoJune McEnroe 2019-05-04Move relay to binJune McEnroe