46 lines
987 B
Python
46 lines
987 B
Python
|
|
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
|
|
|
|
#
|
|
################# |