3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-06-07 06:33:24 +00:00

Factor report_unexpected_token out into its own function.

This commit is contained in:
Sean Luchen 2025-03-31 10:44:23 -07:00
parent 314842d2a0
commit 0a6d9f4dc9
2 changed files with 30 additions and 40 deletions

View file

@ -332,24 +332,8 @@ int LibertyParser::lexer(std::string &str)
return c;
}
LibertyAst *LibertyParser::parse()
void LibertyParser::report_unexpected_token(int tok)
{
std::string str;
int tok = lexer(str);
// there are liberty files in the wild that
// have superfluous ';' at the end of
// a { ... }. We simply ignore a ';' here.
// and get to the next statement.
while ((tok == 'n') || (tok == ';'))
tok = lexer(str);
if (tok == '}' || tok < 0)
return NULL;
if (tok != 'v') {
std::string eReport;
switch(tok)
{
@ -368,8 +352,31 @@ LibertyAst *LibertyParser::parse()
error(eReport);
break;
default:
error();
eReport = "Unexpected token: ";
eReport += static_cast<char>(tok);
error(eReport);
}
}
LibertyAst *LibertyParser::parse()
{
std::string str;
int tok = lexer(str);
// there are liberty files in the wild that
// have superfluous ';' at the end of
// a { ... }. We simply ignore a ';' here.
// and get to the next statement.
while ((tok == 'n') || (tok == ';'))
tok = lexer(str);
if (tok == '}' || tok < 0)
return NULL;
if (tok != 'v') {
report_unexpected_token(tok);
}
LibertyAst *ast = new LibertyAst;
@ -460,25 +467,7 @@ LibertyAst *LibertyParser::parse()
continue;
}
if (tok != 'v') {
std::string eReport;
switch(tok)
{
case 'n':
continue;
case '[':
case ']':
case '}':
case '{':
case '\"':
case ':':
eReport = "Unexpected '";
eReport += static_cast<char>(tok);
eReport += "'.";
error(eReport);
break;
default:
error();
}
report_unexpected_token(tok);
}
ast->args.push_back(arg);
}
@ -495,7 +484,7 @@ LibertyAst *LibertyParser::parse()
break;
}
error();
report_unexpected_token(tok);
}
return ast;

View file

@ -105,6 +105,7 @@ namespace Yosys
*/
int lexer(std::string &str);
void report_unexpected_token(int tok);
LibertyAst *parse();
void error() const;
void error(const std::string &str) const;