Skip to content

Commit

Permalink
Antlr / peggy tests
Browse files Browse the repository at this point in the history
  • Loading branch information
matthew-dean committed Apr 3, 2023
1 parent 4e4f64a commit a2bbb1d
Show file tree
Hide file tree
Showing 13 changed files with 17,266 additions and 2 deletions.
3 changes: 2 additions & 1 deletion packages/less/.eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ dist/*
tmp/*
lib/*
test/browser/less.min.js
node_modules
node_modules
src/parser/less.*
3 changes: 2 additions & 1 deletion packages/less/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ test/browser/less.min.js.map
test/sourcemaps/**/*.map
test/sourcemaps/*.map
test/sourcemaps/*.css
test/less-bom
test/less-bom
.antlr
53 changes: 53 additions & 0 deletions packages/less/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions packages/less/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@
"dependencies": {
"copy-anything": "^2.0.1",
"parse-node-version": "^1.0.1",
"peggy": "^3.0.2",
"tslib": "^2.3.0"
}
}
135 changes: 135 additions & 0 deletions packages/less/src/parser-antlr/CssLexer.g4
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
/**
* references:
* https://github.com/antlr/grammars-v4/blob/master/css3/css3.g4
* https://www.lifewire.com/css2-vs-css3-3466978
* https://www.w3.org/TR/css-syntax-3/
* https://github.com/jesscss/jess/blob/master/packages/css-parser/src/cssTokens.ts
*/
lexer grammar CssLexer;

fragment Newline
: '\\n' | '\\r' '\\n'? | '\\f'
;

fragment WS
: ' ' | '\\t' | Newline
;

/**
* Uses nongreedy wildcard
* @see https://github.com/antlr/antlr4/blob/master/doc/wildcard.md
*/
fragment Comment
: '/*' .*? '*/'
;

fragment Digit
: '0'..'9'
;

fragment Hex
: Digit
| 'a'..'f'
| 'A'..'F'
;

fragment Unicode
: '\\' Hex (Hex Hex Hex Hex Hex)? WS? // 1 or 6 hex digits
;

fragment Escape
: Unicode
| '\\' ~[\r\n\f0-9a-fA-F]
;

fragment DoubleString
: '"' ('\\' | ~[\n\r\f"] | Newline | Escape) '"'
;
fragment SingleString
: '\'' ('\\' | ~[\n\r\f'] | Newline | Escape) '\''
;

fragment String
: DoubleString | SingleString
;

fragment NonAscii
: '\u0240'..'\uffff'
;

fragment NmStart
: '_' | NonAscii | Escape
;

fragment NmChar
: [_a-zA-Z0-9-]
| NonAscii
| Escape
;

fragment Ident
: '-?' NmStart NmChar*
;

/** Reference: https://www.w3.org/TR/css-syntax-3/#consume-url-token */
fragment UrlFragment
: (~(
'('
| '"'
| '\''
// Non-printable
| '\u0000'..'\u0008'
| '\u000b'
| '\u000e'..'\u001f'
| '\u007f'
))*
;

fragment Integer
: ('+' | '-')? ('0'..'9')+
;

fragment Exp
: [eE][+-]Digit+
;

/** Any number that's not simply an integer e.g. 1.1 or 1e+1 */
fragment Number
: ('+' | '-')?
(
Digit* '.' Digit+ Exp?
| Digit+ Exp?
)
;

fragment WSorComment
: (WS | Comment)*
;

fragment Gt : '>';

CompareOp : (Gt | '<') '='?;
LCurly : '{';
RCurly : '}';
LParen : '(';
RParen : ')';
LSquare : '[';
RSquare : ']';
Semi : ';';

Plus : '+';
Minus : '-';
Comma : ',';
Divide : '/';
Eq : '=';
Star : '*';
Tilde : '~';

Combinator : Plus | Gt | Tilde;






38 changes: 38 additions & 0 deletions packages/less/src/parser-antlr/CssParser.g4
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/**
* @see https://www.w3.org/TR/css-syntax-3/#parser-diagrams
*/

parser grammar CssParser;

stylesheet
: (cdo | cdc | WS | qualified_rule | at_rule)* EOF
;

rule_list
: (WS | qualified_rule | at_rule)*
;

at_rule
: At_keyword at_rule_value* (curly_block | ';')
;

qualified_rule
: qualified_rule_value* qualified_rule_block
;

declaration_list
: WS* (
declaration (';' declaration_list)?
| at_rule declaration_list
)
;

declaration
: Ident WS* ':' declaration_value* important?
;

important
: '!' WS* Important WS*
;


0 comments on commit a2bbb1d

Please sign in to comment.