First Commit
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
from collections import namedtuple
|
||||
|
||||
grammar = r"""
|
||||
file: "ISO-10303-21;" header data_section "END-ISO-10303-21;"
|
||||
header: "HEADER" ";" header_entity_list "ENDSEC" ";"
|
||||
header_line: (SPECIAL|DIGIT|LOWER|UPPER)* "*"
|
||||
data_section: "DATA" ";" (entity_instance)* "ENDSEC" ";"
|
||||
entity_instance: simple_entity_instance|complex_entity_instance
|
||||
simple_entity_instance: id "=" simple_record ";"
|
||||
complex_entity_instance: id "=" subsuper_record ";"
|
||||
subsuper_record : "(" simple_record_list ")"
|
||||
simple_record_list:simple_record simple_record*
|
||||
simple_record: keyword "("parameter_list?")"
|
||||
header_entity_list: file_description file_name file_schema
|
||||
file_description: "FILE_DESCRIPTION" "(" parameter_list ")" ";"
|
||||
file_name: "FILE_NAME" "(" parameter_list ")" ";"
|
||||
file_schema: "FILE_SCHEMA" "(" parameter_list ")" ";"
|
||||
id: /#[0-9]+/
|
||||
keyword: /[A-Z][0-9A-Z_]*/
|
||||
parameter: untyped_parameter|typed_parameter|omitted_parameter
|
||||
parameter_list: parameter ("," parameter)*
|
||||
list: "(" parameter ("," parameter)* ")" |"("")"
|
||||
typed_parameter: keyword "(" parameter ")"|"()"
|
||||
untyped_parameter: string| NONE |INT |REAL |enumeration |id |binary |list
|
||||
omitted_parameter:STAR
|
||||
enumeration: "." keyword "."
|
||||
binary: "\"" ("0"|"1"|"2"|"3") (HEX)* "\""
|
||||
string: "'" (REVERSE_SOLIDUS REVERSE_SOLIDUS|SPECIAL|DIGIT|SPACE|LOWER|UPPER|CONTROL_DIRECTIVE|"\\*\\")* "'"
|
||||
|
||||
STAR: "*"
|
||||
SLASH: "/"
|
||||
NONE: "$"
|
||||
SPECIAL : "!"
|
||||
| "*"
|
||||
| "$"
|
||||
| "%"
|
||||
| "&"
|
||||
| "."
|
||||
| "#"
|
||||
| "+"
|
||||
| ","
|
||||
| "-"
|
||||
| "("
|
||||
| ")"
|
||||
| "?"
|
||||
| "/"
|
||||
| ":"
|
||||
| ";"
|
||||
| "<"
|
||||
| "="
|
||||
| ">"
|
||||
| "@"
|
||||
| "["
|
||||
| "]"
|
||||
| "{"
|
||||
| "|"
|
||||
| "}"
|
||||
| "^"
|
||||
| "`"
|
||||
| "~"
|
||||
| "_"
|
||||
| "\""
|
||||
| "\"\""
|
||||
| "''"
|
||||
REAL: SIGN? DIGIT (DIGIT)* "." (DIGIT)* ("E" SIGN? DIGIT (DIGIT)* )?
|
||||
INT: SIGN? DIGIT (DIGIT)*
|
||||
CONTROL_DIRECTIVE: PAGE | ALPHABET | EXTENDED2 | EXTENDED4 | ARBITRARY
|
||||
PAGE : REVERSE_SOLIDUS "S" REVERSE_SOLIDUS LATIN_CODEPOINT
|
||||
LATIN_CODEPOINT : SPACE | DIGIT | LOWER | UPPER | SPECIAL | REVERSE_SOLIDUS | APOSTROPHE
|
||||
ALPHABET : REVERSE_SOLIDUS "P" UPPER REVERSE_SOLIDUS
|
||||
EXTENDED2: REVERSE_SOLIDUS "X2" REVERSE_SOLIDUS (HEX_TWO)* END_EXTENDED
|
||||
EXTENDED4 :REVERSE_SOLIDUS "X4" REVERSE_SOLIDUS (HEX_FOUR)* END_EXTENDED
|
||||
END_EXTENDED: REVERSE_SOLIDUS "X0" REVERSE_SOLIDUS
|
||||
ARBITRARY: REVERSE_SOLIDUS "X" REVERSE_SOLIDUS HEX_ONE
|
||||
HEX_FOUR: HEX_TWO HEX_TWO
|
||||
HEX_TWO: HEX_ONE HEX_ONE
|
||||
HEX_ONE: HEX HEX
|
||||
HEX: "0"
|
||||
| "1"
|
||||
| "2"
|
||||
| "3"
|
||||
| "4"
|
||||
| "5"
|
||||
| "6"
|
||||
| "7"
|
||||
| "8"
|
||||
| "9"
|
||||
| "A"
|
||||
| "B"
|
||||
| "C"
|
||||
| "D"
|
||||
| "E"
|
||||
| "F"
|
||||
APOSTROPHE: "'"
|
||||
REVERSE_SOLIDUS: "\\"
|
||||
DIGIT: "0".."9"
|
||||
SIGN: "+"|"-"
|
||||
LOWER: "a".."z"
|
||||
UPPER: "A".."Z"
|
||||
ESCAPE : "\\" ( "$" | "\"" | CHAR )
|
||||
CHAR : /[^$"\n]/
|
||||
WORD : CHAR+
|
||||
SPACE.10 : " "
|
||||
|
||||
%ignore /[ \t\f\r\n]/+
|
||||
"""
|
||||
|
||||
HEADER_FIELDS = {
|
||||
"file_description": namedtuple(
|
||||
"file_description", ["description", "implementation_level"]
|
||||
),
|
||||
"file_name": namedtuple(
|
||||
"file_name",
|
||||
[
|
||||
"name",
|
||||
"time_stamp",
|
||||
"author",
|
||||
"organization",
|
||||
"preprocessor_version",
|
||||
"originating_system",
|
||||
"authorization",
|
||||
],
|
||||
),
|
||||
"file_schema": namedtuple("file_schema", ["schema_identifiers"]),
|
||||
}
|
||||
Reference in New Issue
Block a user