diff --git a/grammar.coffee b/grammar.coffee index a20f16e806..b6a7b1119f 100644 --- a/grammar.coffee +++ b/grammar.coffee @@ -183,6 +183,7 @@ module.exports = grammar @field_access, @deref_field_access, @number, + @char, @string) field_access: -> seq( @@ -226,6 +227,13 @@ module.exports = grammar number: -> /\d+(\.\d+)?/ + char: -> token(seq( + "'", + choice( + seq(optional("\\"), /[^']/), + seq("\\", "'")), + "'")) + string: -> token(seq( '"', repeat(choice(/[^"]/, '\\"')), '"')) diff --git a/grammar_test/expressions.txt b/grammar_test/expressions.txt index 0801190402..d06c10e5c9 100644 --- a/grammar_test/expressions.txt +++ b/grammar_test/expressions.txt @@ -12,6 +12,26 @@ int main() { (statement_block (expression_statement (function_call (identifier) (string) (identifier))))) +============================================ +Character literals +============================================ + +int main() { + 'a'; + '\0'; + '\t'; + '\''; +} + +--- + +(function_declaration (identifier) (identifier) (formal_parameters) + (statement_block + (expression_statement (char)) + (expression_statement (char)) + (expression_statement (char)) + (expression_statement (char)))) + ============================================ Field access ============================================