HyriseSQLParser/src/parser/keywordlist_generator.py
2020-04-07 23:46:03 +02:00

47 lines
1.0 KiB
Python

from __future__ import print_function
import math
with open("sql_keywords.txt", 'r') as fh:
keywords = [line.strip() for line in fh.readlines() if not line.strip().startswith("//") and len(line.strip()) > 0]
keywords = sorted(set(keywords)) # Sort by name
keywords = sorted(keywords, key=lambda x: len(x), reverse=True) # Sort by length
#################
# Flex
max_len = len(max(keywords, key=lambda x: len(x))) + 1
max_len = 4 * int(math.ceil(max_len / 4.0))
for keyword in keywords:
len_diff = (max_len) - len(keyword)
num_tabs = int(math.floor(len_diff / 4.0))
if len_diff % 4 != 0: num_tabs += 1
tabs = ''.join(['\t' for _ in range(num_tabs)])
print("%s%sTOKEN(%s)" % (keyword, tabs, keyword))
#
#################
#################
# Bison
line = "%token"
max_len = 60
print("/* SQL Keywords */")
for keyword in keywords:
if len(line + " " + keyword) > max_len:
print(line)
line = "%token " + keyword
else:
line = line + " " + keyword
print(line)
#
#################