{
"name": "diff",
"rules": {
"source": {
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "block"
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_line"
},
{
"type": "BLANK"
}
]
},
{
"type": "PATTERN",
"value": "\\r?\\n"
}
]
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_line"
},
{
"type": "BLANK"
}
]
}
]
},
"_line": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "file_change"
},
{
"type": "SYMBOL",
"name": "binary_change"
},
{
"type": "SYMBOL",
"name": "index"
},
{
"type": "SYMBOL",
"name": "similarity"
},
{
"type": "SYMBOL",
"name": "old_file"
},
{
"type": "SYMBOL",
"name": "new_file"
},
{
"type": "SYMBOL",
"name": "location"
},
{
"type": "SYMBOL",
"name": "addition"
},
{
"type": "SYMBOL",
"name": "deletion"
},
{
"type": "SYMBOL",
"name": "context"
},
{
"type": "SYMBOL",
"name": "comment"
}
]
},
"block": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "command"
},
{
"type": "PATTERN",
"value": "\\r?\\n"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "file_change"
},
{
"type": "SYMBOL",
"name": "binary_change"
},
{
"type": "SYMBOL",
"name": "index"
},
{
"type": "SYMBOL",
"name": "similarity"
}
]
},
{
"type": "PATTERN",
"value": "\\r?\\n"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "old_file"
},
{
"type": "PATTERN",
"value": "\\r?\\n"
},
{
"type": "SYMBOL",
"name": "new_file"
},
{
"type": "PATTERN",
"value": "\\r?\\n"
},
{
"type": "SYMBOL",
"name": "hunks"
}
]
},
{
"type": "BLANK"
}
]
}
]
}
},
"hunks": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "hunk"
}
}
},
"hunk": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "location",
"content": {
"type": "SYMBOL",
"name": "location"
}
},
{
"type": "PATTERN",
"value": "\\r?\\n"
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "changes",
"content": {
"type": "SYMBOL",
"name": "changes"
}
},
{
"type": "BLANK"
}
]
}
]
}
},
"changes": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "REPEAT1",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "addition"
},
{
"type": "SYMBOL",
"name": "deletion"
},
{
"type": "SYMBOL",
"name": "context"
}
]
},
{
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "\\r?\\n"
}
}
}
]
}
}
},
"command": {
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "diff"
}
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[-\\w]+"
},
"named": true,
"value": "argument"
},
{
"type": "SYMBOL",
"name": "filename"
}
]
},
"file_change": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "new"
},
{
"type": "STRING",
"value": "deleted"
}
]
},
{
"type": "STRING",
"value": "file"
},
{
"type": "STRING",
"value": "mode"
},
{
"type": "SYMBOL",
"name": "mode"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "new"
},
{
"type": "STRING",
"value": "old"
}
]
},
{
"type": "STRING",
"value": "mode"
},
{
"type": "SYMBOL",
"name": "mode"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "rename"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "from"
},
{
"type": "STRING",
"value": "to"
}
]
},
{
"type": "SYMBOL",
"name": "filename"
}
]
}
]
},
"binary_change": {
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "Binary"
}
},
{
"type": "STRING",
"value": "files"
},
{
"type": "SYMBOL",
"name": "filename"
},
{
"type": "STRING",
"value": "and"
},
{
"type": "SYMBOL",
"name": "filename"
},
{
"type": "STRING",
"value": "differ"
}
]
},
"index": {
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "index"
}
},
{
"type": "SYMBOL",
"name": "commit"
},
{
"type": "STRING",
"value": ".."
},
{
"type": "SYMBOL",
"name": "commit"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "mode"
},
{
"type": "BLANK"
}
]
}
]
},
"similarity": {
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "similarity"
}
},
{
"type": "STRING",
"value": "index"
},
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "\\d+"
},
"named": true,
"value": "score"
},
{
"type": "STRING",
"value": "%"
}
]
},
"old_file": {
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "---"
}
},
{
"type": "SYMBOL",
"name": "filename"
}
]
},
"new_file": {
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "+++"
}
},
{
"type": "SYMBOL",
"name": "filename"
}
]
},
"location": {
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "@@"
}
},
{
"type": "SYMBOL",
"name": "linerange"
},
{
"type": "SYMBOL",
"name": "linerange"
},
{
"type": "STRING",
"value": "@@"
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^\\r\\n]+"
},
{
"type": "BLANK"
}
]
}
]
},
"addition": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "+"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^\\r\\n]+"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "++"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^\\r\\n]+"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "+++"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "++++"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^\\r\\n]+"
},
{
"type": "BLANK"
}
]
}
]
}
]
},
"deletion": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "-"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^\\r\\n]+"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "--"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^\\r\\n]+"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "---"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "----"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^\\r\\n]+"
},
{
"type": "BLANK"
}
]
}
]
}
]
},
"context": {
"type": "TOKEN",
"content": {
"type": "PREC",
"value": -1,
"content": {
"type": "PATTERN",
"value": "[^\\r\\n]+"
}
}
},
"comment": {
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "#"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^\\r\\n]+"
},
{
"type": "BLANK"
}
]
}
]
},
"linerange": {
"type": "PATTERN",
"value": "[-\\+]\\d+(,\\d+)?"
},
"filename": {
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "\\S+"
}
},
"commit": {
"type": "PATTERN",
"value": "[a-f0-9]{7,40}"
},
"mode": {
"type": "PATTERN",
"value": "\\d+"
}
},
"extras": [
{
"type": "PATTERN",
"value": "[\\t\\f\\v ]+"
}
],
"conflicts": [],
"precedences": [],
"externals": [],
"inline": [],
"supertypes": []
}