diff options
author | June McEnroe <june@causal.agency> | 2021-01-02 15:13:07 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2021-01-02 15:13:07 -0500 |
commit | c709509129b4cc22bd47396ed5f6e8b4dc36b9fc (patch) | |
tree | 014c07d19d49e36d2967f39c6afa58262c293764 | |
parent | Tag top-level typedefs the same way as function definitions (diff) | |
download | src-c709509129b4cc22bd47396ed5f6e8b4dc36b9fc.tar.gz src-c709509129b4cc22bd47396ed5f6e8b4dc36b9fc.zip |
Clean up make lexer
Still feels pretty messy though.
-rw-r--r-- | bin/hilex/make.l | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/bin/hilex/make.l b/bin/hilex/make.l index e7961eb8..e9d3c84d 100644 --- a/bin/hilex/make.l +++ b/bin/hilex/make.l @@ -25,14 +25,15 @@ %x Interp Shell ident [._[:alnum:]]+ -target [-/._[:alnum:]]+ -assign [!+:?]?= +assign [+?:!]?= +target [-._/?*\[\][:alnum:]]+ +operator [:!]|:: %% static int pop = INITIAL; static int depth = 0; -^"\t" { +^"\t"+ { BEGIN(pop = Shell); return Normal; } @@ -41,12 +42,15 @@ assign [!+:?]?= BEGIN(pop = INITIAL); return Normal; } - [^\n$]+|. { return Normal; } + "\\\n" { return Normal; } + [^\\\n$]+|. { return Normal; } } -[[:blank:]] { return Normal; } +[[:blank:]]+ { return Normal; } -"."(PHONY|PRECIOUS|SUFFIXES)/":"? { +{operator} { return Operator; } + +"."(PHONY|PRECIOUS|SUFFIXES)/{operator}? { return Keyword; } @@ -63,16 +67,19 @@ assign [!+:?]?= BEGIN(pop = INITIAL); return Normal; } - [^$[:space:]]+ { return String; } + "\\\n" { return String; } + [^\\$[:space:]]+|. { return String; } } -{target}([[:blank:]]+{target})*/":" { +^"-"?include { return Macro; } + +{target}([[:blank:]]+{target})*/{operator} { return IdentifierTag; } -^"-"?include { return Macro; } +{target} { return Identifier; } -"#".* { return Comment; } +"#"([^\\\n]|"\\"[^\n]|"\\\n")* { return Comment; } <*>{ "$"("{"|"(") { |