Skip to content

Commit 7e2078f

Browse files
committed
use SMV and Verilog langauge interfaces
1 parent ca68c2a commit 7e2078f

File tree

1 file changed

+61
-23
lines changed

1 file changed

+61
-23
lines changed

src/ebmc/build_transition_system.cpp

Lines changed: 61 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Author: Daniel Kroening, [email protected]
1818
#include <langapi/language.h>
1919
#include <langapi/language_util.h>
2020
#include <langapi/mode.h>
21+
#include <smvlang/smv_ebmc_language.h>
2122
#include <trans-word-level/show_module_hierarchy.h>
2223
#include <trans-word-level/show_modules.h>
2324

@@ -335,39 +336,76 @@ int show_symbol_table(
335336
cmdline, message_handler, dummy_transition_system);
336337
}
337338

338-
std::optional<transition_systemt> ebmc_languagest::transition_system()
339+
static std::set<std::string> file_extensions(const cmdlinet::argst &args)
339340
{
340-
if(cmdline.isset("preprocess"))
341-
{
342-
preprocess(cmdline, message_handler);
343-
return {};
344-
}
341+
std::set<std::string> result;
345342

346-
if(cmdline.isset("show-parse"))
343+
for(auto &arg : args)
347344
{
348-
show_parse(cmdline, message_handler);
349-
return {};
345+
std::size_t ext_pos = arg.rfind('.');
346+
347+
if(ext_pos != std::string::npos)
348+
{
349+
auto ext = std::string(arg, ext_pos + 1, std::string::npos);
350+
result.insert(ext);
351+
}
350352
}
351353

352-
if(
353-
cmdline.isset("show-modules") || cmdline.isset("modules-xml") ||
354-
cmdline.isset("json-modules"))
354+
return result;
355+
}
356+
357+
std::optional<transition_systemt> ebmc_languagest::transition_system()
358+
{
359+
auto extensions = file_extensions(cmdline.args);
360+
auto ext_used = [&extensions](const char *ext)
361+
{ return extensions.find(ext) != extensions.end(); };
362+
363+
bool have_smv = ext_used("smv");
364+
bool have_verilog = ext_used("v") || ext_used("sv");
365+
366+
if(have_smv && have_verilog)
355367
{
356-
show_modules(cmdline, message_handler);
357-
return {};
368+
throw ebmc_errort{} << "no support for mixed-language models";
358369
}
359370

360-
if(cmdline.isset("show-module-hierarchy"))
371+
if(have_smv)
361372
{
362-
show_module_hierarchy(cmdline, message_handler);
363-
return {};
373+
return smv_ebmc_languaget{cmdline, message_handler}.transition_system();
364374
}
365-
366-
if(cmdline.isset("show-symbol-table"))
375+
else
367376
{
368-
show_symbol_table(cmdline, message_handler);
369-
return {};
377+
if(cmdline.isset("preprocess"))
378+
{
379+
preprocess(cmdline, message_handler);
380+
return {};
381+
}
382+
383+
if(cmdline.isset("show-parse"))
384+
{
385+
show_parse(cmdline, message_handler);
386+
return {};
387+
}
388+
389+
if(
390+
cmdline.isset("show-modules") || cmdline.isset("modules-xml") ||
391+
cmdline.isset("json-modules"))
392+
{
393+
show_modules(cmdline, message_handler);
394+
return {};
395+
}
396+
397+
if(cmdline.isset("show-module-hierarchy"))
398+
{
399+
show_module_hierarchy(cmdline, message_handler);
400+
return {};
401+
}
402+
403+
if(cmdline.isset("show-symbol-table"))
404+
{
405+
show_symbol_table(cmdline, message_handler);
406+
return {};
407+
}
408+
409+
return get_transition_system(cmdline, message_handler);
370410
}
371-
372-
return get_transition_system(cmdline, message_handler);
373411
}

0 commit comments

Comments
 (0)