72 lines
2.3 KiB
Python
72 lines
2.3 KiB
Python
|
#!/usr/bin/env python
|
||
|
# Copyright 2014 the V8 project authors. All rights reserved.
|
||
|
# Use of this source code is governed by a BSD-style license that can be
|
||
|
# found in the LICENSE file.
|
||
|
|
||
|
"""This program either generates the parser files for Torque, generating
|
||
|
the source and header files directly in V8's src directory."""
|
||
|
|
||
|
import subprocess
|
||
|
import sys
|
||
|
import os
|
||
|
import ntpath
|
||
|
import re
|
||
|
|
||
|
cwd = os.getcwd()
|
||
|
tools = ntpath.dirname(sys.argv[0]);
|
||
|
grammar = tools + '/../src/torque/Torque.g4'
|
||
|
basename = ntpath.basename(grammar)
|
||
|
dirname = ntpath.dirname(grammar)
|
||
|
os.chdir(dirname)
|
||
|
cargs = ['java', '-Xmx500M', 'org.antlr.v4.Tool', '-visitor', basename]
|
||
|
result = subprocess.call(cargs)
|
||
|
os.chdir(cwd)
|
||
|
|
||
|
def fix_file(filename):
|
||
|
is_header = re.search(r'\.h', filename) <> None;
|
||
|
header_macro = filename.upper();
|
||
|
header_macro = re.sub('\.', '_', header_macro);
|
||
|
header_macro = "V8_TORQUE_" + header_macro + '_';
|
||
|
|
||
|
copyright = '// Copyright 2018 the V8 project authors. All rights reserved.\n'
|
||
|
copyright += '// Use of this source code is governed by a BSD-style license that can be\n'
|
||
|
copyright += '// found in the LICENSE file.\n'
|
||
|
file_path = tools + '/../src/torque/' + filename;
|
||
|
temp_file_path = file_path + '.tmp'
|
||
|
output_file = open(temp_file_path, 'w')
|
||
|
output_file.write(copyright);
|
||
|
if is_header:
|
||
|
output_file.write('#ifndef ' + header_macro + '\n');
|
||
|
output_file.write('#define ' + header_macro + '\n');
|
||
|
|
||
|
with open(file_path) as f:
|
||
|
content = f.readlines()
|
||
|
for x in content:
|
||
|
x = re.sub(';;', ';', x)
|
||
|
x = re.sub('antlr4-runtime\.h', './antlr4-runtime.h', x)
|
||
|
x = re.sub(' TorqueParser.antlr4', ' explicit TorqueParser(antlr4', x)
|
||
|
x = re.sub(' TorqueLexer.antlr4', ' explicit TorqueLexer(antlr4', x)
|
||
|
if not re.search('= 0', x):
|
||
|
x = re.sub('virtual', '', x)
|
||
|
output_file.write(x)
|
||
|
|
||
|
if is_header:
|
||
|
output_file.write('#endif // ' + header_macro + '\n');
|
||
|
output_file.close();
|
||
|
|
||
|
subprocess.call(['rm', file_path])
|
||
|
subprocess.call(['mv', temp_file_path, file_path])
|
||
|
|
||
|
fix_file('TorqueBaseListener.h');
|
||
|
fix_file('TorqueBaseListener.cpp');
|
||
|
fix_file('TorqueBaseVisitor.h');
|
||
|
fix_file('TorqueBaseVisitor.cpp');
|
||
|
fix_file('TorqueLexer.h');
|
||
|
fix_file('TorqueLexer.cpp');
|
||
|
fix_file('TorqueParser.h');
|
||
|
fix_file('TorqueParser.cpp');
|
||
|
fix_file('TorqueListener.h');
|
||
|
fix_file('TorqueListener.cpp');
|
||
|
fix_file('TorqueVisitor.h');
|
||
|
fix_file('TorqueVisitor.cpp');
|