More reliable commands.

This commit is contained in:
Neil 2022-02-13 21:07:51 -08:00
parent b8234e5eb7
commit a1be205862
2 changed files with 8 additions and 4 deletions

View File

@ -142,6 +142,8 @@ int main(int argc, char **argv) {
} }
printf(".\n"); printf(".\n");
} }
printf("Lexing finished: %s on %lu.\n",
lex_symbols[lex.symbol], lex.line);
char_array_clear(&entry); char_array_clear(&entry);
break; /* fixme */ break; /* fixme */
} }

View File

@ -124,7 +124,7 @@ scan:
/*!re2c /*!re2c
<text> end { printf("end\n");return x->symbol = END, 0; } <text> end { printf("end\n");return x->symbol = END, 0; }
<image, command, command_args> end { return x->symbol = ERROR, 0; } <image, command, command_args> end { return x->symbol = ERROR, 0; }
// fixme: paragraphs.
<text> newline <text> newline
{ x->line = ++scan.line; { x->line = ++scan.line;
x->new_paragraph = prev_line + 2 >= scan.line; x->new_paragraph = prev_line + 2 >= scan.line;
@ -139,6 +139,7 @@ scan:
return x->symbol = BRACKET, 1; } return x->symbol = BRACKET, 1; }
<text> "![" :=> image <text> "![" :=> image
<text> "[" :=> command <text> "[" :=> command
<image> * { printf("image(broken)\n");return 0; } <image> * { printf("image(broken)\n");return 0; }
<image> ws* "osm" ws* "](geo:" @s0 number "," @s1 number ")" { <image> ws* "osm" ws* "](geo:" @s0 number "," @s1 number ")" {
scan.condition = yyctext; scan.condition = yyctext;
@ -146,16 +147,17 @@ scan:
printf("Got a map.\n"); printf("Got a map.\n");
return 1; return 1;
} }
<command> ws+ { scan.is_ws_expected = 0; goto scan; } <command> ws+ { scan.is_ws_expected = 0; goto scan; }
<command> "source" <command> "source"
{ if(scan.is_ws_expected) return x->symbol = ERROR, 0; { if(scan.is_ws_expected) return x->symbol = ERROR, 0;
return scan.is_ws_expected = 1, x->symbol = SOURCE, 1; } return scan.is_ws_expected = 1, x->symbol = SOURCE, 1; }
<command> "default" <command> "default"
{ if(scan.is_ws_expected) return 0; { if(scan.is_ws_expected) return x->symbol = ERROR, 0;
return scan.is_ws_expected = 1, x->symbol = DEFAULT, 1; } return scan.is_ws_expected = 1, x->symbol = DEFAULT, 1; }
<command> ":" :=> command_args <command> ":" => command_args { scan.is_ws_expected = 0; goto scan; }
<command, command_args> * { return x->symbol = ERROR, 0; }
<command_args> [^\n\r\]\x00]+ { printf("Command args fixme\n"); goto scan; } <command_args> [^\n\r\]\x00]+ { printf("Command args fixme\n"); goto scan; }
<command_args> "]" :=> text <command_args> "]" :=> text
<command, command_args> * { return x->symbol = ERROR, 0; }
*/ */
} }